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