Changeset: 44761c87698a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/44761c87698a
Modified Files:
        gdk/gdk_logger.c
Branch: Jul2021
Log Message:

make sure we (sub)commit the bats when using sql_debug=128


diffs (214 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -777,7 +777,6 @@ la_apply(logger *lg, logaction *c)
        case LOG_CREATE:
                if (!lg->flushing)
                        ret = la_bat_create(lg, c);
-               lg->cnt++;
                break;
        case LOG_DESTROY:
                if (!lg->flushing)
@@ -934,38 +933,44 @@ logger_create_types_file(logger *lg, con
 static gdk_return
 logger_open_output(logger *lg)
 {
-       char id[32];
-       char *filename;
+       logged_range *new_range = 
(logged_range*)GDKmalloc(sizeof(logged_range));
 
-       if (LOG_DISABLED(lg)) {
-               lg->end = 0;
-               if (lg->id) /* go back to last used id */
-                       lg->id--;
-               return GDK_SUCCEED;
-       }
-       if (snprintf(id, sizeof(id), LLFMT, lg->id) >= (int) sizeof(id)) {
-               TRC_CRITICAL(GDK, "filename is too large\n");
-               return GDK_FAIL;
-       }
-       if (!(filename = GDKfilepath(BBPselectfarm(PERSISTENT, 0, offheap), 
lg->dir, LOGFILE, id))) {
+       if (!new_range) {
                TRC_CRITICAL(GDK, "allocation failure\n");
                return GDK_FAIL;
        }
 
-       lg->output_log = open_wstream(filename);
-       if (lg->output_log) {
-               short byteorder = 1234;
-               mnstr_write(lg->output_log, &byteorder, sizeof(byteorder), 1);
-       }
-       lg->end = 0;
+       if (LOG_DISABLED(lg)) {
+               lg->end = 0;
+       } else {
+               char id[32];
+               char *filename;
 
-       logged_range *new_range = 
(logged_range*)GDKmalloc(sizeof(logged_range));
+               if (snprintf(id, sizeof(id), LLFMT, lg->id) >= (int) 
sizeof(id)) {
+                       TRC_CRITICAL(GDK, "filename is too large\n");
+                       GDKfree(new_range);
+                       return GDK_FAIL;
+               }
+               if (!(filename = GDKfilepath(BBPselectfarm(PERSISTENT, 0, 
offheap), lg->dir, LOGFILE, id))) {
+                       TRC_CRITICAL(GDK, "allocation failure\n");
+                       GDKfree(new_range);
+                       return GDK_FAIL;
+               }
 
-       if (lg->output_log == NULL || mnstr_errnr(lg->output_log) || 
!new_range) {
-               TRC_CRITICAL(GDK, "creating %s failed: %s\n", filename, 
mnstr_peek_error(NULL));
-               GDKfree(new_range);
+               lg->output_log = open_wstream(filename);
+               if (lg->output_log) {
+                       short byteorder = 1234;
+                       mnstr_write(lg->output_log, &byteorder, 
sizeof(byteorder), 1);
+               }
+               lg->end = 0;
+
+               if (lg->output_log == NULL || mnstr_errnr(lg->output_log)) {
+                       TRC_CRITICAL(GDK, "creating %s failed: %s\n", filename, 
mnstr_peek_error(NULL));
+                       GDKfree(new_range);
+                       GDKfree(filename);
+                       return GDK_FAIL;
+               }
                GDKfree(filename);
-               return GDK_FAIL;
        }
        new_range->id = lg->id;
        new_range->first_tid = lg->tid;
@@ -977,7 +982,6 @@ logger_open_output(logger *lg)
        lg->current = new_range;
        if (!lg->pending)
                lg->pending = new_range;
-       GDKfree(filename);
        return GDK_SUCCEED;
 }
 
@@ -1403,7 +1407,6 @@ bm_subcommit(logger *lg)
                n[i++] = col;
        }
        /* now commit catalog, so it's also up to date on disk */
-       assert(!LOG_DISABLED(lg) || BATcount(catalog_bid) == lg->cnt);
        sizes[i] = lg->cnt;
        n[i++] = catalog_bid->batCacheid;
        sizes[i] = lg->cnt;
@@ -2100,14 +2103,6 @@ logger_cleanup_range(logger *lg)
 gdk_return
 logger_activate(logger *lg)
 {
-       if (LOG_DISABLED(lg)) {
-               if (lg->saved_id+1 == lg->id) {
-                       lg->saved_id++;
-                       lg->saved_tid = lg->tid;
-                       logger_cleanup_range(lg);
-               }
-               return GDK_SUCCEED;
-       }
        if (lg->end > 0 && lg->saved_id+1 == lg->id) {
                lg->id++;
                logger_close_output(lg);
@@ -2127,6 +2122,9 @@ logger_flush(logger *lg, ulng ts)
                lg->saved_tid = lg->tid;
                if (lid)
                        logger_cleanup_range(lg);
+               if (logger_commit(lg) != GDK_SUCCEED) {
+                       TRC_ERROR(GDK, "failed to commit");
+               }
                return GDK_SUCCEED;
        }
        if (lg->saved_id >= lid)
@@ -2285,6 +2283,8 @@ internal_log_bat(logger *lg, BAT *b, log
 
        if (LOG_DISABLED(lg) || !nr) {
                /* logging is switched off */
+               if (LOG_DISABLED(lg))
+                       lg->end += nr;
                if (nr)
                        return la_bat_update_count(lg, id, offset+cnt);
                return GDK_SUCCEED;
@@ -2371,7 +2371,7 @@ log_bat_persists(logger *lg, BAT *b, log
                        return GDK_FAIL;
                }
        } else {
-               lg->cnt++;
+               lg->end++;
        }
        if (lg->debug & 1)
                fprintf(stderr, "#persists id (%d) bat (%d)\n", id, 
b->batCacheid);
@@ -2397,7 +2397,7 @@ log_bat_transient(logger *lg, log_id id)
                        return GDK_FAIL;
                }
        } else {
-               lg->cnt--;
+               lg->end++;
        }
        if (lg->debug & 1)
                fprintf(stderr, "#Logged destroyed bat (%d) %d\n", id,
@@ -2440,6 +2440,7 @@ log_delta(logger *lg, BAT *uid, BAT *uva
        assert(nr);
 
        if (LOG_DISABLED(lg)) {
+               lg->end += nr;
                /* logging is switched off */
                logger_unlock(lg);
                return GDK_SUCCEED;
@@ -2489,9 +2490,10 @@ log_bat_clear(logger *lg, int id)
 {
        logformat l;
 
-       if (LOG_DISABLED(lg))
+       if (LOG_DISABLED(lg)) {
+               lg->end++;
                return la_bat_update_count(lg, id, 0);
-       //      return GDK_SUCCEED;
+       }
 
        l.flag = LOG_CLEAR;
        l.id = id;
@@ -2551,8 +2553,10 @@ log_tend(logger *lg)
                return logger_commit(lg);
        }
 
-       if (LOG_DISABLED(lg))
+       if (LOG_DISABLED(lg)) {
+               lg->end++;
                return GDK_SUCCEED;
+       }
 
        if (res != GDK_SUCCEED ||
            log_write_format(lg, &l) != GDK_SUCCEED ||
@@ -2684,6 +2688,7 @@ logger_add_bat(logger *lg, BAT *b, log_i
            BUNappend(lg->catalog_cnt, &cnt, false) != GDK_SUCCEED ||
            BUNappend(lg->catalog_lid, &lid, false) != GDK_SUCCEED)
                return GDK_FAIL;
+       lg->cnt++;
        BBPretain(bid);
        return GDK_SUCCEED;
 }
@@ -2705,7 +2710,11 @@ logger_del_bat(logger *lg, log_bid bid)
        assert(lg->catalog_lid->hseqbase == 0);
        if (BUNreplace(lg->catalog_lid, p, &lid, false) != GDK_SUCCEED)
                return GDK_FAIL;
-       return BUNappend(lg->dcatalog, &pos, false);
+       if (BUNappend(lg->dcatalog, &pos, false) == GDK_SUCCEED) {
+               lg->cnt--;
+               return GDK_SUCCEED;
+       }
+       return GDK_FAIL;
 }
 
 log_bid
@@ -2738,8 +2747,10 @@ log_tstart(logger *lg, ulng commit_ts, b
                lg->current->last_ts = commit_ts;
        }
 
-       if (LOG_DISABLED(lg))
+       if (LOG_DISABLED(lg)) {
+               lg->end++;
                return GDK_SUCCEED;
+       }
 
        l.flag = LOG_START;
        l.id = ++lg->tid;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to