Changeset: e9dfb7e8cd20 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e9dfb7e8cd20
Modified Files:
        MonetDB.spec
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/exports.stable.out
        gdk/gdk.h
        gdk/gdk_bbp.c
        gdk/gdk_heap.c
        gdk/gdk_logger.c
        gdk/gdk_tm.c
        monetdb5/modules/mal/bbp.c
        monetdb5/modules/mal/bbp.h
        monetdb5/modules/mal/bbp.mal
        sql/storage/bat/bat_utils.c
        sql/storage/store.c
        sql/test/leaks/Tests/check0.stable.out
        sql/test/leaks/Tests/check0.stable.out.int128
        sql/test/leaks/Tests/check1.stable.out
        sql/test/leaks/Tests/check1.stable.out.int128
        sql/test/leaks/Tests/check2.stable.out
        sql/test/leaks/Tests/check2.stable.out.int128
        sql/test/leaks/Tests/check3.stable.out
        sql/test/leaks/Tests/check3.stable.out.int128
        sql/test/leaks/Tests/check4.stable.out
        sql/test/leaks/Tests/check4.stable.out.int128
        sql/test/leaks/Tests/check5.stable.out
        sql/test/leaks/Tests/check5.stable.out.int128
        sql/test/leaks/Tests/select1.stable.out
        sql/test/leaks/Tests/select1.stable.out.int128
        sql/test/leaks/Tests/select2.stable.out
        sql/test/leaks/Tests/select2.stable.out.int128
Branch: default
Log Message:

Merge with Jun2016 branch.


diffs (truncated from 1709 to 300 lines):

diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -119,7 +119,7 @@ BuildRequires: geos-devel >= 3.0.0
 BuildRequires: gsl-devel
 %if %{?with_lidar:1}%{!?with_lidar:0}
 BuildRequires: liblas-devel gdal-devel libgeotiff-devel
-# Fedora 22 libas-devel does not depend on liblas:
+# Fedora 22 liblas-devel does not depend on liblas:
 BuildRequires: liblas
 %endif
 BuildRequires: libatomic_ops-devel
diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -31232,6 +31232,10 @@ command bbp.getIndex(b:bat[:any_2]):int
 address CMDbbpgetIndex;
 comment Retrieve the index in the BBP
 
+command bbp.setName(b:bat[:any_1],n:str):str 
+address CMDsetName;
+comment Rename a BAT
+
 command blob.blob(s:str):blob 
 address BLOBblob_fromstr;
 command blob.blob(s:blob):blob 
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -40205,6 +40205,10 @@ command bbp.getIndex(b:bat[:any_2]):int
 address CMDbbpgetIndex;
 comment Retrieve the index in the BBP
 
+command bbp.setName(b:bat[:any_1],n:str):str 
+address CMDsetName;
+comment Rename a BAT
+
 command blob.blob(s:str):blob 
 address BLOBblob_fromstr;
 command blob.blob(s:blob):blob 
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1067,6 +1067,7 @@ str CMDscience_bat_flt_sqrt(bat *ret, co
 str CMDscience_bat_flt_tan(bat *ret, const bat *bid);
 str CMDscience_bat_flt_tanh(bat *ret, const bat *bid);
 str CMDsetHeartbeat(void *res, int *ev);
+str CMDsetName(str *rname, const bat *b, str *name);
 str CMDsetoid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str CMDstartProfiler(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str CMDstartTrace(void *res);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -896,7 +896,8 @@ typedef struct {
 #define GDKLIBRARY_64_BIT_INT  061027  /* version that had no 128-bit integer 
option, yet */
 #define GDKLIBRARY_SORTEDPOS   061030  /* version where we can't trust 
no(rev)sorted */
 #define GDKLIBRARY_OLDWKB      061031  /* old geom WKB format */
-#define GDKLIBRARY             061032
+#define GDKLIBRARY_INSERTED    061032  /* inserted and deleted in BBP.dir */
+#define GDKLIBRARY             061033
 
 typedef struct BAT {
        /* static bat properties */
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -113,6 +113,12 @@ static BAT *getBBPdescriptor(bat i, int 
 static gdk_return BBPbackup(BAT *b, bit subcommit);
 static gdk_return BBPdir(int cnt, bat *subcommit);
 
+#ifdef HAVE_HGE
+/* start out by saying we have no hge, but as soon as we've seen one,
+ * we'll always say we do have it */
+static int havehge = 0;
+#endif
+
 #define BBPnamecheck(s) (BBPtmpcheck(s) ? ((s)[3] == '_' ? strtol((s) + 4, 
NULL, 8) : -strtol((s) + 5, NULL, 8)) : 0)
 
 #ifdef ATOMIC_LOCK
@@ -944,6 +950,10 @@ heapinit(COLrec *col, const char *buf, i
        /* silently convert chr columns to bte */
        if (strcmp(type, "chr") == 0)
                strcpy(type, "bte");
+#ifdef HAVE_HGE
+       else if (strcmp(type, "hge") == 0)
+               havehge = 1;
+#endif
        if ((t = ATOMindex(type)) < 0)
                t = ATOMunknown_find(type);
        else if (var != (t == TYPE_void || BATatoms[t].atomPut != NULL))
@@ -987,10 +997,12 @@ heapinit(COLrec *col, const char *buf, i
        col->heap.newstorage = (storage_t) storage;
        col->heap.farmid = BBPselectfarm(PERSISTENT, col->type, offheap);
        col->heap.dirty = 0;
-       if (bbpversion <= GDKLIBRARY_INET_COMPARE && strcmp(type, "inet") == 0) 
{
+       if (bbpversion <= GDKLIBRARY_INET_COMPARE &&
+           strcmp(type, "inet") == 0) {
                /* don't trust ordering information on inet columns */
                col->sorted = 0;
                col->revsorted = 0;
+               col->nosorted = col->norevsorted = 0;
        }
        if (col->heap.free > col->heap.size)
                GDKfatal("BBPinit: \"free\" value larger than \"size\" in heap 
of bat %d\n", (int) bid);
@@ -1050,7 +1062,7 @@ BBPreadEntries(FILE *fp, int *min_stamp,
                int nread;
                char *s, *options = NULL;
                char logical[1024];
-               lng inserted, deleted, first, count, capacity;
+               lng inserted = 0, deleted = 0, first, count, capacity;
                unsigned short map_head, map_tail, map_hheap, map_theap;
                int Hhashash, Thashash;
 
@@ -1062,14 +1074,23 @@ BBPreadEntries(FILE *fp, int *min_stamp,
                        *s = 0;
                }
 
-               if (sscanf(buf,
+               if (bbpversion <= GDKLIBRARY_INSERTED ?
+                   sscanf(buf,
                           "%lld %hu %128s %128s %128s %d %u %lld %lld %lld 
%lld %lld %hu %hu %hu %hu"
                           "%n",
                           &batid, &status, headname, tailname, filename,
                           &lastused, &properties, &inserted, &deleted, &first,
                           &count, &capacity, &map_head, &map_tail, &map_hheap,
                           &map_theap,
-                          &nread) < 16)
+                          &nread) < 16 :
+                       sscanf(buf,
+                          "%lld %hu %128s %128s %128s %d %u %lld %lld %lld %hu 
%hu %hu %hu"
+                          "%n",
+                          &batid, &status, headname, tailname, filename,
+                          &lastused, &properties, &first,
+                          &count, &capacity, &map_head, &map_tail, &map_hheap,
+                          &map_theap,
+                          &nread) < 14)
                        GDKfatal("BBPinit: invalid format for BBP.dir%s", buf);
 
                /* convert both / and \ path separators to our own DIR_SEP */
@@ -1107,10 +1128,10 @@ BBPreadEntries(FILE *fp, int *min_stamp,
                bs->S.persistence = PERSISTENT;
                bs->S.copiedtodisk = 1;
                bs->S.restricted = (properties & 0x06) >> 1;
-               bs->S.inserted = (BUN) inserted;
-               bs->S.deleted = (BUN) deleted;
                bs->S.first = (BUN) first;
                bs->S.count = (BUN) count;
+               bs->S.inserted = bs->S.first + bs->S.count;
+               bs->S.deleted = bs->S.first;
                bs->S.capacity = (BUN) capacity;
 
                nread += heapinit(&bs->H, buf + nread, &Hhashash, "H", oidsize, 
bbpversion, bid);
@@ -1193,7 +1214,8 @@ BBPheader(FILE *fp, oid *BBPoid, int *OI
        if (bbpversion != GDKLIBRARY &&
            bbpversion != GDKLIBRARY_SORTEDPOS &&
            bbpversion != GDKLIBRARY_64_BIT_INT &&
-           bbpversion != GDKLIBRARY_OLDWKB) {
+           bbpversion != GDKLIBRARY_OLDWKB &&
+           bbpversion != GDKLIBRARY_INSERTED) {
                GDKfatal("BBPinit: incompatible BBP version: expected 0%o, got 
0%o.", GDKLIBRARY, bbpversion);
        }
        if (fgets(buf, sizeof(buf), fp) == NULL) {
@@ -1543,7 +1565,7 @@ new_bbpentry(FILE *fp, bat i)
 #endif
 
        if (fprintf(fp, SSZFMT " %d %s %s %s %d %d " BUNFMT " " BUNFMT " "
-                   BUNFMT " " BUNFMT " " BUNFMT " %d %d %d %d", /* BAT info */
+                   BUNFMT " %d %d %d %d", /* BAT info */
                    (ssize_t) i,
                    BBP_status(i) & BBPPERSISTENT,
                    BBP_logical(i),
@@ -1551,8 +1573,6 @@ new_bbpentry(FILE *fp, bat i)
                    BBP_physical(i),
                    BBP_lastused(i),
                    BBP_desc(i)->S.restricted << 1,
-                   BBP_desc(i)->S.inserted,
-                   BBP_desc(i)->S.deleted,
                    BBP_desc(i)->S.first,
                    BBP_desc(i)->S.count,
                    BBP_desc(i)->S.capacity,
@@ -1578,7 +1598,11 @@ static gdk_return
 BBPdir_header(FILE *f, int n)
 {
        if (fprintf(f, "BBP.dir, GDKversion %d\n%d %d %d\n",
-                   GDKLIBRARY, SIZEOF_SIZE_T, SIZEOF_OID, SIZEOF_MAX_INT) < 0 
||
+                   GDKLIBRARY, SIZEOF_SIZE_T, SIZEOF_OID,
+#ifdef HAVE_HGE
+                   havehge ? SIZEOF_HGE :
+#endif
+                   SIZEOF_LNG) < 0 ||
            OIDwrite(f) < 0 ||
            fprintf(f, " BBPsize=%d\n", n) < 0 ||
            ferror(f)) {
@@ -2114,6 +2138,11 @@ BBPinsert(BATstore *bs)
        BBP_refs(i) = 1;        /* new bats have 1 pin */
        BBP_lrefs(i) = 0;       /* ie. no logical refs */
 
+#ifdef HAVE_HGE
+       if (bs->T.type == TYPE_hge)
+               havehge = 1;
+#endif
+
        if (BBP_bak(i) == NULL) {
                s = BBPtmpname(dirname, 64, i);
                BBP_logical(i) = GDKstrdup(s);
@@ -3595,8 +3624,8 @@ BBPprepare(bit subcommit)
 }
 
 static gdk_return
-do_backup(const char *srcdir, const char *nme, const char *extbase,
-         Heap *h, int tp, int dirty, bit subcommit)
+do_backup(const char *srcdir, const char *nme, const char *ext,
+         Heap *h, int dirty, bit subcommit)
 {
        gdk_return ret = GDK_SUCCEED;
 
@@ -3604,10 +3633,11 @@ do_backup(const char *srcdir, const char
          * protection); however, if we're backing up for subcommit
          * and a backup already exists in the main backup directory
          * (see GDKupgradevarheap), move the file */
-       if (subcommit && file_exists(h->farmid, BAKDIR, nme, extbase)) {
-               if (file_move(h->farmid, BAKDIR, SUBDIR, nme, extbase) != 
GDK_SUCCEED)
+       if (subcommit && file_exists(h->farmid, BAKDIR, nme, ext)) {
+               if (file_move(h->farmid, BAKDIR, SUBDIR, nme, ext) != 
GDK_SUCCEED)
                        return GDK_FAIL;
-       } else if (h->storage != STORE_MMAP) {
+       }
+       if (h->storage != STORE_MMAP) {
                /* STORE_PRIV saves into X.new files. Two cases could
                 * happen. The first is when a valid X.new exists
                 * because of an access change or a previous
@@ -3617,23 +3647,34 @@ do_backup(const char *srcdir, const char
                 * X.new files (after a crash). To protect against
                 * these we write X.new.kill files in the backup
                 * directory (see heap_move). */
-               char ext[16];
+               char extnew[16];
                gdk_return mvret = GDK_SUCCEED;
 
-               if (h->filename && h->newstorage == STORE_PRIV)
-                       snprintf(ext, sizeof(ext), "%s.new", extbase);
-               else
-                       snprintf(ext, sizeof(ext), "%s", extbase);
-               if (tp && dirty && !file_exists(h->farmid, BAKDIR, nme, ext)) {
-                       /* file will be saved (is dirty), move the old
-                        * image into backup */
-                       mvret = heap_move(h, srcdir, subcommit ? SUBDIR : 
BAKDIR, nme, ext);
-               } else if (subcommit && tp &&
-                          (dirty || file_exists(h->farmid, BAKDIR, nme, ext))) 
{
-                       /* file is clean. move the backup into the
-                        * subcommit dir (commit should eliminate
-                        * backup) */
-                       mvret = file_move(h->farmid, BAKDIR, SUBDIR, nme, ext);
+               snprintf(extnew, sizeof(extnew), "%s.new", ext);
+               if (dirty &&
+                   !file_exists(h->farmid, BAKDIR, nme, extnew) &&
+                   !file_exists(h->farmid, BAKDIR, nme, ext)) {
+                       /* if the heap is dirty and there is no heap
+                        * file (with or without .new extension) in
+                        * the BAKDIR, move the heap (preferably with
+                        * .new extension) to the correct backup
+                        * directory */
+                       if (file_exists(h->farmid, srcdir, nme, extnew))
+                               mvret = heap_move(h, srcdir,
+                                                 subcommit ? SUBDIR : BAKDIR,
+                                                 nme, extnew);
+                       else
+                               mvret = heap_move(h, srcdir,
+                                                 subcommit ? SUBDIR : BAKDIR,
+                                                 nme, ext);
+               } else if (subcommit) {
+                       /* if subcommit, wqe may need to move an
+                        * already made backup from BAKDIR to
+                        * SUBSIR */
+                       if (file_exists(h->farmid, BAKDIR, nme, extnew))
+                               mvret = file_move(h->farmid, BAKDIR, SUBDIR, 
nme, extnew);
+                       else if (file_exists(h->farmid, BAKDIR, nme, ext))
+                               mvret = file_move(h->farmid, BAKDIR, SUBDIR, 
nme, ext);
                }
                /* there is a situation where the move may fail,
                 * namely if this heap was not supposed to be existing
@@ -3680,20 +3721,20 @@ BBPbackup(BAT *b, bit subcommit)
        nme[sizeof(nme) - 1] = 0;
        srcdir[s - srcdir] = 0;
 
-       if (do_backup(srcdir, nme, "head", &b->H->heap, b->htype,
+       if (b->htype != TYPE_void &&
+           do_backup(srcdir, nme, "head", &b->H->heap,
                      b->batDirty || b->H->heap.dirty, subcommit) != 
GDK_SUCCEED)
                goto fail;
-       if (do_backup(srcdir, nme, "tail", &b->T->heap, b->ttype,
+       if (b->ttype != TYPE_void &&
+           do_backup(srcdir, nme, "tail", &b->T->heap,
                      b->batDirty || b->T->heap.dirty, subcommit) != 
GDK_SUCCEED)
                goto fail;
        if (b->H->vheap &&
            do_backup(srcdir, nme, "hheap", b->H->vheap,
-                     b->htype && b->hvarsized,
                      b->batDirty || b->H->vheap->dirty, subcommit) != 
GDK_SUCCEED)
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to