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