Changeset: 07451d5815b5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/07451d5815b5 Modified Files: clients/Tests/exports.stable.out ctest/monetdb5/mal/test_malEmbeddedBoot.c ctest/monetdb5/mal/test_malInclude.c gdk/gdk_utils.c gdk/gdk_utils.h monetdb5/mal/mal.c monetdb5/mal/mal.h monetdb5/mal/mal_prelude.c sql/backends/monet5/sql_scenario.c tools/monetdbe/monetdbe.c tools/mserver/mserver5.c tools/mserver/shutdowntest.c Branch: Jun2023 Log Message:
Check that GDK, MAL, and SQL libraries are all same revision as mserver5's main. diffs (259 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -289,7 +289,7 @@ bool GDKgetenv_istrue(const char *name); bool GDKgetenv_isyes(const char *name); gdk_return GDKgetsem(int sem_id, int count, int *semid); gdk_return GDKgetsemval(int sem_id, int number, int *semval); -gdk_return GDKinit(struct opt *set, int setlen, bool embedded); +gdk_return GDKinit(struct opt *set, int setlen, bool embedded, const char *caller_revision); BAT *GDKinitialize_segment_tree(void); void *GDKinitmmap(size_t id, size_t size, size_t *return_size); bool GDKinmemory(int farmid); @@ -1033,7 +1033,7 @@ void mal_atom_reset(void); ClientRec *mal_clients; MT_Lock mal_contextLock; _Noreturn void mal_exit(int status); -int mal_init(char *modules[], bool embedded, const char *initpasswd); +int mal_init(char *modules[], bool embedded, const char *initpasswd, const char *caller_revision); void mal_instruction_reset(void); void mal_module(const char *name, mel_atom *atoms, mel_func *funcs); void mal_module2(const char *name, mel_atom *atoms, mel_func *funcs, mel_init initfunc, const char *code); diff --git a/ctest/monetdb5/mal/test_malEmbeddedBoot.c b/ctest/monetdb5/mal/test_malEmbeddedBoot.c --- a/ctest/monetdb5/mal/test_malEmbeddedBoot.c +++ b/ctest/monetdb5/mal/test_malEmbeddedBoot.c @@ -18,7 +18,7 @@ main(void) char* msg = MAL_SUCCEED; gdk_return gdk_res; - gdk_res = GDKinit(NULL, 0, true); + gdk_res = GDKinit(NULL, 0, true, NULL); if (gdk_res != GDK_SUCCEED) { msg = createException(MAL, "embedded.monetdb_startup", "GDKinit() failed"); return 1; diff --git a/ctest/monetdb5/mal/test_malInclude.c b/ctest/monetdb5/mal/test_malInclude.c --- a/ctest/monetdb5/mal/test_malInclude.c +++ b/ctest/monetdb5/mal/test_malInclude.c @@ -18,7 +18,7 @@ main(void) { gdk_return gdk_res; - gdk_res = GDKinit(NULL, 0, true); + gdk_res = GDKinit(NULL, 0, true, NULL); if (gdk_res != GDK_SUCCEED) { createException(MAL, "embedded.monetdb_startup", "GDKinit() failed"); return 1; @@ -26,6 +26,6 @@ main(void) char *modules[2]; modules[0] = "sql"; modules[1] = 0; - mal_init(modules, true, NULL); + mal_init(modules, true, NULL, NULL); return 0; } diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -895,7 +895,7 @@ GDKembedded(void) static MT_Id mainpid; gdk_return -GDKinit(opt *set, int setlen, bool embedded) +GDKinit(opt *set, int setlen, bool embedded, const char *caller_revision) { static bool first = true; const char *dbpath; @@ -905,6 +905,14 @@ GDKinit(opt *set, int setlen, bool embed int i, nlen = 0; char buf[16]; + if (caller_revision) { + p = mercurial_revision(); + if (p && strcmp(p, caller_revision) != 0) { + GDKerror("incompatible versions: caller is %s, GDK is %s\n", caller_revision, p); + return GDK_FAIL; + } + } + ATOMIC_SET(&GDKstopped, 0); mainpid = MT_getpid(); diff --git a/gdk/gdk_utils.h b/gdk/gdk_utils.h --- a/gdk/gdk_utils.h +++ b/gdk/gdk_utils.h @@ -104,7 +104,7 @@ gdk_export size_t GDKmallocated(const vo gdk_export void MT_init(void); /* init the package. */ struct opt; -gdk_export gdk_return GDKinit(struct opt *set, int setlen, bool embedded); +gdk_export gdk_return GDKinit(struct opt *set, int setlen, bool embedded, const char *caller_revision); /* used for testing only */ gdk_export void GDKsetmallocsuccesscount(lng count); diff --git a/monetdb5/mal/mal.c b/monetdb5/mal/mal.c --- a/monetdb5/mal/mal.c +++ b/monetdb5/mal/mal.c @@ -36,6 +36,7 @@ lng MALdebug; #include "mal_runtime.h" #include "mal_resource.h" #include "mal_atom.h" +#include "mutils.h" MT_Lock mal_contextLock = MT_LOCK_INITIALIZER(mal_contextLock); MT_Lock mal_profileLock = MT_LOCK_INITIALIZER(mal_profileLock); @@ -54,7 +55,7 @@ mal_version(void) */ int -mal_init(char *modules[], bool embedded, const char *initpasswd) +mal_init(char *modules[], bool embedded, const char *initpasswd, const char *caller_revision) { /* Any error encountered here terminates the process * with a message sent to stderr @@ -73,6 +74,14 @@ mal_init(char *modules[], bool embedded, return -1; } + if (caller_revision) { + const char *p = mercurial_revision(); + if (p && strcmp(p, caller_revision) != 0) { + TRC_CRITICAL(MAL_SERVER, "incompatible versions: caller is %s, MAL is %s\n", caller_revision, p); + return -1; + } + } + if (!MCinit()) return -1; initNamespace(); diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h --- a/monetdb5/mal/mal.h +++ b/monetdb5/mal/mal.h @@ -70,7 +70,7 @@ mal_export stream *maleventstream; mal_export MT_Lock mal_contextLock; -mal_export int mal_init(char *modules[], bool embedded, const char *initpasswd); +mal_export int mal_init(char *modules[], bool embedded, const char *initpasswd, const char *caller_revision); mal_export _Noreturn void mal_exit(int status); mal_export void mal_reset(void); mal_export const char *mal_version(void); diff --git a/monetdb5/mal/mal_prelude.c b/monetdb5/mal/mal_prelude.c --- a/monetdb5/mal/mal_prelude.c +++ b/monetdb5/mal/mal_prelude.c @@ -22,6 +22,7 @@ #include "mal_parser.h" #include "mal_authorize.h" #include "mal_private.h" +#include "mutils.h" #include "mal_prelude.h" @@ -93,14 +94,18 @@ initModule(Client c, const char *name, c msg = (*pci->fcn)(&ret); (void)ret; } else if (pci && pci->token == PATTERNsymbol) { + void *mb = NULL; assert(pci->fcn != NULL); if (strcmp(name, "sql") == 0) { /* HACK ALERT: temporarily use sqlcontext to pass * the initial password to the prelude function */ assert(c->sqlcontext == NULL); c->sqlcontext = (void *) initpasswd; + /* HACK ALERT: use mb (MalBlkPtr) to pass revision + * string in order to check that in the callee */ + mb = (void *) mercurial_revision(); } - msg = (*pci->fcn)(c, NULL, NULL, NULL); + msg = (*pci->fcn)(c, mb, NULL, NULL); } } } diff --git a/sql/backends/monet5/sql_scenario.c b/sql/backends/monet5/sql_scenario.c --- a/sql/backends/monet5/sql_scenario.c +++ b/sql/backends/monet5/sql_scenario.c @@ -41,6 +41,7 @@ #include "mal_scenario.h" #include "mal_authorize.h" #include "mcrypt.h" +#include "mutils.h" #include "bat5.h" #include "msabaoth.h" #include "gdk_time.h" @@ -94,6 +95,15 @@ SQLprelude(Client cntxt, MalBlkPtr mb, M * password to the prelude function */ const char *initpasswd = cntxt->sqlcontext; cntxt->sqlcontext = NULL; + /* HACK ALERT: use mb (MalBlkPtr) to pass revision string in order + * to check that in the callee */ + if (mb) { + const char *caller_revision = (const char *) (void *) mb; + const char *p = mercurial_revision(); + if (p && strcmp(p, caller_revision) != 0) { + throw(MAL, "sq;.start", "incompatible versions: caller is %s, GDK is %s\n", caller_revision, p); + } + } (void) mb; (void) stk; diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c --- a/tools/monetdbe/monetdbe.c +++ b/tools/monetdbe/monetdbe.c @@ -33,6 +33,7 @@ #include "remote.h" #include "sql.h" #include "sql_result.h" +#include "mutils.h" #define UNUSED(x) (void)(x) @@ -739,7 +740,7 @@ monetdbe_startup(monetdbe_database_inter goto cleanup; } } - gdk_res = GDKinit(set, setlen, true); + gdk_res = GDKinit(set, setlen, true, mercurial_revision()); mo_free_options(set, setlen); if (gdk_res != GDK_SUCCEED) { set_error(mdbe, createException(MAL, "monetdbe.monetdbe_startup", "GDKinit() failed")); diff --git a/tools/mserver/mserver5.c b/tools/mserver/mserver5.c --- a/tools/mserver/mserver5.c +++ b/tools/mserver/mserver5.c @@ -241,7 +241,7 @@ monet_init(opt *set, int setlen, bool em } /* determine Monet's kernel settings */ - if (GDKinit(set, setlen, embedded) != GDK_SUCCEED) + if (GDKinit(set, setlen, embedded, mercurial_revision()) != GDK_SUCCEED) return 0; #ifdef HAVE_SETSID @@ -795,7 +795,7 @@ main(int argc, char **av) } modules[mods++] = 0; - if (mal_init(modules, false, readpwdxit ? secret : NULL)) { + if (mal_init(modules, false, readpwdxit ? secret : NULL, mercurial_revision())) { /* don't show this as a crash */ if (!GDKinmemory(0)) msab_registerStop(); diff --git a/tools/mserver/shutdowntest.c b/tools/mserver/shutdowntest.c --- a/tools/mserver/shutdowntest.c +++ b/tools/mserver/shutdowntest.c @@ -118,7 +118,7 @@ static str monetdb_initialize(void) { retval = GDKstrdup("BBPaddfarm failed"); goto cleanup; } - if (GDKinit(set, setlen, true) != GDK_SUCCEED) { + if (GDKinit(set, setlen, true, NULL) != GDK_SUCCEED) { retval = GDKstrdup("GDKinit() failed"); goto cleanup; } @@ -249,7 +249,7 @@ static str monetdb_initialize(void) { char *modules[2]; modules[0] = "sql"; modules[1] = 0; - if (mal_init(modules, true, NULL) != 0) { // mal_init() does not return meaningful codes on failure + if (mal_init(modules, true, NULL, NULL) != 0) { // mal_init() does not return meaningful codes on failure retval = GDKstrdup("mal_init() failed"); goto cleanup; } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org