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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list