Changeset: c84916912f51 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c84916912f51
Modified Files:
        gdk/gdk_bbp.mx
Branch: Aug2011
Log Message:

Fix for OID 32->64 upgrade.
Large heaps are marked as STORE_MMAP.  This means that BBPsave doesn't
copy them to the BACKUP directory but assumes that they are protected
by a copy-on-write memory map.  This does not work for us here.  So,
temporarily mark the heap as STORE_MEM so that it does get copied.


diffs (42 lines):

diff --git a/gdk/gdk_bbp.mx b/gdk/gdk_bbp.mx
--- a/gdk/gdk_bbp.mx
+++ b/gdk/gdk_bbp.mx
@@ -649,6 +649,7 @@ fixoidheap(void)
        str nme, bnme;
        long_str filename;
        int ht, tt;
+       char hs, hvs, ts, tvs;  /* saved storage types */
 
        fprintf(stderr,
                "# upgrading database from 32 bit OIDs to 64 bit OIDs\n");
@@ -729,8 +730,30 @@ fixoidheap(void)
                        if (b->T->type == TYPE_str)
                                b->T->vheap->dirty = TRUE;
                }
+               /* temporarily set storage to STORE_MEM to force move
+                * into BACKUP dir */
+               hs = b->H->heap.storage;
+               b->H->heap.storage = STORE_MEM;
+               ts = b->T->heap.storage;
+               b->T->heap.storage = STORE_MEM;
+               if (b->H->vheap) {
+                       hvs = b->H->vheap->storage;
+                       b->H->vheap->storage = STORE_MEM;
+               }
+               if (b->T->vheap) {
+                       tvs = b->T->vheap->storage;
+                       b->T->vheap->storage = STORE_MEM;
+               }
                if (BBPsave(b))
                        GDKfatal("fixoidheap: creating backup for BAT %d 
failed\n", bid);
+               /* reset storage */
+               b->H->heap.storage = hs;
+               b->T->heap.storage = ts;
+               if (b->H->vheap)
+                       b->H->vheap->storage = hvs;
+               if (b->T->vheap)
+                       b->T->vheap->storage = tvs;
+
                fixoidheapcolumn(b, nme, filename, "head", "hheap");
                fixoidheapcolumn(BATmirror(b), nme, filename, "tail", "theap");
 
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to