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

Reply via email to