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