Changeset: f619cf62c92d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f619cf62c92d
Modified Files:
        gdk/gdk.h
        gdk/gdk_align.c
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_bbp.c
        gdk/gdk_hash.c
        gdk/gdk_heap.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_result.c
        tools/monetdbe/monetdbe.c
Branch: default
Log Message:

Merge with Jul2021 branch.


diffs (truncated from 812 to 300 lines):

diff --git a/common/stream/fwf.c b/common/stream/fwf.c
--- a/common/stream/fwf.c
+++ b/common/stream/fwf.c
@@ -149,21 +149,18 @@ stream_fwf_create(stream *restrict s, si
        }
        fsd->in_buf = malloc(fsd->line_len);
        if (fsd->in_buf == NULL) {
-               close_stream(fsd->s);
                free(fsd);
                mnstr_set_open_error(STREAM_FWF_NAME, errno, NULL);
                return NULL;
        }
        fsd->out_buf = malloc(fsd->line_len * 3);
        if (fsd->out_buf == NULL) {
-               close_stream(fsd->s);
                free(fsd->in_buf);
                free(fsd);
                mnstr_set_open_error(STREAM_FWF_NAME, errno, NULL);
                return NULL;
        }
        if ((ns = create_stream(STREAM_FWF_NAME)) == NULL) {
-               close_stream(fsd->s);
                free(fsd->in_buf);
                free(fsd->out_buf);
                free(fsd);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -535,14 +535,14 @@ typedef enum {
 
 /* Heap storage modes */
 typedef enum {
-       STORE_MEM     = 0,      /* load into GDKmalloced memory */
-       STORE_MMAP    = 1,      /* mmap() into virtual memory */
-       STORE_PRIV    = 2,      /* BAT copy of copy-on-write mmap */
-       STORE_CMEM    = 3,      /* load into malloc (not GDKmalloc) memory*/
-       STORE_NOWN    = 4,      /* memory not owned by the BAT */
-       STORE_MMAPABS = 5,      /* mmap() into virtual memory from an
+       STORE_INVALID = 0,      /* invalid value, used to indicate error */
+       STORE_MEM,              /* load into GDKmalloced memory */
+       STORE_MMAP,             /* mmap() into virtual memory */
+       STORE_PRIV,             /* BAT copy of copy-on-write mmap */
+       STORE_CMEM,             /* load into malloc (not GDKmalloc) memory*/
+       STORE_NOWN,             /* memory not owned by the BAT */
+       STORE_MMAPABS,          /* mmap() into virtual memory from an
                                 * absolute path (not part of dbfarm) */
-       STORE_INVALID           /* invalid value, used to indicate error */
 } storage_t;
 
 typedef struct {
@@ -2148,9 +2148,8 @@ gdk_export void VIEWbounds(BAT *b, BAT *
  * correct for the reversed view.
  */
 #define isVIEW(x)                                                      \
-       (assert((x)->batCacheid > 0),                                   \
-        (((x)->theap && (x)->theap->parentid != (x)->batCacheid) ||    \
-         ((x)->tvheap && (x)->tvheap->parentid != (x)->batCacheid)))
+       (((x)->theap && (x)->theap->parentid != (x)->batCacheid) ||     \
+        ((x)->tvheap && (x)->tvheap->parentid != (x)->batCacheid))
 
 #define VIEWtparent(x) ((x)->theap == NULL || (x)->theap->parentid == 
(x)->batCacheid ? 0 : (x)->theap->parentid)
 #define VIEWvtparent(x)        ((x)->tvheap == NULL || (x)->tvheap->parentid 
== (x)->batCacheid ? 0 : (x)->tvheap->parentid)
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -278,7 +278,6 @@ VIEWunlink(BAT *b)
                BAT *tpb = NULL;
                BAT *vtpb = NULL;
 
-               assert(b->batCacheid > 0);
                if (tp)
                        tpb = BBP_cache(tp);
                if (tp && !vtp)
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -96,6 +96,7 @@ BATcreatedesc(oid hseq, int tt, bool hea
 
                .batRole = role,
                .batTransient = true,
+               .batRestricted = BAT_WRITE,
        };
        if (heapnames && (bn->theap = GDKmalloc(sizeof(Heap))) == NULL) {
                GDKfree(bn);
@@ -114,8 +115,6 @@ BATcreatedesc(oid hseq, int tt, bool hea
         * fill in heap names, so HEAPallocs can resort to disk for
         * very large writes.
         */
-       assert(bn->batCacheid > 0);
-
        if (heapnames) {
                assert(bn->theap != NULL);
                *bn->theap = (Heap) {
@@ -662,7 +661,6 @@ BATfree(BAT *b)
                return;
 
        /* deallocate all memory for a bat */
-       assert(b->batCacheid > 0);
        if (b->tident && !default_ident(b->tident))
                GDKfree(b->tident);
        b->tident = BATstring_t;
@@ -1900,7 +1898,6 @@ gdk_return
 BATkey(BAT *b, bool flag)
 {
        BATcheck(b, GDK_FAIL);
-       assert(b->batCacheid > 0);
        if (b->ttype == TYPE_void) {
                if (BATtdense(b) && !flag) {
                        GDKerror("dense column must be unique.\n");
@@ -1941,7 +1938,6 @@ BAThseqbase(BAT *b, oid o)
        if (b != NULL) {
                assert(o <= GDK_oid_max);       /* i.e., not oid_nil */
                assert(o + BATcount(b) <= GDK_oid_max);
-               assert(b->batCacheid > 0);
                if (b->hseqbase != o) {
                        b->batDirtydesc = true;
                        b->hseqbase = o;
@@ -1956,7 +1952,6 @@ BATtseqbase(BAT *b, oid o)
        if (b == NULL)
                return;
        assert(is_oid_nil(o) || o + BATcount(b) <= GDK_oid_max);
-       assert(b->batCacheid > 0);
        if (b->tseqbase != o) {
                b->batDirtydesc = true;
        }
@@ -2180,8 +2175,7 @@ HEAPchangeaccess(Heap *hp, int dstmode, 
        if (dstmode == BAT_WRITE) {
                if (hp->storage != STORE_PRIV)
                        hp->dirty = true;       /* exception c does not make it 
dirty */
-//             return STORE_PRIV;      /* 4=>6,5=>7,c=>6 persistent BAT_WRITE 
needs STORE_PRIV */
-               return STORE_MMAP;
+               return STORE_PRIV;      /* 4=>6,5=>7,c=>6 persistent BAT_WRITE 
needs STORE_PRIV */
        }
        if (hp->storage == STORE_MMAP) {        /* 6=>4 */
                hp->dirty = true;
@@ -2209,8 +2203,7 @@ HEAPcommitpersistence(Heap *hp, bool wri
 
        if (hp->newstorage == STORE_MMAP)
                hp->dirty = true;       /* 2=>6 */
-//     return STORE_PRIV;      /* 1=>5,2=>6,3=>7,a=>c,b=>6 states */
-       return STORE_MMAP;
+       return STORE_PRIV;      /* 1=>5,2=>6,3=>7,a=>c,b=>6 states */
 }
 
 
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -21,7 +21,6 @@
 gdk_return
 unshare_varsized_heap(BAT *b)
 {
-       assert(b->batCacheid > 0);
        if (ATOMvarsized(b->ttype) &&
            b->tvheap->parentid != b->batCacheid) {
                Heap *h = GDKzalloc(sizeof(Heap));
@@ -647,7 +646,6 @@ BATappend2(BAT *b, BAT *n, BAT *s, bool 
        if (b == NULL || n == NULL || BATcount(n) == 0) {
                return GDK_SUCCEED;
        }
-       assert(b->batCacheid > 0);
        assert(b->theap->parentid == b->batCacheid);
 
        TRC_DEBUG_IF(ALGO) {
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -502,8 +502,8 @@ heapinit(BAT *b, const char *buf,
        b->theap->size = (size_t) size;
        b->theap->base = NULL;
        settailname(b->theap, filename, t, width);
-       b->theap->storage = (storage_t) storage;
-       b->theap->newstorage = (storage_t) storage;
+       b->theap->storage = STORE_INVALID;
+       b->theap->newstorage = STORE_INVALID;
        b->theap->farmid = BBPselectfarm(PERSISTENT, b->ttype, offheap);
        b->theap->dirty = false;
        b->theap->parentid = b->batCacheid;
@@ -546,9 +546,9 @@ vheapinit(BAT *b, const char *buf, bat b
                        .free = (size_t) free,
                        .size = (size_t) size,
                        .base = NULL,
-                       .storage = (storage_t) storage,
+                       .storage = STORE_INVALID,
                        .cleanhash = true,
-                       .newstorage = (storage_t) storage,
+                       .newstorage = STORE_INVALID,
                        .dirty = false,
                        .parentid = bid,
                        .farmid = BBPselectfarm(PERSISTENT, b->ttype, varheap),
@@ -1670,7 +1670,7 @@ heap_entry(FILE *fp, BAT *b, BUN size)
                       b->tseqbase,
                       free,
                       b->theap->size,
-                      (int) b->theap->newstorage,
+                      0,
                       b->tminpos < b->hseqbase + size ? (uint64_t) b->tminpos 
: (uint64_t) oid_nil,
                       b->tmaxpos < b->hseqbase + size ? (uint64_t) b->tmaxpos 
: (uint64_t) oid_nil);
 }
@@ -1680,8 +1680,7 @@ vheap_entry(FILE *fp, Heap *h)
 {
        if (h == NULL)
                return 0;
-       return fprintf(fp, " %zu %zu %d",
-                      h->free, h->size, (int) h->newstorage);
+       return fprintf(fp, " %zu %zu %d", h->free, h->size, 0);
 }
 
 static gdk_return
@@ -2276,7 +2275,6 @@ BBPcacheit(BAT *bn, bool lock)
                if (bn->tvheap)
                        bn->tvheap->parentid = i;
        }
-       assert(bn->batCacheid > 0);
 
        if (lock)
                MT_lock_set(&GDKswapLock(i));
diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -474,6 +474,10 @@ BATcheckhash(BAT *b)
                                strconcat_len(h->heapbckt.filename,
                                              sizeof(h->heapbckt.filename),
                                              nme, ".thashb", NULL);
+                               h->heaplink.storage = STORE_INVALID;
+                               h->heaplink.newstorage = STORE_INVALID;
+                               h->heapbckt.storage = STORE_INVALID;
+                               h->heapbckt.newstorage = STORE_INVALID;
 
                                /* check whether a persisted hash can be found 
*/
                                if ((fd = GDKfdlocate(h->heapbckt.farmid, nme, 
"rb+", "thashb")) >= 0) {
@@ -993,7 +997,6 @@ BAThash_impl(BAT *restrict b, struct can
 gdk_return
 BAThash(BAT *b)
 {
-       assert(b->batCacheid > 0);
        if (ATOMstorage(b->ttype) == TYPE_msk) {
                GDKerror("No hash on msk type bats\n");
                return GDK_FAIL;
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -292,7 +292,12 @@ HEAPextend(Heap *h, size_t size, bool ma
                        }
                        fd = GDKfdlocate(h->farmid, nme, "wb", ext);
                        if (fd >= 0) {
+                               gdk_return rc = GDKextendf(fd, size, nme);
                                close(fd);
+                               if (rc != GDK_SUCCEED) {
+                                       failure = "h->storage == STORE_MEM && 
can_map && fd >= 0 && GDKextendf() != GDK_SUCCEED";
+                                       goto failed;
+                               }
                                h->storage = h->newstorage == STORE_MMAP && 
existing && !mayshare ? STORE_PRIV : h->newstorage;
                                /* make sure we really MMAP */
                                if (must_mmap && h->newstorage == STORE_MEM)
@@ -746,7 +751,8 @@ HEAPload_intern(Heap *h, const char *nme
        char *srcpath, *dstpath, *tmp;
        int t0;
 
-       h->storage = h->newstorage = h->size < GDK_mmap_minsize_persistent ? 
STORE_MEM : STORE_MMAP;
+       if (h->storage == STORE_INVALID || h->newstorage == STORE_INVALID)
+               h->storage = h->newstorage = h->size < (h->farmid == 0 ? 
GDK_mmap_minsize_persistent : GDK_mmap_minsize_transient) ? STORE_MEM : 
STORE_MMAP;
 
        minsize = (h->size + GDK_mmap_pagesize - 1) & ~(GDK_mmap_pagesize - 1);
        if (h->storage != STORE_MEM && minsize != h->size)
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -321,6 +321,7 @@ BATcheckimprints(BAT *b)
                                strconcat_len(imprints->imprints.filename,
                                              
sizeof(imprints->imprints.filename),
                                              nme, ".timprints", NULL);
+                               imprints->imprints.storage = 
imprints->imprints.newstorage = STORE_INVALID;
                                /* check whether a persisted imprints index
                                 * can be found */
                                if ((fd = 
GDKfdlocate(imprints->imprints.farmid, nme, "rb", "timprints")) >= 0) {
@@ -774,7 +775,6 @@ IMPSfree(BAT *b)
        Imprints *imprints;
 
        if (b && b->timprints) {
-               assert(b->batCacheid > 0);
                MT_lock_set(&b->batIdxLock);
                imprints = b->timprints;
                if (imprints != NULL && imprints != (Imprints *) 1) {
diff --git a/gdk/gdk_orderidx.c b/gdk/gdk_orderidx.c
--- a/gdk/gdk_orderidx.c
+++ b/gdk/gdk_orderidx.c
@@ -76,7 +76,6 @@ BATcheckorderidx(BAT *b)
 
        if (b == NULL)
                return false;
-       assert(b->batCacheid > 0);
        /* we don't need the lock just to read the value b->torderidx */
        if (b->torderidx == (Heap *) 1) {
                /* but when we want to change it, we need the lock */
@@ -93,6 +92,7 @@ BATcheckorderidx(BAT *b)
                                strconcat_len(hp->filename,
                                              sizeof(hp->filename),
                                              nme, ".torderidx", NULL);
+                               hp->storage = hp->newstorage = STORE_INVALID;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to