Skip to content

Commit 2e9b203

Browse files
committed
initial commit of postgresql "synchronous_commit on" during startup: not tested
1 parent 20a91e3 commit 2e9b203

11 files changed

+75
-1
lines changed

lib/libgfarm/gfarm/config.c

+10
Original file line numberDiff line numberDiff line change
@@ -978,9 +978,12 @@ int gfarm_write_verify_log_interval = GFARM_CONFIG_MISC_DEFAULT;
978978

979979
/* GFM dependent */
980980

981+
#define GFARM_METADB_BACKEND_SYNC_OFF_DURING_STARTUP_DEFAULT 1
982+
981983
enum gfarm_backend_db_type gfarm_backend_db_type = GFARM_BACKEND_DB_TYPE_NONE;
982984
enum gfarm_db_access_type gfarm_db_access_type = GFARM_DB_ACCESS_TYPE_DBQ;
983985
int gfarm_metadb_server_listen_backlog = GFARM_CONFIG_MISC_DEFAULT;
986+
int gfarm_metadb_backend_sync_off_during_startup = GFARM_CONFIG_MISC_DEFAULT;
984987

985988
static struct {
986989
enum gfarm_atime_type type;
@@ -3470,6 +3473,10 @@ parse_one_line(const char *s, char *p,
34703473
gfarm_auth_server_cred_name_set);
34713474
} else if (strcmp(s, o = "metadb_db_access_type") == 0) {
34723475
e = parse_db_access_type(p);
3476+
} else if (strcmp(s, o = "metadb_backend_sync_off_during_startup") == 0
3477+
) {
3478+
e = parse_set_misc_enabled(p,
3479+
&gfarm_metadb_backend_sync_off_during_startup);
34733480

34743481
} else if (strcmp(s, o = "ldap_server_host") == 0) {
34753482
e = parse_set_var(p, &gfarm_ldap_server_name);
@@ -4030,6 +4037,9 @@ gfarm_config_set_default_misc(void)
40304037
if (gfarm_write_verify_log_interval == GFARM_CONFIG_MISC_DEFAULT)
40314038
gfarm_write_verify_log_interval =
40324039
GFARM_WRITE_VERIFY_LOG_INTERVAL_DEFAULT;
4040+
if (metadb_backend_sync_off_during_startup == GFARM_CONFIG_MISC_DEFAULT)
4041+
gfarm_metadb_backend_sync_off_during_startup =
4042+
GFARM_METADB_BACKEND_SYNC_OFF_DURING_STARTUP_DEFAULT;
40334043

40344044
if (gfarm_spool_server_listen_backlog == GFARM_CONFIG_MISC_DEFAULT)
40354045
gfarm_spool_server_listen_backlog = LISTEN_BACKLOG_DEFAULT;

lib/libgfarm/gfarm/config.h

+2
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ enum gfarm_db_access_type {
6969
};
7070
extern enum gfarm_db_access_type gfarm_db_access_type;
7171

72+
extern int gfarm_metadb_backend_sync_off_during_startup;
73+
7274
/* auth TLS dependent */
7375
#define GFARM_TLS_CERTIFICATE_PATH_DEFAULT "/etc/pki/tls/certs"
7476
#define GFARM_TLS_KEY_PATH_DEFAULT "/etc/pki/tls/private"

server/gfmd/db_access.c

+8
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,14 @@ db_terminate(void)
433433
return (e);
434434
}
435435

436+
gfarm_error_t
437+
db_sync_mode(int mode)
438+
{
439+
gfarm_mutex_lock(&db_access_mutex, diag, DB_ACCESS_MUTEX_DIAG);
440+
e = ops->set_mode(mode);
441+
gfarm_mutex_unlock(&db_access_mutex, diag, DB_ACCESS_MUTEX_DIAG);
442+
}
443+
436444
pthread_mutex_t *
437445
get_db_access_mutex(void)
438446
{

server/gfmd/db_access.h

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
gfarm_error_t db_initialize(void);
88
gfarm_error_t db_terminate(void);
9+
gfarm_error_t db_sync_mode(int);
910
void *db_thread(void *);
1011
int db_getfreenum(void);
1112

server/gfmd/db_journal.c

+7
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ db_journal_noaction(void)
149149
return (GFARM_ERR_NO_ERROR);
150150
}
151151

152+
static gfarm_error_t
153+
db_journal_sync_mode_noaction(int)
154+
{
155+
return (GFARM_ERR_NO_ERROR);
156+
}
157+
152158
gfarm_error_t
153159
db_journal_init_status(void)
154160
{
@@ -4859,6 +4865,7 @@ db_journal_mdhost_load(void *closure,
48594865
struct db_ops db_journal_ops = {
48604866
db_journal_noaction,
48614867
db_journal_terminate,
4868+
db_journal_sync_mode_noaction,
48624869

48634870
db_journal_write_begin,
48644871
db_journal_write_end,

server/gfmd/db_journal_apply.c

+1
Original file line numberDiff line numberDiff line change
@@ -985,6 +985,7 @@ db_journal_apply_mdhost_remove(gfarm_uint64_t seqnum, char *name)
985985
const struct db_ops db_journal_apply_ops = {
986986
NULL,
987987
NULL,
988+
NULL,
988989

989990
db_journal_apply_begin,
990991
db_journal_apply_end,

server/gfmd/db_ldap.c

+7
Original file line numberDiff line numberDiff line change
@@ -1168,6 +1168,12 @@ gfarm_ldap_generic_info_get_foreach(
11681168

11691169
/**********************************************************************/
11701170

1171+
static gfarm_error_t
1172+
gfarm_ldap_sync_mode_nop(int mode)
1173+
{
1174+
return (GFARM_ERR_NO_ERROR);
1175+
}
1176+
11711177
static gfarm_error_t
11721178
gfarm_ldap_nop(gfarm_uint64_t seqnum, void *arg)
11731179
{
@@ -3426,6 +3432,7 @@ gfarm_ldap_quota_dir_load(void *closure,
34263432
const struct db_ops db_ldap_ops = {
34273433
gfarm_ldap_initialize,
34283434
gfarm_ldap_terminate,
3435+
gfarm_ldap_sync_mode_nop,
34293436

34303437
gfarm_ldap_nop,
34313438
gfarm_ldap_nop,

server/gfmd/db_none.c

+8
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ gfarm_none_terminate(void)
8383

8484
/**********************************************************************/
8585

86+
static gfarm_error_t
87+
gfarm_none_sync_mode_nop(int mode)
88+
{
89+
/* do not call modify_seqnum(), this is just startup operation */
90+
return (GFARM_ERR_NO_ERROR);
91+
}
92+
8693
static gfarm_error_t
8794
gfarm_none_nop(gfarm_uint64_t seqnum, void *arg)
8895
{
@@ -609,6 +616,7 @@ gfarm_none_mdhost_load(void *closure,
609616
const struct db_ops db_none_ops = {
610617
gfarm_none_initialize,
611618
gfarm_none_terminate,
619+
gfarm_none_sync_mode_nop,
612620

613621
gfarm_none_nop,
614622
gfarm_none_nop,

server/gfmd/db_ops.h

+1
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ struct db_mdhost_modify_arg {
169169
struct db_ops {
170170
gfarm_error_t (*initialize)(void);
171171
gfarm_error_t (*terminate)(void);
172+
gfarm_error_t (*sync_mode)(int);
172173

173174
gfarm_error_t (*begin)(gfarm_uint64_t, void *);
174175
gfarm_error_t (*end)(gfarm_uint64_t, void *);

server/gfmd/db_pgsql.c

+26-1
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,32 @@ gfarm_pgsql_initialize(void)
257257
return (GFARM_ERR_NO_ERROR);
258258
}
259259

260+
gfarm_error_t
261+
gfarm_pgsql_sync_mode(int mode)
262+
{
263+
gfarm_error_t e;
264+
PGresult *res;
265+
const char *cmd
266+
267+
if (mode) {
268+
cmd = "synchronous_commit on";
269+
} else {
270+
cmd = "synchronous_commit off";
271+
}
272+
res = PQexec(conn, cmd);
273+
if (PQresultStatus(res) == PGRES_COMMAND_OK) {
274+
gflog_info(GFARM_MSG_UNFIXED, "postgresql backend: %s", cmd);
275+
e = GFARM_ERR_NO_ERROR;
276+
} else {
277+
gflog_error(GFARM_MSG_UNFIXED, "%s: %s: %s",
278+
diag, cmd, PQresultErrorMessage(res));
279+
e = GFARM_ERR_UNKNOWN;
280+
}
281+
282+
PQclear(res);
283+
return (e);
284+
}
285+
260286
gfarm_error_t
261287
gfarm_pgsql_terminate(void)
262288
{
@@ -266,7 +292,6 @@ gfarm_pgsql_terminate(void)
266292
return (GFARM_ERR_NO_ERROR);
267293
}
268294

269-
270295
/**********************************************************************/
271296

272297
uint64_t

server/gfmd/gfmd.c

+4
Original file line numberDiff line numberDiff line change
@@ -1200,13 +1200,17 @@ boot_apply_db_journal(void)
12001200
static int boot_apply = 1;
12011201

12021202
gflog_info(GFARM_MSG_1003273, "start applying db journal");
1203+
if (gfarm_metadb_backend_sync_off_during_startup)
1204+
db_sync_mode_(0);
12031205
if ((e = create_detached_thread(db_journal_store_thread,
12041206
&boot_apply)) != GFARM_ERR_NO_ERROR)
12051207
gflog_fatal(GFARM_MSG_1003274,
12061208
"create_detached_thread(db_journal_store_thread): %s",
12071209
gfarm_error_string(e));
12081210

12091211
db_journal_wait_for_apply_thread();
1212+
if (gfarm_metadb_backend_sync_off_during_startup)
1213+
db_sync_mode_(1);
12101214
gflog_info(GFARM_MSG_1003275, "end applying db journal");
12111215

12121216
/*

0 commit comments

Comments
 (0)