Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf99760c

Browse files
committed
Convert wal_sync_method to guc enum.
1 parentf8c4d7d commitf99760c

File tree

5 files changed

+77
-63
lines changed

5 files changed

+77
-63
lines changed

‎src/backend/access/transam/xlog.c

Lines changed: 53 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.303 2008/05/1200:00:46 alvherre Exp $
10+
* $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.304 2008/05/1208:35:05 mha Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -66,8 +66,6 @@ intXLOGbuffers = 8;
6666
intXLogArchiveTimeout=0;
6767
boolXLogArchiveMode= false;
6868
char*XLogArchiveCommand=NULL;
69-
char*XLOG_sync_method=NULL;
70-
constcharXLOG_sync_method_default[]=DEFAULT_SYNC_METHOD_STR;
7169
boolfullPageWrites= true;
7270
boollog_checkpoints= false;
7371

@@ -95,6 +93,25 @@ static intopen_sync_bit = DEFAULT_SYNC_FLAGBIT;
9593

9694
#defineXLOG_SYNC_BIT (enableFsync ? open_sync_bit : 0)
9795

96+
/*
97+
* GUC support
98+
*/
99+
conststructconfig_enum_entrysync_method_options[]= {
100+
{"fsync",SYNC_METHOD_FSYNC},
101+
#ifdefHAVE_FSYNC_WRITETHROUGH
102+
{"fsync_writethrough",SYNC_METHOD_FSYNC_WRITETHROUGH},
103+
#endif
104+
#ifdefHAVE_FDATASYNC
105+
{"fdatasync",SYNC_METHOD_FDATASYNC},
106+
#endif
107+
#ifdefOPEN_SYNC_FLAG
108+
{"open_sync",SYNC_METHOD_OPEN},
109+
#endif
110+
#ifdefOPEN_DATASYNC_FLAG
111+
{"open_datasync",SYNC_METHOD_OPEN_DSYNC},
112+
#endif
113+
{NULL,0}
114+
};
98115

99116
/*
100117
* Statistics for current checkpoint are collected in this global struct.
@@ -1601,7 +1618,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch)
16011618
* have no open file or the wrong one.However, we do not need to
16021619
* fsync more than one file.
16031620
*/
1604-
if (sync_method!=SYNC_METHOD_OPEN)
1621+
if (sync_method!=SYNC_METHOD_OPEN&&sync_method!=SYNC_METHOD_OPEN_DSYNC)
16051622
{
16061623
if (openLogFile >=0&&
16071624
!XLByteInPrevSeg(LogwrtResult.Write,openLogId,openLogSeg))
@@ -6314,50 +6331,46 @@ xlog_outrec(StringInfo buf, XLogRecord *record)
63146331
/*
63156332
* GUC support
63166333
*/
6317-
constchar*
6318-
assign_xlog_sync_method(constchar*method,booldoit,GucSourcesource)
6334+
bool
6335+
assign_xlog_sync_method(intnew_sync_method,booldoit,GucSourcesource)
63196336
{
6320-
intnew_sync_method;
6321-
intnew_sync_bit;
6337+
intnew_sync_bit=0;
63226338

6323-
if (pg_strcasecmp(method,"fsync")==0)
6324-
{
6325-
new_sync_method=SYNC_METHOD_FSYNC;
6326-
new_sync_bit=0;
6327-
}
6328-
#ifdefHAVE_FSYNC_WRITETHROUGH
6329-
elseif (pg_strcasecmp(method, "fsync_writethrough")==0)
6330-
{
6331-
new_sync_method=SYNC_METHOD_FSYNC_WRITETHROUGH;
6332-
new_sync_bit=0;
6333-
}
6334-
#endif
6335-
#ifdefHAVE_FDATASYNC
6336-
elseif (pg_strcasecmp(method, "fdatasync")==0)
6339+
switch (new_sync_method)
63376340
{
6338-
new_sync_method=SYNC_METHOD_FDATASYNC;
6339-
new_sync_bit=0;
6340-
}
6341-
#endif
6341+
/*
6342+
* Values for these sync options are defined even if they are not
6343+
* supported on the current platform. They are not included in
6344+
* the enum option array, and therefor will never be set if the
6345+
* platform doesn't support it.
6346+
*/
6347+
caseSYNC_METHOD_FSYNC:
6348+
caseSYNC_METHOD_FSYNC_WRITETHROUGH:
6349+
caseSYNC_METHOD_FDATASYNC:
6350+
new_sync_bit=0;
6351+
break;
63426352
#ifdefOPEN_SYNC_FLAG
6343-
elseif (pg_strcasecmp(method, "open_sync")==0)
6344-
{
6345-
new_sync_method=SYNC_METHOD_OPEN;
6346-
new_sync_bit=OPEN_SYNC_FLAG;
6347-
}
6353+
caseSYNC_METHOD_OPEN:
6354+
new_sync_bit=OPEN_SYNC_FLAG;
6355+
break;
63486356
#endif
63496357
#ifdefOPEN_DATASYNC_FLAG
6350-
elseif (pg_strcasecmp(method, "open_datasync")==0)
6351-
{
6352-
new_sync_method=SYNC_METHOD_OPEN;
6353-
new_sync_bit=OPEN_DATASYNC_FLAG;
6354-
}
6358+
caseSYNC_METHOD_OPEN_DSYNC:
6359+
new_sync_bit=OPEN_DATASYNC_FLAG;
6360+
break;
63556361
#endif
6356-
else
6357-
returnNULL;
6362+
default:
6363+
/*
6364+
* This "can never happen", since the available values in
6365+
* new_sync_method are controlled by the available enum
6366+
* options.
6367+
*/
6368+
elog(PANIC,"unrecognized wal_sync_method: %d",sync_method);
6369+
break;
6370+
}
63586371

63596372
if (!doit)
6360-
returnmethod;
6373+
returntrue;
63616374

63626375
if (sync_method!=new_sync_method||open_sync_bit!=new_sync_bit)
63636376
{
@@ -6381,7 +6394,7 @@ assign_xlog_sync_method(const char *method, bool doit, GucSource source)
63816394
open_sync_bit=new_sync_bit;
63826395
}
63836396

6384-
returnmethod;
6397+
returntrue;
63856398
}
63866399

63876400

‎src/backend/utils/misc/guc.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* Written by Peter Eisentraut <peter_e@gmx.net>.
1111
*
1212
* IDENTIFICATION
13-
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.452 2008/05/1200:00:52 alvherre Exp $
13+
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.453 2008/05/1208:35:05 mha Exp $
1414
*
1515
*--------------------------------------------------------------------
1616
*/
@@ -270,6 +270,11 @@ static const struct config_enum_entry backslash_quote_options[] = {
270270
{NULL,0}
271271
};
272272

273+
/*
274+
* Options for enum values stored in other modules
275+
*/
276+
externconststructconfig_enum_entrysync_method_options[];
277+
273278
/*
274279
* GUC option variables that are exported from this module
275280
*/
@@ -2327,15 +2332,6 @@ static struct config_string ConfigureNamesString[] =
23272332
"localhost",NULL,NULL
23282333
},
23292334

2330-
{
2331-
{"wal_sync_method",PGC_SIGHUP,WAL_SETTINGS,
2332-
gettext_noop("Selects the method used for forcing WAL updates to disk."),
2333-
NULL
2334-
},
2335-
&XLOG_sync_method,
2336-
XLOG_sync_method_default,assign_xlog_sync_method,NULL
2337-
},
2338-
23392335
{
23402336
{"custom_variable_classes",PGC_SIGHUP,CUSTOM_OPTIONS,
23412337
gettext_noop("Sets the list of known custom variable classes."),
@@ -2528,6 +2524,16 @@ static struct config_enum ConfigureNamesEnum[] =
25282524
assign_session_replication_role,NULL
25292525
},
25302526

2527+
{
2528+
{"wal_sync_method",PGC_SIGHUP,WAL_SETTINGS,
2529+
gettext_noop("Selects the method used for forcing WAL updates to disk."),
2530+
NULL
2531+
},
2532+
&sync_method,
2533+
DEFAULT_SYNC_METHOD,sync_method_options,
2534+
assign_xlog_sync_method,NULL
2535+
},
2536+
25312537
{
25322538
{"xmlbinary",PGC_USERSET,CLIENT_CONN_STATEMENT,
25332539
gettext_noop("Sets how binary values are to be encoded in XML."),

‎src/include/access/xlog.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
9-
* $PostgreSQL: pgsql/src/include/access/xlog.h,v 1.87 2008/01/01 19:45:56 momjian Exp $
9+
* $PostgreSQL: pgsql/src/include/access/xlog.h,v 1.88 2008/05/12 08:35:05 mha Exp $
1010
*/
1111
#ifndefXLOG_H
1212
#defineXLOG_H
@@ -88,8 +88,9 @@ typedef struct XLogRecord
8888
/* Sync methods */
8989
#defineSYNC_METHOD_FSYNC0
9090
#defineSYNC_METHOD_FDATASYNC1
91-
#defineSYNC_METHOD_OPEN2/* for O_SYNCand O_DSYNC*/
91+
#defineSYNC_METHOD_OPEN2/* for O_SYNC */
9292
#defineSYNC_METHOD_FSYNC_WRITETHROUGH3
93+
#defineSYNC_METHOD_OPEN_DSYNC4/* for O_DSYNC */
9394
externintsync_method;
9495

9596
/*
@@ -141,8 +142,6 @@ extern intXLOGbuffers;
141142
externboolXLogArchiveMode;
142143
externchar*XLogArchiveCommand;
143144
externintXLogArchiveTimeout;
144-
externchar*XLOG_sync_method;
145-
externconstcharXLOG_sync_method_default[];
146145
externboollog_checkpoints;
147146

148147
#defineXLogArchivingActive()(XLogArchiveMode)

‎src/include/access/xlogdefs.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/include/access/xlogdefs.h,v 1.19 2008/01/01 19:45:56 momjian Exp $
10+
* $PostgreSQL: pgsql/src/include/access/xlogdefs.h,v 1.20 2008/05/12 08:35:05 mha Exp $
1111
*/
1212
#ifndefXLOG_DEFS_H
1313
#defineXLOG_DEFS_H
@@ -109,19 +109,15 @@ typedef uint32 TimeLineID;
109109
#endif
110110

111111
#if defined(OPEN_DATASYNC_FLAG)
112-
#defineDEFAULT_SYNC_METHOD_STR "open_datasync"
113-
#defineDEFAULT_SYNC_METHODSYNC_METHOD_OPEN
112+
#defineDEFAULT_SYNC_METHODSYNC_METHOD_OPEN_DSYNC
114113
#defineDEFAULT_SYNC_FLAGBITOPEN_DATASYNC_FLAG
115114
#elif defined(HAVE_FDATASYNC)
116-
#defineDEFAULT_SYNC_METHOD_STR "fdatasync"
117115
#defineDEFAULT_SYNC_METHODSYNC_METHOD_FDATASYNC
118116
#defineDEFAULT_SYNC_FLAGBIT0
119117
#elif defined(HAVE_FSYNC_WRITETHROUGH_ONLY)
120-
#defineDEFAULT_SYNC_METHOD_STR "fsync_writethrough"
121118
#defineDEFAULT_SYNC_METHODSYNC_METHOD_FSYNC_WRITETHROUGH
122119
#defineDEFAULT_SYNC_FLAGBIT0
123120
#else
124-
#defineDEFAULT_SYNC_METHOD_STR "fsync"
125121
#defineDEFAULT_SYNC_METHODSYNC_METHOD_FSYNC
126122
#defineDEFAULT_SYNC_FLAGBIT0
127123
#endif

‎src/include/utils/guc.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Copyright (c) 2000-2008, PostgreSQL Global Development Group
88
* Written by Peter Eisentraut <peter_e@gmx.net>.
99
*
10-
* $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.94 2008/04/18 01:42:17 tgl Exp $
10+
* $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.95 2008/05/12 08:35:05 mha Exp $
1111
*--------------------------------------------------------------------
1212
*/
1313
#ifndefGUC_H
@@ -267,7 +267,7 @@ extern const char *assign_search_path(const char *newval,
267267
booldoit,GucSourcesource);
268268

269269
/* in access/transam/xlog.c */
270-
externconstchar*assign_xlog_sync_method(constchar*method,
271-
booldoit,GucSourcesource);
270+
externboolassign_xlog_sync_method(intnewval,
271+
booldoit,GucSourcesource);
272272

273273
#endif/* GUC_H */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp