Changeset: f6aa163ef5de for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f6aa163ef5de
Branch: groupjoin
Log Message:

merged with default


diffs (truncated from 833 to 300 lines):

diff --git a/ChangeLog.Jun2023 b/ChangeLog.Jun2023
--- a/ChangeLog.Jun2023
+++ b/ChangeLog.Jun2023
@@ -1,3 +1,7 @@
 # ChangeLog file for devel
 # This file is updated with Maddlog
 
+* Fri Sep 29 2023 Sjoerd Mullender <sjo...@acm.org>
+- Fixed an installation issue on Debian and Ubuntu introduced in the
+  last build.
+
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
@@ -214,7 +214,7 @@ BBPrec *BBP[N_BBPINIT];
 gdk_return BBPaddfarm(const char *dirname, uint32_t rolemask, bool logerror);
 void BBPcold(bat i);
 int BBPfix(bat b);
-unsigned BBPheader(FILE *fp, int *lineno, bat *bbpsize, lng *logno, lng 
*transid);
+unsigned BBPheader(FILE *fp, int *lineno, bat *bbpsize, lng *logno, lng 
*transid, bool allow_hge_upgrade);
 bat BBPindex(const char *nme);
 void BBPkeepref(BAT *b) __attribute__((__nonnull__(1)));
 bat BBPlimit;
diff --git a/clients/odbc/tests/ODBCtester.c b/clients/odbc/tests/ODBCtester.c
--- a/clients/odbc/tests/ODBCtester.c
+++ b/clients/odbc/tests/ODBCtester.c
@@ -88,11 +88,7 @@ retrieveDiagMsg(SQLHANDLE stmt, char * o
                /* The message layout is: "[MonetDB][ODBC Driver 
11.46.0][MonetDB-Test]error/warning text".
                   The ODBC driver version numbers changes in time. Overwrite 
it to get a stable output */
                if (strncmp(msg, "[MonetDB][ODBC Driver 11.", 25) == 0) {
-                       for (int i = 25; msg[i] != ']'; i++) {
-                               if (isdigit(msg[i])) {
-                                       msg[i] = '#';
-                               }
-                       }
+                       return snprintf(outp, outp_len, "SQLstate %s, Errnr %d, 
Message [MonetDB][ODBC Driver 11.##.#]%s\n", (char*)state, (int)errnr, 
strchr(msg + 25, ']') + 1);
                }
                return snprintf(outp, outp_len, "SQLstate %s, Errnr %d, Message 
%s\n", (char*)state, (int)errnr, (char*)msg);
        }
diff --git a/debian/rules b/debian/rules
--- a/debian/rules
+++ b/debian/rules
@@ -57,3 +57,6 @@ override_dh_auto_install:
        rm debian/tmp/usr/lib/*/monetdb5/lib_opt_sql_append.so
        rm debian/tmp/usr/lib/*/monetdb5/lib_microbenchmark*.so
        rm debian/tmp/usr/lib/*/monetdb5/lib_udf*.so
+
+override_dh_installsystemd:
+       dh_installsystemd --no-enable --no-start
diff --git a/gdk/ChangeLog b/gdk/ChangeLog
--- a/gdk/ChangeLog
+++ b/gdk/ChangeLog
@@ -1,3 +1,9 @@
 # ChangeLog file for GDK
 # This file is updated with Maddlog
 
+* Thu Sep 28 2023 Sjoerd Mullender <sjo...@acm.org>
+- We now prevent accidental upgrades from a database without 128 bit
+  integers to one with 128 bit integers (also known as HUGEINT) from
+  happening.  Upgrades will only be done if the server is started with
+  the option --set allow_hge_upgrade=yes.
+
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -985,7 +985,7 @@ BBPcheckbats(unsigned bbpversion)
 #endif
 
 unsigned
-BBPheader(FILE *fp, int *lineno, bat *bbpsize, lng *logno, lng *transid)
+BBPheader(FILE *fp, int *lineno, bat *bbpsize, lng *logno, lng *transid, bool 
allow_hge_upgrade)
 {
        char buf[BUFSIZ];
        int sz, ptrsize, oidsize, intsize;
@@ -1034,6 +1034,13 @@ BBPheader(FILE *fp, int *lineno, bat *bb
                             SIZEOF_MAX_INT, intsize);
                return 0;
        }
+       if (intsize < SIZEOF_MAX_INT && !allow_hge_upgrade) {
+               TRC_CRITICAL(GDK, "database created with incompatible server: "
+                            "expected max. integer size %d, got %d; "
+                            "use --set allow_hge_upgrade=yes to upgrade.",
+                            SIZEOF_MAX_INT, intsize);
+               return 0;
+       }
        if (fgets(buf, sizeof(buf), fp) == NULL) {
                TRC_CRITICAL(GDK, "short BBP");
                return 0;
@@ -1548,7 +1555,7 @@ BBPmanager(void *dummy)
 static MT_Id manager;
 
 gdk_return
-BBPinit(void)
+BBPinit(bool allow_hge_upgrade)
 {
        FILE *fp = NULL;
        struct stat st;
@@ -1678,7 +1685,7 @@ BBPinit(void)
                bbpversion = GDKLIBRARY;
        } else {
                lng logno, transid;
-               bbpversion = BBPheader(fp, &lineno, &bbpsize, &logno, &transid);
+               bbpversion = BBPheader(fp, &lineno, &bbpsize, &logno, &transid, 
allow_hge_upgrade);
                if (bbpversion == 0) {
                        ATOMIC_SET(&GDKdebug, dbg);
                        return GDK_FAIL;
@@ -3692,7 +3699,7 @@ BBPcheckBBPdir(void)
                if (fp == NULL)
                        return;
        }
-       bbpversion = BBPheader(fp, &lineno, &bbpsize, &logno, &transid);
+       bbpversion = BBPheader(fp, &lineno, &bbpsize, &logno, &transid, false);
        if (bbpversion == 0) {
                fclose(fp);
                return;         /* error reading file */
diff --git a/gdk/gdk_bbp.h b/gdk/gdk_bbp.h
--- a/gdk/gdk_bbp.h
+++ b/gdk/gdk_bbp.h
@@ -59,7 +59,7 @@
 #define BBPTRIM_ALL    (((size_t)1) << (sizeof(size_t)*8 - 2)) /* very large 
positive size_t */
 
 gdk_export bat getBBPsize(void); /* current occupied size of BBP array */
-gdk_export unsigned BBPheader(FILE *fp, int *lineno, bat *bbpsize, lng *logno, 
lng *transid);
+gdk_export unsigned BBPheader(FILE *fp, int *lineno, bat *bbpsize, lng *logno, 
lng *transid, bool allow_hge_upgrade);
 gdk_export int BBPreadBBPline(FILE *fp, unsigned bbpversion, int *lineno, BAT 
*bn,
 #ifdef GDKLIBRARY_HASHASH
                              int *hashash,
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1038,17 +1038,8 @@ log_create_types_file(logger *lg, const 
        return GDK_SUCCEED;
 }
 
-static inline void
-rotation_lock(logger *lg)
-{
-       MT_lock_set(&lg->rotation_lock);
-}
-
-static inline void
-rotation_unlock(logger *lg)
-{
-       MT_lock_unset(&lg->rotation_lock);
-}
+#define rotation_lock(lg)      MT_lock_set(&(lg)->rotation_lock)
+#define rotation_unlock(lg)    MT_lock_unset(&(lg)->rotation_lock)
 
 static gdk_return
 log_open_output(logger *lg)
@@ -1121,7 +1112,7 @@ log_close_output(logger *lg)
                close_stream(lg->current->output_log);
        }
        lg->current->output_log = NULL;
-       ATOMIC_INC(&lg->nr_open_files);
+       ATOMIC_DEC(&lg->nr_open_files);
 }
 
 static gdk_return
@@ -2285,7 +2276,6 @@ do_flush_range_cleanup(logger *lg)
        logged_range *flast = frange;
 
        lg->flush_ranges = flast;
-       rotation_unlock(lg);
 
        for (frange = first; frange && frange != flast; frange = frange->next) {
                ATOMIC_DEC(&frange->refcount);
@@ -2293,9 +2283,10 @@ do_flush_range_cleanup(logger *lg)
                        TRC_INFO(WAL, "closing output log %s", 
mnstr_name(frange->output_log));
                        close_stream(frange->output_log);
                        frange->output_log = NULL;
-                       ATOMIC_INC(&lg->nr_open_files);
+                       ATOMIC_DEC(&lg->nr_open_files);
                }
        }
+       rotation_unlock(lg);
        return flast;
 }
 
@@ -2416,6 +2407,7 @@ log_next_logfile(logger *lg, ulng ts)
 static void
 log_cleanup_range(logger *lg, ulng id)
 {
+       rotation_lock(lg);
        while (lg->pending && lg->pending->id <= id) {
                logged_range *p;
                p = lg->pending;
@@ -2423,6 +2415,7 @@ log_cleanup_range(logger *lg, ulng id)
                        lg->pending = p->next;
                GDKfree(p);
        }
+       rotation_unlock(lg);
 }
 
 static void
@@ -2536,9 +2529,9 @@ log_flush(logger *lg, ulng ts)
                                        log_unlock(lg);
                                        return GDK_FAIL;
                                }
+                               updated = p;
                                memset(updated + allocated / 4, 0, a - 
allocated);
                                allocated = a;
-                               updated = p;
                        }
                        nupdated = n;
                }
@@ -3036,17 +3029,8 @@ log_tend(logger *lg)
        return result;
 }
 
-static inline void
-flush_lock(logger *lg)
-{
-       MT_lock_set(&lg->flush_lock);
-}
-
-static inline void
-flush_unlock(logger *lg)
-{
-       MT_lock_unset(&lg->flush_lock);
-}
+#define flush_lock(lg)         MT_lock_set(&(lg)->flush_lock)
+#define flush_unlock(lg)       MT_lock_unset(&(lg)->flush_lock)
 
 static inline gdk_return
 do_flush(logged_range *range)
@@ -3076,6 +3060,7 @@ gdk_return
 log_tflush(logger *lg, ulng file_id, ulng commit_ts)
 {
        if (lg->flushnow) {
+               rotation_lock(lg);
                assert(lg->flush_ranges == lg->current);
                assert(ATOMIC_GET(&lg->current->flushed_ts) == 
ATOMIC_GET(&lg->current->last_ts));
                log_tdone(lg, lg->current, commit_ts);
@@ -3085,6 +3070,7 @@ log_tflush(logger *lg, ulng file_id, uln
                if (log_open_output(lg) != GDK_SUCCEED)
                        GDKfatal("Could not create new log file\n");    /* 
TODO: does not have to be fatal (yet) */
                do_rotate(lg);
+               rotation_unlock(lg);
                (void) do_flush_range_cleanup(lg);
                assert(lg->flush_ranges == lg->current);
                return log_commit(lg, NULL, 0);
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -110,7 +110,7 @@ void BBPdump(void)          /* never called: for
        __attribute__((__cold__));
 void BBPexit(void)
        __attribute__((__visibility__("hidden")));
-gdk_return BBPinit(void)
+gdk_return BBPinit(bool allow_hge_upgrade)
        __attribute__((__visibility__("hidden")));
 bat BBPinsert(BAT *bn)
        __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
@@ -1068,7 +1068,8 @@ GDKinit(opt *set, int setlen, bool embed
        else
 #endif
        GDK_mem_maxsize = (size_t) ((double) MT_npages() * (double) 
MT_pagesize() * 0.815);
-       if (BBPinit() != GDK_SUCCEED)
+       const char *allow = mo_find_option(set, setlen, "allow_hge_upgrade");
+       if (BBPinit(allow && strcmp(allow, "yes") == 0) != GDK_SUCCEED)
                return GDK_FAIL;
        first = false;
 
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -378,7 +378,6 @@ MCcloseClient(Client c)
        c->promptlength = -1;
        if (c->errbuf) {
                /* no client threads in embedded mode */
-               //if (!GDKembedded())
                GDKsetbuf(NULL);
                if (c->father == NULL)
                        GDKfree(c->errbuf);
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -3039,18 +3039,6 @@ check_distinct_exp_names(mvc *sql, list 
        return exps;
 }
 
-void
-exps_reset_freevar(list *exps)
-{
-       if (exps)
-               for(node *n=exps->h; n; n=n->next) {
-                       sql_exp *e = n->data;
-
-                       /*later use case per type */
-                       reset_freevar(e);
-               }
-}
-
 static int rel_find_parameter(mvc *sql, sql_subtype *type, sql_rel *rel, const 
char *relname, const char *expname);
 
 static int
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to