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 -- [email protected]
To unsubscribe send an email to [email protected]