Changeset: 04b8005b06a4 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=04b8005b06a4 Modified Files: gdk/gdk_logger.c monetdb5/mal/mal_authorize.c Branch: Jul2015 Log Message:
Replace oid-headed bats with void-headed bats. In old databases that were upgraded, these bats could still be oid-headed, but they don't need to be anymore. diffs (166 lines): diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -1466,6 +1466,13 @@ logger_new(int debug, const char *fn, co BBPincref(bid, TRUE); } } + lg->freed = logbat_new(TYPE_int, 1, TRANSIENT); + if (lg->freed == NULL) + logger_fatal("Logger_new: failed to create freed bat", 0, 0, 0); + snprintf(bak, sizeof(bak), "%s_freed", fn); + if (BBPrename(lg->freed->batCacheid, bak) < 0) + logger_fatal("Logger_new: BBPrename to %s failed", + bak, 0, 0); snapshots_bid = logger_find_bat(lg, "snapshots_bid"); if (snapshots_bid == 0) { lg->seqs_id = logbat_new(TYPE_int, 1, TRANSIENT); @@ -1517,10 +1524,18 @@ logger_new(int debug, const char *fn, co bat seqs_val = logger_find_bat(lg, "seqs_val"); bat snapshots_tid = logger_find_bat(lg, "snapshots_tid"); bat dsnapshots = logger_find_bat(lg, "dsnapshots"); + int needcommit = 0; + int dbg = GDKdebug; if (seqs_id) { - BAT *o_id = BATdescriptor(seqs_id); - BAT *o_val = BATdescriptor(seqs_val); + BAT *o_id; + BAT *o_val; + + /* don't check these bats since they will be fixed */ + GDKdebug &= ~CHECKMASK; + o_id = BATdescriptor(seqs_id); + o_val = BATdescriptor(seqs_val); + GDKdebug = dbg; if (o_id == NULL || o_val == NULL) logger_fatal("Logger_new: inconsistent database: cannot find seqs bats", 0, 0, 0); @@ -1542,12 +1557,41 @@ logger_new(int debug, const char *fn, co logger_fatal("Logger_new: cannot create seqs bats", 0, 0, 0); + GDKdebug &= ~CHECKMASK; 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); lg->snapshots_tid = BATdescriptor(snapshots_tid); if (lg->snapshots_tid == 0) logger_fatal("Logger_new: inconsistent database, snapshots_tid does not exist", 0, 0, 0); + GDKdebug = dbg; + if (lg->snapshots_bid->htype == TYPE_oid) { + BAT *b; + assert(lg->snapshots_tid->htype == TYPE_oid); + b = BATcopy(lg->snapshots_bid, TYPE_void, lg->snapshots_bid->ttype, 1, PERSISTENT); + BATseqbase(b, 0); + BATsetaccess(b, BAT_READ); + snprintf(bak, sizeof(bak), "tmp_%o", lg->snapshots_bid->batCacheid); + BBPrename(lg->snapshots_bid->batCacheid, bak); + BATmode(lg->snapshots_bid, TRANSIENT); + snprintf(bak, sizeof(bak), "%s_snapshots_bid", fn); + BBPrename(b->batCacheid, bak); + logbat_destroy(lg->snapshots_bid); + lg->snapshots_bid = b; + logger_add_bat(lg, b, "snapshots_bid"); + b = BATcopy(lg->snapshots_tid, TYPE_void, lg->snapshots_tid->ttype, 1, PERSISTENT); + BATseqbase(b, 0); + BATsetaccess(b, BAT_READ); + snprintf(bak, sizeof(bak), "tmp_%o", lg->snapshots_tid->batCacheid); + BBPrename(lg->snapshots_tid->batCacheid, bak); + BATmode(lg->snapshots_tid, TRANSIENT); + snprintf(bak, sizeof(bak), "%s_snapshots_tid", fn); + BBPrename(b->batCacheid, bak); + logbat_destroy(lg->snapshots_tid); + lg->snapshots_tid = b; + logger_add_bat(lg, b, "snapshots_tid"); + needcommit = 1; + } if (dsnapshots) { lg->dsnapshots = BATdescriptor(dsnapshots); @@ -1559,18 +1603,13 @@ logger_new(int debug, const char *fn, co if (BBPrename(lg->dsnapshots->batCacheid, bak) < 0) logger_fatal("Logger_new: BBPrename to %s failed", bak, 0, 0); logger_add_bat(lg, lg->dsnapshots, "dsnapshots"); - - if (bm_subcommit(lg->catalog_bid, lg->catalog_nme, lg->catalog_bid, lg->catalog_nme, lg->dcatalog, NULL, lg->debug) != GDK_SUCCEED) - logger_fatal("Logger_new: commit failed", 0, 0, 0); + needcommit = 1; } + GDKdebug &= ~CHECKMASK; + if (needcommit && bm_commit(lg) != LOG_OK) + logger_fatal("Logger_new: commit failed", 0, 0, 0); + GDKdebug = dbg; } - lg->freed = logbat_new(TYPE_int, 1, TRANSIENT); - if (lg->freed == NULL) - logger_fatal("Logger_new: failed to create freed bat", 0, 0, 0); - snprintf(bak, sizeof(bak), "%s_freed", fn); - if (BBPrename(lg->freed->batCacheid, bak) < 0) - logger_fatal("Logger_new: BBPrename to %s failed", - bak, 0, 0); if (fp != NULL) { #if SIZEOF_OID == 8 diff --git a/monetdb5/mal/mal_authorize.c b/monetdb5/mal/mal_authorize.c --- a/monetdb5/mal/mal_authorize.c +++ b/monetdb5/mal/mal_authorize.c @@ -152,7 +152,11 @@ AUTHinitTables(str *passwd) { BBPrename(BBPcacheid(user), "M5system_auth_user"); BATmode(user, PERSISTENT); } else { + int dbg = GDKdebug; + /* don't check this bat since we'll fix it below */ + GDKdebug &= ~CHECKMASK; user = BATdescriptor(bid); + GDKdebug = dbg; isNew = 0; } assert(user); @@ -168,11 +172,46 @@ AUTHinitTables(str *passwd) { BBPrename(BBPcacheid(pass), "M5system_auth_passwd_v2"); BATmode(pass, PERSISTENT); } else { + int dbg = GDKdebug; + /* don't check this bat since we'll fix it below */ + GDKdebug &= ~CHECKMASK; pass = BATdescriptor(bid); + GDKdebug = dbg; isNew = 0; } assert(pass); + if (user->htype == TYPE_oid) { + BAT *b; + char name[10]; + bat blist[5]; + assert(pass->htype == TYPE_oid); + blist[0] = 0; + b = BATcopy(user, TYPE_void, user->ttype, 1, PERSISTENT); + BATseqbase(b, 0); + BATmode(b, PERSISTENT); + BATmode(user, TRANSIENT); + snprintf(name, sizeof(name), "tmp_%o", user->batCacheid); + BBPrename(user->batCacheid, name); + BBPrename(b->batCacheid, "M5system_auth_user"); + blist[1] = user->batCacheid; + blist[2] = b->batCacheid; + BBPunfix(user->batCacheid); + user = b; + b = BATcopy(pass, TYPE_void, pass->ttype, 1, PERSISTENT); + BATseqbase(b, 0); + BATmode(b, PERSISTENT); + BATmode(pass, TRANSIENT); + snprintf(name, sizeof(name), "tmp_%o", pass->batCacheid); + BBPrename(pass->batCacheid, name); + BBPrename(b->batCacheid, "M5system_auth_passwd_v2"); + blist[3] = pass->batCacheid; + blist[4] = b->batCacheid; + BBPunfix(pass->batCacheid); + pass = b; + TMsubcommit_list(blist, 5); + } + /* load/create password BAT */ bid = BBPindex("M5system_auth_deleted"); if (!bid) { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list