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

Reply via email to