Changeset: e2fbfa61ce3f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e2fbfa61ce3f
Modified Files:
        gdk/gdk_logger.c
        sql/test/leaks/Tests/check0_bam.stable.out.int128
        sql/test/leaks/Tests/check1_bam.stable.out
        sql/test/leaks/Tests/check1_bam.stable.out.int128
        sql/test/leaks/Tests/check2_bam.stable.out
        sql/test/leaks/Tests/check2_bam.stable.out.int128
        sql/test/leaks/Tests/check3_bam.stable.out
        sql/test/leaks/Tests/check3_bam.stable.out.int128
        sql/test/leaks/Tests/check4_bam.stable.out
        sql/test/leaks/Tests/check4_bam.stable.out.int128
        sql/test/leaks/Tests/check5_bam.stable.out
        sql/test/leaks/Tests/check5_bam.stable.out.int128
        sql/test/leaks/Tests/drop3_bam.stable.out.int128
        sql/test/leaks/Tests/temp1_bam.stable.out.int128
        sql/test/leaks/Tests/temp2_bam.stable.out.int128
        sql/test/leaks/Tests/temp3_bam.stable.out.int128
Branch: default
Log Message:

store the sequence numbers only in the log, ie don't keep persistent
bats for this.


diffs (truncated from 702 to 300 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -797,6 +797,8 @@ tr_abort(logger *lg, trans *tr)
        return tr_destroy(tr);
 }
 
+static int log_sequence_nrs(logger *lg);
+
 static int
 logger_open(logger *lg)
 {
@@ -806,11 +808,11 @@ logger_open(logger *lg)
 
        lg->log = open_wstream(filename);
        lg->end = 0;
-       if (lg->log == NULL || mnstr_errnr(lg->log)) {
+
+       if (lg->log == NULL || mnstr_errnr(lg->log) || log_sequence_nrs(lg) != 
LOG_OK) { 
                fprintf(stderr, "!ERROR: logger_open: creating %s failed\n", 
filename);
                return LOG_ERR;
        }
-
        return LOG_OK;
 }
 
@@ -1120,7 +1122,7 @@ logger_new(int debug, const char *fn, co
        FILE *fp;
        char filename[BUFSIZ];
        char bak[BUFSIZ];
-       log_bid seqs_id = 0;
+       log_bid snapshots_bid = 0;
        bat catalog_bid, catalog_nme, bid;
 
        /* if the path is absolute, it means someone is still calling
@@ -1294,22 +1296,12 @@ logger_new(int debug, const char *fn, co
                        BBPincref(bid, TRUE);
                }
        }
-       seqs_id = logger_find_bat(lg, "seqs_id");
-       if (seqs_id == 0) {
-               lg->seqs_id = logbat_new(TYPE_int, 1, PERSISTENT);
-               snprintf(bak, BUFSIZ, "%s_seqs_id", fn);
-               if (BBPrename(lg->seqs_id->batCacheid, bak) < 0)
-                       logger_fatal("Logger_new: BBPrename to %s failed",
-                                    bak, 0, 0);
-               logger_add_bat(lg, lg->seqs_id, "seqs_id");
+       snapshots_bid = logger_find_bat(lg, "snapshots_bid");
+       if (snapshots_bid == 0) {
+               lg->seqs_id = BATnew(TYPE_void, TYPE_int, 1, TRANSIENT);
+               lg->seqs_val = BATnew(TYPE_void, TYPE_lng, 1, TRANSIENT);
 
-               lg->seqs_val = logbat_new(TYPE_lng, 1, PERSISTENT);
-               snprintf(bak, BUFSIZ, "%s_seqs_val", fn);
-               if (BBPrename(lg->seqs_val->batCacheid, bak) < 0)
-                       logger_fatal("Logger_new: BBPrename to %s failed",
-                                    bak, 0, 0);
-               logger_add_bat(lg, lg->seqs_val, "seqs_val");
-
+               /* create LOG_SID sequence number */
                if (BUNappend(lg->seqs_id, &id, FALSE) == GDK_FAIL ||
                    BUNappend(lg->seqs_val, &lg->id, FALSE) == GDK_FAIL)
                        logger_fatal("Logger_new: failed to append value to "
@@ -1332,25 +1324,23 @@ logger_new(int debug, const char *fn, co
                if (bm_subcommit(lg->catalog_bid, lg->catalog_nme, 
lg->catalog_bid, lg->catalog_nme, NULL, lg->debug) < 0)
                        logger_fatal("Logger_new: commit failed", 0, 0, 0);
        } else {
+               bat seqs_id = logger_find_bat(lg, "seqs_id");
                bat seqs_val = logger_find_bat(lg, "seqs_val");
-               bat snapshots_bid = logger_find_bat(lg, "snapshots_bid");
                bat snapshots_tid = logger_find_bat(lg, "snapshots_tid");
 
-               lg->seqs_id = BATdescriptor(seqs_id);
-               if (lg->seqs_id == 0)
-                       logger_fatal("Logger_new: inconsistent database, 
seqs_id does not exist", 0, 0, 0);
-               lg->seqs_val = BATdescriptor(seqs_val);
-               if (lg->seqs_val == 0)
-                       logger_fatal("Logger_new: inconsistent database, 
seqs_val does not exist", 0, 0, 0);
-               if (BATcount(lg->seqs_id)) {
-                       BUN p = logbat_find_int(lg->seqs_id, id);
-                       lg->id = *(lng *) Tloc(lg->seqs_val, p);
+               if (seqs_id) {
+                       BAT *o_id = BATdescriptor(seqs_id);
+                       BAT *o_val = BATdescriptor(seqs_val);
+
+                       lg->seqs_id = BATcopy(o_id, TYPE_void, TYPE_int, 1, 
TRANSIENT);
+                       lg->seqs_val = BATcopy(o_val, TYPE_void, TYPE_lng, 1, 
TRANSIENT);
+                       BBPunfix(o_id->batCacheid);
+                       BBPunfix(o_val->batCacheid);
                } else {
-                       if (BUNappend(lg->seqs_id, &id, FALSE) == GDK_FAIL ||
-                           BUNappend(lg->seqs_val, &lg->id, FALSE) == GDK_FAIL)
-                               logger_fatal("Logger_new: failed to append "
-                                            "value to sequences bat", 0, 0, 0);
+                       lg->seqs_id = BATnew(TYPE_void, TYPE_int, 1, TRANSIENT);
+                       lg->seqs_val = BATnew(TYPE_void, TYPE_lng, 1, 
TRANSIENT);
                }
+
                lg->snapshots_bid = BATdescriptor(snapshots_bid);
                if (lg->snapshots_bid == 0)
                        logger_fatal("Logger_new: inconsistent database, 
snapshots_bid does not exist", 0, 0, 0);
@@ -2074,17 +2064,52 @@ log_abort(logger *lg)
        return LOG_OK;
 }
 
+static int
+log_sequence_(logger *lg, int seq, lng val)
+{
+       logformat l;
+
+       l.flag = LOG_SEQ;
+       l.tid = lg->tid;
+       l.nr = seq;
+
+       if (lg->debug & 1)
+               fprintf(stderr, "#log_sequence_ (%d," LLFMT ")\n", seq, val);
+
+       if (log_write_format(lg, &l) == LOG_ERR ||
+           !mnstr_writeLng(lg->log, val) ||
+           mnstr_flush(lg->log) ||
+           mnstr_fsync(lg->log) ||
+           pre_allocate(lg) < 0) {
+               fprintf(stderr, "!ERROR: log_sequence_: write failed\n");
+               return LOG_ERR;
+       }
+       return LOG_OK;
+}
+
+static int
+log_sequence_nrs(logger *lg)
+{
+       BATiter sii = bat_iterator(lg->seqs_id);
+       BATiter svi = bat_iterator(lg->seqs_val);
+       BUN p, q;
+       int ok = LOG_OK;
+
+       BATloop(lg->seqs_id, p, q) {
+               const void *id = BUNtail(sii, p);
+               const void *val = BUNtail(svi, p);
+
+               ok &= log_sequence_(lg, *(int*)id, *(lng*)val);
+       }
+       return ok;
+}
+
 /* a transaction in it self */
 int
 log_sequence(logger *lg, int seq, lng val)
 {
-       logformat l;
        BUN p;
 
-       l.flag = LOG_SEQ;
-       l.tid = lg->tid;
-       l.nr = seq;
-
        if (lg->debug & 1)
                fprintf(stderr, "#log_sequence (%d," LLFMT ")\n", seq, val);
 
@@ -2094,17 +2119,7 @@ log_sequence(logger *lg, int seq, lng va
        }
        BUNappend(lg->seqs_id, &seq, FALSE);
        BUNappend(lg->seqs_val, &val, FALSE);
-
-       if (log_write_format(lg, &l) == LOG_ERR ||
-           !mnstr_writeLng(lg->log, val) ||
-           mnstr_flush(lg->log) ||
-           mnstr_fsync(lg->log) ||
-           pre_allocate(lg) < 0) {
-               fprintf(stderr, "!ERROR: log_sequence: write failed\n");
-               return LOG_ERR;
-       }
-
-       return LOG_OK;
+       return log_sequence_(lg, seq, val);
 }
 
 static int
diff --git a/sql/test/leaks/Tests/check0_bam.stable.out.int128 
b/sql/test/leaks/Tests/check0_bam.stable.out.int128
--- a/sql/test/leaks/Tests/check0_bam.stable.out.int128
+++ b/sql/test/leaks/Tests/check0_bam.stable.out.int128
@@ -66,26 +66,24 @@ Ready.
 [ "oid",       "int",  0       ]
 [ "oid",       "int",  1       ]
 [ "oid",       "int",  1       ]
-[ "oid",       "int",  2       ]
-[ "oid",       "int",  206     ]
+[ "oid",       "int",  204     ]
 [ "oid",       "lng",  1       ]
-[ "oid",       "lng",  2       ]
 [ "oid",       "str",  1       ]
 [ "oid",       "str",  1       ]
 [ "oid",       "str",  1       ]
-[ "oid",       "str",  206     ]
+[ "oid",       "str",  204     ]
 #select 'transient', count(*) from bbp() as bbp where kind like 'tran%';
 % .L1, .L2 # table_name
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 389     ]
+[ "transient", 391     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L1, .L2 # table_name
 % L1,  L2 # name
 % char,        wrd # type
 % 10,  2 # length
-[ "persistent",        12      ]
+[ "persistent",        10      ]
 
 # 16:21:16 >  
 # 16:21:16 >  "Done."
diff --git a/sql/test/leaks/Tests/check1_bam.stable.out 
b/sql/test/leaks/Tests/check1_bam.stable.out
--- a/sql/test/leaks/Tests/check1_bam.stable.out
+++ b/sql/test/leaks/Tests/check1_bam.stable.out
@@ -67,7 +67,6 @@ Ready.
 [ "oid",       "int",  1       ]
 [ "oid",       "int",  1       ]
 [ "oid",       "int",  1       ]
-[ "oid",       "int",  2       ]
 [ "oid",       "int",  3       ]
 [ "oid",       "int",  3       ]
 [ "oid",       "int",  4       ]
@@ -130,7 +129,6 @@ Ready.
 [ "oid",       "lng",  0       ]
 [ "oid",       "lng",  0       ]
 [ "oid",       "lng",  1       ]
-[ "oid",       "lng",  2       ]
 [ "oid",       "oid",  0       ]
 [ "oid",       "oid",  0       ]
 [ "oid",       "oid",  0       ]
diff --git a/sql/test/leaks/Tests/check1_bam.stable.out.int128 
b/sql/test/leaks/Tests/check1_bam.stable.out.int128
--- a/sql/test/leaks/Tests/check1_bam.stable.out.int128
+++ b/sql/test/leaks/Tests/check1_bam.stable.out.int128
@@ -67,7 +67,6 @@ Ready.
 [ "oid",       "int",  1       ]
 [ "oid",       "int",  1       ]
 [ "oid",       "int",  1       ]
-[ "oid",       "int",  2       ]
 [ "oid",       "int",  3       ]
 [ "oid",       "int",  3       ]
 [ "oid",       "int",  4       ]
@@ -96,7 +95,7 @@ Ready.
 [ "oid",       "int",  46      ]
 [ "oid",       "int",  46      ]
 [ "oid",       "int",  46      ]
-[ "oid",       "int",  206     ]
+[ "oid",       "int",  204     ]
 [ "oid",       "int",  229     ]
 [ "oid",       "int",  229     ]
 [ "oid",       "int",  329     ]
@@ -130,7 +129,6 @@ Ready.
 [ "oid",       "lng",  0       ]
 [ "oid",       "lng",  0       ]
 [ "oid",       "lng",  1       ]
-[ "oid",       "lng",  2       ]
 [ "oid",       "oid",  0       ]
 [ "oid",       "oid",  0       ]
 [ "oid",       "oid",  0       ]
@@ -231,7 +229,7 @@ Ready.
 [ "oid",       "str",  45      ]
 [ "oid",       "str",  46      ]
 [ "oid",       "str",  46      ]
-[ "oid",       "str",  206     ]
+[ "oid",       "str",  204     ]
 [ "oid",       "str",  329     ]
 [ "oid",       "str",  329     ]
 [ "oid",       "str",  329     ]
@@ -252,13 +250,13 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 188     ]
+[ "transient", 190     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L1, .L2 # table_name
 % L1,  L2 # name
 % char,        wrd # type
 % 10,  3 # length
-[ "persistent",        214     ]
+[ "persistent",        212     ]
 
 # 16:21:16 >  
 # 16:21:16 >  "Done."
diff --git a/sql/test/leaks/Tests/check2_bam.stable.out 
b/sql/test/leaks/Tests/check2_bam.stable.out
--- a/sql/test/leaks/Tests/check2_bam.stable.out
+++ b/sql/test/leaks/Tests/check2_bam.stable.out
@@ -67,7 +67,6 @@ Ready.
 [ "oid",       "int",  1       ]
 [ "oid",       "int",  1       ]
 [ "oid",       "int",  1       ]
-[ "oid",       "int",  2       ]
 [ "oid",       "int",  3       ]
 [ "oid",       "int",  3       ]
 [ "oid",       "int",  4       ]
@@ -130,7 +129,6 @@ Ready.
 [ "oid",       "lng",  0       ]
 [ "oid",       "lng",  0       ]
 [ "oid",       "lng",  1       ]
-[ "oid",       "lng",  2       ]
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to