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]

Reply via email to