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

Combine two functions into one, and provide alternative in case of failure.


diffs (180 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -102,63 +102,32 @@ static int bm_commit(logger *lg);
 static int tr_grow(trans *tr);
 
 static BUN
-log_find_int(BAT *b, BAT *d, int val)
+log_find(BAT *b, BAT *d, int val)
 {
-#if 0
-       BUN p, q;
-       int *t = (int *) Tloc(b, BUNfirst(b));
-
-       for (p = 0, q = BATcount(b); p < q; p++) {
-               oid pos = p + BUNfirst(b);
-
-               if (t[p] == val && BUNfnd(d, &pos) == BUN_NONE)
-                       return pos;
-       }
-       return BUN_NONE;
-#else
        BATiter cni = bat_iterator(b);
        BUN p;
 
-       if (b->T->hash || BAThash(b, 0) == GDK_SUCCEED) {
-               HASHloop_int(cni, cni.b->T->hash, p, &val) {
-                       oid pos = p;
-                       if (BUNfnd(d, &pos) == BUN_NONE)
-                               return p;
-//MK So, if the BAThash construction fails, the BAT b still could have 
information
-//?? protect against failing BAThash() with non-empty b required
-               }
-       } 
-       return BUN_NONE;
-#endif
-}
-
-static BUN
-log_find_bid(BAT *b, BAT *d, log_bid val)
-{
-#if 0
-       BUN p, q;
-       log_bid *t = (log_bid *) Tloc(b, BUNfirst(b));
-
-       for (p = 0, q = BATcount(b); p < q; p++) {
-               oid pos = p + BUNfirst(b);
-
-               if (t[p] == val && BUNfnd(d, &pos) == BUN_NONE)
-                       return pos;
-       }
-       return BUN_NONE;
-#else
-       BATiter cni = bat_iterator(b);
-       BUN p;
-
+       assert(b->ttype == TYPE_int);
+       assert(d->ttype == TYPE_oid);
        if (b->T->hash || BAThash(b, 0) == GDK_SUCCEED) {
                HASHloop_int(cni, cni.b->T->hash, p, &val) {
                        oid pos = p;
                        if (BUNfnd(d, &pos) == BUN_NONE)
                                return p;
                }
-       } 
+       } else {                /* unlikely: BAThash failed */
+               BUN q;
+               int *t = (int *) Tloc(b, 0);
+
+               for (p = BUNfirst(b), q = BUNlast(b); p < q; p++) {
+                       if (t[p] == val) {
+                               oid pos = p;
+                               if (BUNfnd(d, &pos) == BUN_NONE)
+                                       return p;
+                       }
+               }
+       }
        return BUN_NONE;
-#endif
 }
 
 static void
@@ -264,7 +233,7 @@ static int
 avoid_snapshot( logger *lg, log_bid bid ) 
 {
        if (BATcount(lg->snapshots_bid)-BATcount(lg->dsnapshots)) {
-               BUN p = log_find_bid(lg->snapshots_bid, lg->dsnapshots, bid);
+               BUN p = log_find(lg->snapshots_bid, lg->dsnapshots, bid);
 
                if (p != BUN_NONE) {
                        int tid = *(int *) Tloc(lg->snapshots_tid, p);
@@ -312,7 +281,7 @@ log_read_seq(logger *lg, logformat *l)
                return LOG_ERR;
        }
 
-       if ((p = log_find_int(lg->seqs_id, lg->dseqs, seq)) != BUN_NONE &&
+       if ((p = log_find(lg->seqs_id, lg->dseqs, seq)) != BUN_NONE &&
            p >= lg->seqs_id->batInserted) {
                BUNinplace(lg->seqs_val, p, NULL, &val, FALSE);
        } else {
@@ -578,7 +547,7 @@ la_bat_destroy(logger *lg, logaction *la
 
                logger_del_bat(lg, bid);
 
-               if ((p = log_find_bid(lg->snapshots_bid, lg->dsnapshots, bid)) 
!= BUN_NONE) {
+               if ((p = log_find(lg->snapshots_bid, lg->dsnapshots, bid)) != 
BUN_NONE) {
 #ifndef NDEBUG
                        assert(BBP_desc(bid)->S.role == PERSISTENT);
                        assert(0 <= BBP_desc(bid)->H.heap.farmid && 
BBP_desc(bid)->H.heap.farmid < MAXFARMS);
@@ -703,7 +672,7 @@ la_bat_use(logger *lg, logaction *la)
                assert(BBPfarms[b->T->vheap->farmid].roles & (1 << PERSISTENT));
        }
 #endif
-       if ((p = log_find_bid(lg->snapshots_bid, lg->dsnapshots, 
b->batCacheid)) != BUN_NONE &&
+       if ((p = log_find(lg->snapshots_bid, lg->dsnapshots, b->batCacheid)) != 
BUN_NONE &&
            p >= lg->snapshots_bid->batInserted) {
                BUNinplace(lg->snapshots_tid, p, NULL, &lg->tid, FALSE);
        } else {
@@ -1053,7 +1022,7 @@ logger_commit(logger *lg)
        if (lg->debug & 1)
                fprintf(stderr, "#logger_commit\n");
 
-       p = log_find_int(lg->seqs_id, lg->dseqs, id);
+       p = log_find(lg->seqs_id, lg->dseqs, id);
        if (p >= lg->seqs_val->batInserted) {
                BUNinplace(lg->seqs_val, p, NULL, &lg->id, FALSE);
        } else {
@@ -1894,7 +1863,7 @@ logger_changes(logger *lg)
 int
 logger_sequence(logger *lg, int seq, lng *id)
 {
-       BUN p = log_find_int(lg->seqs_id, lg->dseqs, seq);
+       BUN p = log_find(lg->seqs_id, lg->dseqs, seq);
 
        if (p != BUN_NONE) {
                *id = *(lng *) Tloc(lg->seqs_val, p);
@@ -1959,7 +1928,7 @@ 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 &&
+               if ((p = log_find(lg->snapshots_bid, lg->dsnapshots, 
b->batCacheid)) != BUN_NONE &&
                    p >= lg->snapshots_tid->batInserted) {
                        BUNinplace(lg->snapshots_tid, p, NULL, &lg->tid, FALSE);
                } else {
@@ -2009,7 +1978,7 @@ log_bat_transient(logger *lg, const char
        lg->changes++;
 
        /* if this is a snapshot bat, we need to skip all changes */
-       if ((p = log_find_bid(lg->snapshots_bid, lg->dsnapshots, bid)) != 
BUN_NONE) {
+       if ((p = log_find(lg->snapshots_bid, lg->dsnapshots, bid)) != BUN_NONE) 
{
        //      int tid = *(int*)Tloc(lg->snapshots_tid, p);
 #ifndef NDEBUG
                assert(BBP_desc(bid)->S.role == PERSISTENT);
@@ -2361,7 +2330,7 @@ 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 &&
+       if ((p = log_find(lg->seqs_id, lg->dseqs, seq)) != BUN_NONE &&
            p >= lg->seqs_id->batInserted) {
                BUNinplace(lg->seqs_val, p, NULL, &val, FALSE);
        } else {
@@ -2469,14 +2438,14 @@ void
 logger_del_bat(logger *lg, log_bid bid)
 {
        BAT *b = BATdescriptor(bid);
-       BUN p = log_find_bid(lg->catalog_bid, lg->dcatalog, bid), q;
+       BUN p = log_find(lg->catalog_bid, lg->dcatalog, bid), q;
 
        assert(p != BUN_NONE);
 
        /* if this is a not logger commited snapshot bat, make it
         * transient */
        if (p >= lg->catalog_bid->batInserted &&
-           (q = log_find_bid(lg->snapshots_bid, lg->dsnapshots, bid)) != 
BUN_NONE) {
+           (q = log_find(lg->snapshots_bid, lg->dsnapshots, bid)) != BUN_NONE) 
{
                
                BUNappend(lg->dsnapshots, &q, FALSE);
                if (lg->debug & 1)
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to