Changeset: 3610f136ae30 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/3610f136ae30 Modified Files: gdk/gdk_bbp.c gdk/gdk_logger.c gdk/gdk_private.h gdk/gdk_utils.c tools/mserver/mserver5.1.in tools/mserver/mserver5.c Branch: default Log Message:
Implemented mserver5 option --process-wal-and-exit. This causes the server to exit as soon as the write-ahead log has been processed. diffs (115 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -1745,7 +1745,7 @@ BBPmanager(void *dummy) static MT_Id manager; gdk_return -BBPinit(bool allow_hge_upgrade) +BBPinit(bool allow_hge_upgrade, bool no_manager) { FILE *fp = NULL; struct stat st; @@ -2013,7 +2013,7 @@ BBPinit(bool allow_hge_upgrade) } } - if (!GDKinmemory(0) && MT_create_thread(&manager, BBPmanager, NULL, MT_THR_DETACHED, "BBPmanager") < 0) { + if (!GDKinmemory(0) && !no_manager && MT_create_thread(&manager, BBPmanager, NULL, MT_THR_DETACHED, "BBPmanager") < 0) { TRC_CRITICAL(GDK, "Could not start BBPmanager thread."); return GDK_FAIL; } diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -2280,6 +2280,10 @@ log_load(const char *fn, logger *lg, cha if (log_readlogs(lg, filename) != GDK_SUCCEED) { goto error; } + if (GDKgetenv_isyes("process-wal-and-exit")) { + printf("# mserver5 exiting\n"); + exit(0); + } if (lg->postfuncp && (*lg->postfuncp) (lg->funcdata, lg) != GDK_SUCCEED) goto error; if (needsnew) { @@ -2307,6 +2311,10 @@ log_load(const char *fn, logger *lg, cha } } else { lg->id = lg->saved_id + 1; + if (GDKgetenv_isyes("process-wal-and-exit")) { + printf("# mserver5 exiting\n"); + exit(0); + } } #ifdef GDKLIBRARY_JSON if (log_json_upgrade_finalize() == GDK_FAIL) diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h --- a/gdk/gdk_private.h +++ b/gdk/gdk_private.h @@ -91,7 +91,7 @@ void BBPdump(void) /* never called: for __attribute__((__cold__)); void BBPexit(void) __attribute__((__visibility__("hidden"))); -gdk_return BBPinit(bool allow_hge_upgrade) +gdk_return BBPinit(bool allow_hge_upgrade, bool no_manager) __attribute__((__visibility__("hidden"))); bat BBPallocbat(int tt) __attribute__((__warn_unused_result__)) diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -1050,7 +1050,8 @@ GDKinit(opt *set, int setlen, bool embed #endif GDK_mem_maxsize = (size_t) ((double) MT_npages() * (double) MT_pagesize() * 0.815); const char *allow = mo_find_option(set, setlen, "allow_hge_upgrade"); - if (BBPinit(allow && strcmp(allow, "yes") == 0) != GDK_SUCCEED) + const char *procwalxit = mo_find_option(set, setlen, "process-wal-and-exit"); + if (BBPinit(allow && strcmp(allow, "yes") == 0, procwalxit && strcmp(procwalxit, "yes") == 0) != GDK_SUCCEED) return GDK_FAIL; first = false; diff --git a/tools/mserver/mserver5.1.in b/tools/mserver/mserver5.1.in --- a/tools/mserver/mserver5.1.in +++ b/tools/mserver/mserver5.1.in @@ -283,6 +283,9 @@ This option is used by .IR monetdbd (1) when creating a new database with an administrator password and should not be used otherwise. +.TP +.B \-\-process\-wal\-and\-exit +Stop the server immediately after processing the write-ahead log. .SH MSERVER5 PARAMETERS .I Mserver5 instructs the GDK kernel through the MAL (MonetDB Assembler Language) diff --git a/tools/mserver/mserver5.c b/tools/mserver/mserver5.c --- a/tools/mserver/mserver5.c +++ b/tools/mserver/mserver5.c @@ -339,6 +339,7 @@ main(int argc, char **av) {"read-password-initialize-and-exit", no_argument, NULL, 0}, {"loadmodule", required_argument, NULL, 0}, {"without-geom", no_argument, NULL, 0}, + {"process-wal-and-exit", no_argument, NULL, 0}, {NULL, 0, NULL, 0} }; @@ -515,6 +516,11 @@ main(int argc, char **av) readpwdxit = true; break; } + if (strcmp(long_options[option_index].name, "process-wal-and-exit") == 0) { + setlen = mo_add_option(&set, setlen, opt_cmdline, + "process-wal-and-exit", "yes"); + break; + } if (strcmp(long_options[option_index].name, "loadmodule") == 0) { if (mods < MAX_MODULES) modules[mods++] = optarg; @@ -876,7 +882,6 @@ main(int argc, char **av) fflush(stdout); #endif - /* why busy wait ? */ while (!interrupted && !GDKexiting()) { if (usr1_interrupted) { usr1_interrupted = 0; _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org