Changeset: ec9bb0f9ed35 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/ec9bb0f9ed35 Modified Files: sql/backends/monet5/sql_scenario.c sql/server/sql_mvc.c Branch: sql_profiler Log Message:
Merge with default. diffs (truncated from 788 to 300 lines): diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -769,3 +769,4 @@ 1252291e5c0ddc91ccb16d612d04e34e6a7d3bc3 1252291e5c0ddc91ccb16d612d04e34e6a7d3bc3 Jun2020_SP2_release 59de1ee118d4eccc072c0cf3938f90635a7db311 Jan2022_15 59de1ee118d4eccc072c0cf3938f90635a7db311 Jan2022_SP3_release +38ba6e40ba9148c762fe4a4b40f4937f86e516b6 Jul2021_25 diff --git a/gdk/ChangeLog.Jan2022 b/gdk/ChangeLog.Jan2022 --- a/gdk/ChangeLog.Jan2022 +++ b/gdk/ChangeLog.Jan2022 @@ -1,6 +1,11 @@ # ChangeLog file for GDK # This file is updated with Maddlog +* Tue Aug 2 2022 Sjoerd Mullender <[email protected]> +- When destroying a bat, make sure there are no files left over in + the BACKUP directory since they can cause problems when the bat id + gets reused. + * Thu Jul 28 2022 Sjoerd Mullender <[email protected]> - Fixed an off-by-one error in the logger which caused older log files to stick around longer in the write-ahead log than necessary. diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -162,10 +162,10 @@ log_find(BAT *b, BAT *d, int val) static log_bid internal_find_bat(logger *lg, log_id id, int tid) { - BATiter cni = bat_iterator(lg->catalog_id); BUN p; if (BAThash(lg->catalog_id) == GDK_SUCCEED) { + BATiter cni = bat_iterator(lg->catalog_id); MT_rwlock_rdlock(&cni.b->thashlock); if (tid < 0) { HASHloop_int(cni, cni.b->thash, p, &id) { @@ -192,9 +192,10 @@ internal_find_bat(logger *lg, log_id id, } } MT_rwlock_rdunlock(&cni.b->thashlock); + bat_iterator_end(&cni); + return 0; /* not found */ } - bat_iterator_end(&cni); - return 0; + return -1; /* error creating hash */ } static void @@ -650,8 +651,9 @@ la_bat_update_count(logger *lg, log_id i } } MT_rwlock_rdunlock(&cni.b->thashlock); + return GDK_SUCCEED; } - return GDK_SUCCEED; + return GDK_FAIL; } static gdk_return @@ -660,6 +662,8 @@ la_bat_updates(logger *lg, logaction *la log_bid bid = internal_find_bat(lg, la->cid, tid); BAT *b = NULL; + if (bid < 0) + return GDK_FAIL; if (bid == 0) return GDK_SUCCEED; /* ignore bats no longer in the catalog */ @@ -751,6 +755,8 @@ la_bat_destroy(logger *lg, logaction *la { log_bid bid = internal_find_bat(lg, la->cid, tid); + if (bid < 0) + return GDK_FAIL; if (bid && log_del_bat(lg, bid) != GDK_SUCCEED) return GDK_FAIL; return GDK_SUCCEED; @@ -2622,6 +2628,10 @@ log_bat_transient(logger *lg, log_id id) log_bid bid = internal_find_bat(lg, id, -1); logformat l; + if (bid < 0) { + log_unlock(lg); + return GDK_FAIL; + } l.flag = LOG_DESTROY; l.id = id; @@ -3036,6 +3046,8 @@ log_add_bat(logger *lg, BAT *b, log_id i b == lg->seqs_val || b == lg->dseqs); assert(b->batRole == PERSISTENT); + if (bid < 0) + return GDK_FAIL; if (bid) { if (bid != b->batCacheid) { if (log_del_bat(lg, bid) != GDK_SUCCEED) diff --git a/gdk/gdk_logger_old.c b/gdk/gdk_logger_old.c --- a/gdk/gdk_logger_old.c +++ b/gdk/gdk_logger_old.c @@ -306,6 +306,7 @@ old_logger_find_bat(old_logger *lg, cons } } MT_rwlock_rdunlock(&cni.b->thashlock); + return 0; /* not found */ } } else { BATiter cni = bat_iterator_nolock(lg->catalog_oid); @@ -324,9 +325,10 @@ old_logger_find_bat(old_logger *lg, cons } } MT_rwlock_rdunlock(&cni.b->thashlock); + return 0; /* not found */ } } - return 0; + return -1; /* BAThash failed */ } static gdk_return @@ -335,6 +337,9 @@ la_bat_clear(old_logger *lg, logaction * log_bid bid = old_logger_find_bat(lg, la->name, la->tpe, la->cid); BAT *b; + if (bid < 0) + return GDK_FAIL; + if (lg->lg->debug & 1) fprintf(stderr, "#la_bat_clear %s\n", NAME(la->name, la->tpe, la->cid)); @@ -402,6 +407,8 @@ static log_return log_read_updates(old_logger *lg, trans *tr, logformat *l, char *name, int tpe, oid id, int pax) { log_bid bid = old_logger_find_bat(lg, name, tpe, id); + if (bid < 0) + return LOG_ERR; BAT *b = BATdescriptor(bid); log_return res = LOG_OK; int ht = -1, tt = -1, tseq = 0; @@ -618,6 +625,8 @@ la_bat_updates(old_logger *lg, logaction log_bid bid = old_logger_find_bat(lg, la->name, la->tpe, la->cid); BAT *b; + if (bid < 0) + return GDK_FAIL; if (bid == 0) return GDK_SUCCEED; /* ignore bats no longer in the catalog */ @@ -697,6 +706,8 @@ la_bat_destroy(old_logger *lg, logaction { log_bid bid = old_logger_find_bat(lg, la->name, la->tpe, la->cid); + if (bid < 0) + return GDK_FAIL; if (bid) { BUN p; @@ -1487,6 +1498,8 @@ logger_load(const char *fn, char filenam goto error; } snapshots_bid = old_logger_find_bat(lg, "snapshots_bid", 0, 0); + if (snapshots_bid < 0) + goto error; if (snapshots_bid == 0) { lg->snapshots_bid = logbat_new(TYPE_int, 1, TRANSIENT); lg->snapshots_tid = logbat_new(TYPE_int, 1, TRANSIENT); @@ -1501,6 +1514,8 @@ logger_load(const char *fn, char filenam bat snapshots_tid = old_logger_find_bat(lg, "snapshots_tid", 0, 0); bat dsnapshots = old_logger_find_bat(lg, "dsnapshots", 0, 0); + if (snapshots_tid < 0 || dsnapshots < 0) + goto error; GDKdebug &= ~CHECKMASK; lg->snapshots_bid = BATdescriptor(snapshots_bid); if (lg->snapshots_bid == NULL) { @@ -1914,6 +1929,8 @@ logger_add_bat(old_logger *lg, BAT *b, c b == lg->seqs_val || b == lg->dseqs); assert(b->batRole == PERSISTENT); + if (bid < 0) + return GDK_FAIL; if (bid) { if (bid != b->batCacheid) { if (logger_del_bat(lg, bid) != GDK_SUCCEED) 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 @@ -248,20 +248,6 @@ SQLprepareClient(Client c, int login) } } else { assert(0); -#if 0 - be = c->sqlcontext; - m = be->mvc; - /* Only reset if there is no active transaction which - * can happen when we combine sql.init with msql. - */ - if (m->session->tr->active) - return NULL; - if (mvc_reset(m, c->fdin, c->fdout, SQLdebug) < 0) { - msg = createException(SQL,"sql.initClient", SQLSTATE(HY013) MAL_MALLOC_FAIL); - goto bailout; - } - backend_reset(be); -#endif } MT_lock_unset(&sql_contextLock); if (login) { diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c --- a/sql/server/sql_mvc.c +++ b/sql/server/sql_mvc.c @@ -841,64 +841,6 @@ mvc_create(sql_store *store, sql_allocat return m; } -int -mvc_reset(mvc *m, bstream *rs, stream *ws, int debug) -{ - int res = 1, reset; - sql_trans *tr; - - TRC_DEBUG(SQL_TRANS, "MVC reset\n"); - tr = m->session->tr; - if (tr && tr->parent) { - assert(m->session->tr->active == 0); - while (tr->parent->parent != NULL) - m->session->tr = tr = sql_trans_destroy(tr); - } - reset = sql_session_reset(m->session, 1 /*autocommit on*/); - if (tr && !reset) - res = 0; - - if (m->sa) - m->sa = sa_reset(m->sa); - else - m->sa = sa_create(m->pa); - if(!m->sa) - res = 0; - m->ta = sa_reset(m->ta); - - m->errstr[0] = '\0'; - - m->params = NULL; - /* reset frames to the set of global variables */ - stack_pop_until(m, 0); - m->frame = 0; - m->sym = NULL; - - m->role_id = m->user_id = -1; - m->emode = m_normal; - m->emod = mod_none; - if (m->reply_size != 100) - sqlvar_set_number(find_global_var(m, mvc_bind_schema(m, "sys"), "reply_size"), 100); - m->reply_size = 100; - if (m->timezone != 0) - sqlvar_set_number(find_global_var(m, mvc_bind_schema(m, "sys"), "current_timezone"), 0); - m->timezone = 0; - if (m->sql_optimizer != INT_MAX) - sqlvar_set_number(find_global_var(m, mvc_bind_schema(m, "sys"), "sql_optimizer"), INT_MAX); - m->sql_optimizer = INT_MAX; - if (m->debug != debug) - sqlvar_set_number(find_global_var(m, mvc_bind_schema(m, "sys"), "debug"), debug); - m->debug = debug; - - m->label = 0; - m->cascade_action = NULL; - m->runs = NULL; - m->type = Q_PARSE; - - scanner_init(&m->scanner, rs, ws); - return res; -} - void mvc_destroy(mvc *m) { diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h --- a/sql/server/sql_mvc.h +++ b/sql/server/sql_mvc.h @@ -168,7 +168,6 @@ extern void mvc_exit(sql_store store); extern void mvc_logmanager(sql_store store); extern mvc *mvc_create(sql_store *store, sql_allocator *pa, int clientid, int debug, bstream *rs, stream *ws); -extern int mvc_reset(mvc *m, bstream *rs, stream *ws, int debug); extern void mvc_destroy(mvc *c); extern int mvc_status(mvc *c); diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c --- a/sql/storage/bat/bat_logger.c +++ b/sql/storage/bat/bat_logger.c @@ -129,6 +129,14 @@ replace_bat(old_logger *old_lg, logger * } #endif +static BAT * +log_temp_descriptor(log_bid b) +{ _______________________________________________ checkin-list mailing list -- [email protected] To unsubscribe send an email to [email protected]
