Changeset: 0fa6c30aa061 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0fa6c30aa061
Modified Files:
        gdk/gdk_logger.c
Branch: default
Log Message:

Fixes to changeset c8369de328be (made log headless).
- Use the correct type when calling BUNfnd;
- Don't use BUNinplace if the BUN being changed was committed: it is
  then not "headless" anymore;
- Don't call BUNinplace with incorrect "head" value, but rather use
  NULL to indicate that the value isn't used.


diffs (134 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -108,7 +108,7 @@ log_find_int(BAT *b, BAT *d, int val)
        int *t = (int *) Tloc(b, BUNfirst(b));
 
        for (p = 0, q = BATcount(b); p < q; p++) {
-               BUN pos = p + BUNfirst(b);
+               oid pos = p + BUNfirst(b);
 
                if (t[p] == val && BUNfnd(d, &pos) == BUN_NONE)
                        return pos;
@@ -123,7 +123,7 @@ log_find_bid(BAT *b, BAT *d, log_bid val
        log_bid *t = (log_bid *) Tloc(b, BUNfirst(b));
 
        for (p = 0, q = BATcount(b); p < q; p++) {
-               BUN pos = p + BUNfirst(b);
+               oid pos = p + BUNfirst(b);
 
                if (t[p] == val && BUNfnd(d, &pos) == BUN_NONE)
                        return pos;
@@ -282,9 +282,14 @@ log_read_seq(logger *lg, logformat *l)
                return LOG_ERR;
        }
 
-       if ((p = log_find_int(lg->seqs_id, lg->dseqs, seq)) != BUN_NONE) {
-               BUNinplace(lg->seqs_val, p, &seq, &val, FALSE);
+       if ((p = log_find_int(lg->seqs_id, lg->dseqs, seq)) != BUN_NONE &&
+           p >= lg->seqs_id->batInserted) {
+               BUNinplace(lg->seqs_val, p, NULL, &val, FALSE);
        } else {
+               if (p != BUN_NONE) {
+                       oid pos = p;
+                       BUNappend(lg->dseqs, &pos, FALSE);
+               }
                BUNappend(lg->seqs_id, &seq, FALSE);
                BUNappend(lg->seqs_val, &val, FALSE);
        }
@@ -648,8 +653,6 @@ la_bat_use(logger *lg, logaction *la)
                return;
        }
        logger_add_bat(lg, b, la->name);
-       if ((p = log_find_bid(lg->snapshots_bid, lg->dsnapshots, 
b->batCacheid)) != BUN_NONE) 
-               BUNinplace(lg->snapshots_tid, p, &b->batCacheid, &lg->tid, 
FALSE);
 #ifndef NDEBUG
        assert(b->batRole == PERSISTENT);
        assert(0 <= b->H->heap.farmid && b->H->heap.farmid < MAXFARMS);
@@ -665,8 +668,16 @@ la_bat_use(logger *lg, logaction *la)
                assert(BBPfarms[b->T->vheap->farmid].roles & (1 << PERSISTENT));
        }
 #endif
-       /* move to the dirty new part of the snapshots list, new snapshots will 
get flushed to disk */
-       if (p == BUN_NONE) {
+       if ((p = log_find_bid(lg->snapshots_bid, lg->dsnapshots, 
b->batCacheid)) != BUN_NONE &&
+           p >= lg->snapshots_bid->batInserted) {
+               BUNinplace(lg->snapshots_tid, p, NULL, &lg->tid, FALSE);
+       } else {
+               if (p != BUN_NONE) {
+                       oid pos = p;
+                       BUNappend(lg->dsnapshots, &pos, FALSE);
+               }
+               /* move to the dirty new part of the snapshots list,
+                * new snapshots will get flushed to disk */
                BUNappend(lg->snapshots_bid, &b->batCacheid, FALSE);
                BUNappend(lg->snapshots_tid, &lg->tid, FALSE);
        }
@@ -1004,7 +1015,14 @@ logger_commit(logger *lg)
                fprintf(stderr, "#logger_commit\n");
 
        p = log_find_int(lg->seqs_id, lg->dseqs, id);
-       BUNinplace(lg->seqs_val, p, &id, &lg->id, FALSE);
+       if (p >= lg->seqs_val->batInserted) {
+               BUNinplace(lg->seqs_val, p, NULL, &lg->id, FALSE);
+       } else {
+               oid pos = p;
+               BUNappend(lg->dseqs, &pos, FALSE);
+               BUNappend(lg->seqs_id, &id, FALSE);
+               BUNappend(lg->seqs_val, &lg->id, FALSE);
+       }
 
        /* cleanup old snapshots */
        if (BATcount(lg->snapshots_bid)) {
@@ -1757,9 +1775,14 @@ log_bat_persists(logger *lg, BAT *b, con
                assert(b->T->heap.farmid == 0);
                assert(b->T->vheap == NULL ||
                       BBPfarms[b->T->vheap->farmid].roles & (1 << PERSISTENT));
-               if ((p = log_find_bid(lg->snapshots_bid, lg->dsnapshots, 
b->batCacheid)) != BUN_NONE){
-                       BUNinplace(lg->snapshots_tid, p, &b->batCacheid, 
&lg->tid, FALSE);
+               if ((p = log_find_bid(lg->snapshots_bid, lg->dsnapshots, 
b->batCacheid)) != BUN_NONE &&
+                   p >= lg->snapshots_tid->batInserted) {
+                       BUNinplace(lg->snapshots_tid, p, NULL, &lg->tid, FALSE);
                } else {
+                       if (p != BUN_NONE) {
+                               oid pos = p;
+                               BUNappend(lg->dsnapshots, &pos, FALSE);
+                       }
                        BUNappend(lg->snapshots_bid, &b->batCacheid, FALSE);
                        BUNappend(lg->snapshots_tid, &lg->tid, FALSE);
                }
@@ -1819,8 +1842,15 @@ log_bat_transient(logger *lg, const char
                        assert(BBPfarms[BBP_desc(bid)->T.vheap->farmid].roles & 
(1 << PERSISTENT));
                }
 #endif
-       //      if (lg->tid == tid) 
-                       BUNinplace(lg->snapshots_tid, p, &bid, &lg->tid, FALSE);
+       //      if (lg->tid == tid)
+               if (p >= lg->snapshots_tid->batInserted) {
+                       BUNinplace(lg->snapshots_tid, p, NULL, &lg->tid, FALSE);
+               } else {
+                       oid pos = p;
+                       BUNappend(lg->dsnapshots, &pos, FALSE);
+                       BUNappend(lg->snapshots_tid, &lg->tid, FALSE);
+                       BUNappend(lg->snapshots_bid, &bid, FALSE);
+               }
        //      else
        //              printf("%d != %d\n", lg->tid, tid);
        //      assert(lg->tid == tid);
@@ -2175,9 +2205,14 @@ log_sequence(logger *lg, int seq, lng va
        if (lg->debug & 1)
                fprintf(stderr, "#log_sequence (%d," LLFMT ")\n", seq, val);
 
-       if ((p = log_find_int(lg->seqs_id, lg->dseqs, seq)) != BUN_NONE) {
-               BUNinplace(lg->seqs_val, p, &seq, &val, FALSE);
+       if ((p = log_find_int(lg->seqs_id, lg->dseqs, seq)) != BUN_NONE &&
+           p >= lg->seqs_id->batInserted) {
+               BUNinplace(lg->seqs_val, p, NULL, &val, FALSE);
        } else {
+               if (p != BUN_NONE) {
+                       oid pos = p;
+                       BUNappend(lg->dseqs, &pos, FALSE);
+               }
                BUNappend(lg->seqs_id, &seq, FALSE);
                BUNappend(lg->seqs_val, &val, FALSE);
        }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to