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