Changeset: 5e05b188633e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5e05b188633e
Modified Files:
        gdk/gdk_logger.c
        gdk/gdk_logger_internals.h
Branch: unlock
Log Message:

add new catalog_cnt on logger startup


diffs (105 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1537,6 +1537,26 @@ logger_switch_bat(BAT *old, BAT *new, co
 }
 
 static gdk_return
+bm_get_counts(logger *lg)
+{
+       BUN p, q;
+       const log_bid *bids = (const log_bid *) Tloc(lg->catalog_bid, 0);
+
+       BATloop(lg->catalog_bid, p, q) {
+               oid pos = p;
+               lng cnt = 0;
+
+               if (BUNfnd(lg->dcatalog, &pos) != BUN_NONE) {
+                       BAT *b = BBPquickdesc(bids[p], 1);
+                       cnt = BATcount(b);
+               }
+               if (BUNappend(lg->catalog_cnt, &cnt, false) != GDK_SUCCEED)
+                       return GDK_FAIL;
+       }
+       return GDK_SUCCEED;
+}
+
+static gdk_return
 bm_subcommit(logger *lg, BAT *list_bid, BAT *list_nme, BAT *catalog_bid, BAT 
*catalog_nme, BAT *catalog_tpe, BAT *catalog_oid, BAT *dcatalog, BAT *extra, 
int debug)
 {
        BUN p, q;
@@ -1997,6 +2017,16 @@ logger_load(int debug, const char *fn, c
                                goto error;
                }
        }
+       lg->catalog_cnt = logbat_new(TYPE_lng, 1, TRANSIENT);
+       if (lg->catalog_cnt == NULL) {
+               GDKerror("Logger_new: failed to create catalog_cnt bat");
+               goto error;
+       }
+       strconcat_len(bak, sizeof(bak), fn, "_catalog_cnt", NULL);
+       if (BBPrename(lg->catalog_cnt->batCacheid, bak) < 0) {
+               goto error;
+       }
+
        lg->freed = logbat_new(TYPE_int, 1, TRANSIENT);
        if (lg->freed == NULL) {
                GDKerror("Logger_new: failed to create freed bat");
@@ -2006,6 +2036,7 @@ logger_load(int debug, const char *fn, c
        if (BBPrename(lg->freed->batCacheid, bak) < 0) {
                goto error;
        }
+
        snapshots_bid = logger_find_bat(lg, "snapshots_bid", 0, 0);
        if (snapshots_bid == 0) {
                lg->snapshots_bid = logbat_new(TYPE_int, 1, PERSISTENT);
@@ -2130,8 +2161,7 @@ logger_load(int debug, const char *fn, c
                /* done reading the log, revert to "normal" behavior */
                geomisoldversion = false;
        }
-
-       return GDK_SUCCEED;
+       return bm_get_counts(lg);
   error:
        if (fp)
                fclose(fp);
@@ -2445,7 +2475,7 @@ logger_flush(logger *lg)
                        GDKfree(filename);
                        return GDK_FAIL;
                }
-               printf("log file %s\n", filename);
+               //printf("log file %s\n", filename);
 
                bool filemissing = false;
                if (logger_open_input(lg, filename, &filemissing) == GDK_FAIL) {
@@ -2569,6 +2599,9 @@ log_bat_persists(logger *lg, BAT *b, con
        int flag = b->batTransient ? LOG_CREATE : LOG_USE;
        BUN p;
 
+       if (logger_add_bat(lg, b, name, tpe, id) != GDK_SUCCEED)
+               return GDK_FAIL;
+
        l.nr = 0;
        if (flag == LOG_USE) {
 #ifndef NDEBUG
@@ -2690,7 +2723,8 @@ log_bat_transient(logger *lg, const char
 
        if (lg->debug & 1)
                fprintf(stderr, "#Logged destroyed bat %s\n", NAME(name, tpe, 
id));
-       return GDK_SUCCEED;
+
+       return logger_del_bat(lg, bid);
 }
 
 gdk_return
diff --git a/gdk/gdk_logger_internals.h b/gdk/gdk_logger_internals.h
--- a/gdk/gdk_logger_internals.h
+++ b/gdk/gdk_logger_internals.h
@@ -35,6 +35,7 @@ struct logger {
        BAT *catalog_nme;       /* str name column */
        BAT *catalog_tpe;       /* type of column */
        BAT *catalog_oid;       /* object identifier of column (the pair 
type,oid is unique) */
+       BAT *catalog_cnt;       /* count of ondisk buns (this bat isn't 
persistent, ie recreated on startup) */
        BAT *dcatalog;          /* deleted from catalog table */
        BAT *seqs_id;           /* int id column */
        BAT *seqs_val;          /* lng value column */
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to