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

Reply via email to