Changeset: c1b14ff056d8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c1b14ff056d8
Modified Files:
        clients/Tests/exports.stable.out
        gdk/gdk.h
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_bbp.c
        gdk/gdk_group.c
        gdk/gdk_join.c
        gdk/gdk_logger.c
        gdk/gdk_private.h
        gdk/gdk_select.c
        gdk/gdk_storage.c
        gdk/gdk_tm.c
        gdk/gdk_unique.c
        monetdb5/mal/mal_authorize.c
        monetdb5/mal/mal_profiler.c
        monetdb5/modules/kernel/algebra.c
        monetdb5/modules/kernel/bat5.c
        monetdb5/modules/kernel/status.c
        monetdb5/modules/mal/querylog.c
        monetdb5/modules/mal/tablet.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/vaults/lidar/lidar.c
        sql/storage/bat/bat_storage.c
Branch: Apr2019
Log Message:

Refactor: change batPersistence to batTransient and use bool for it.
This way, the values TRANSIENT and PERSISTENT don't do double duty
anymore.  They are now purely for the role of a BAT.


diffs (truncated from 769 to 300 lines):

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
@@ -148,7 +148,7 @@ gdk_return BATleftjoin(BAT **r1p, BAT **
 void *BATmax(BAT *b, void *aggr);
 BAT *BATmergecand(BAT *a, BAT *b);
 void *BATmin(BAT *b, void *aggr);
-gdk_return BATmode(BAT *b, int mode);
+gdk_return BATmode(BAT *b, bool transient);
 void BATmsync(BAT *b);
 bool BATordered(BAT *b);
 bool BATordered_rev(BAT *b);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -691,7 +691,7 @@ gdk_export int VALisnil(const ValRecord 
  * typedef struct {
  *           // static BAT properties
  *           bat    batCacheid;       // bat id: index in BBPcache
- *           int    batPersistence;   // persistence mode
+ *           bool   batTransient;     // persistence mode
  *           bool   batCopiedtodisk;  // BAT is saved on disk?
  *           // dynamic BAT properties
  *           int    batHeat;          // heat of BAT in the BBP
@@ -781,10 +781,10 @@ typedef struct BAT {
        bool
         batCopiedtodisk:1,     /* once written */
         batDirtyflushed:1,     /* was dirty before commit started? */
-        batDirtydesc:1;        /* bat descriptor dirty marker */
+        batDirtydesc:1,        /* bat descriptor dirty marker */
+        batTransient:1;        /* should the BAT persist on disk? */
        uint8_t /* adjacent bit fields are packed together (if they fit) */
-        batRestricted:2,       /* access privileges */
-        batPersistence:1;      /* should the BAT persist on disk? */
+        batRestricted:2;       /* access privileges */
        uint8_t batRole;        /* role of the bat */
        uint16_t unused;        /* value=0 for now (sneakily used by mat.c) */
        int batSharecnt;        /* incoming view count */
@@ -1244,7 +1244,7 @@ bat_iterator(BAT *b)
  * @item BAT *
  * @tab BATkey (BAT *b, bool onoff)
  * @item BAT *
- * @tab BATmode (BAT *b, int mode)
+ * @tab BATmode (BAT *b, bool transient)
  * @item BAT *
  * @tab BATsetaccess (BAT *b, restrict_t mode)
  * @item int
@@ -1285,7 +1285,7 @@ gdk_export void BATsetcapacity(BAT *b, B
 gdk_export void BATsetcount(BAT *b, BUN cnt);
 gdk_export BUN BATgrows(BAT *b);
 gdk_export gdk_return BATkey(BAT *b, bool onoff);
-gdk_export gdk_return BATmode(BAT *b, int mode);
+gdk_export gdk_return BATmode(BAT *b, bool transient);
 gdk_export gdk_return BATroles(BAT *b, const char *tnme);
 gdk_export void BAThseqbase(BAT *b, oid o);
 gdk_export void BATtseqbase(BAT *b, oid o);
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -97,7 +97,7 @@ BATcreatedesc(oid hseq, int tt, bool hea
        bn->tprops = NULL;
 
        bn->batRole = role;
-       bn->batPersistence = TRANSIENT;
+       bn->batTransient = true;
        /*
         * add to BBP
         */
@@ -2033,47 +2033,46 @@ BATgetaccess(BAT *b)
        } while (0)
 
 gdk_return
-BATmode(BAT *b, int mode)
+BATmode(BAT *b, bool transient)
 {
        BATcheck(b, "BATmode", GDK_FAIL);
 
        /* can only make a bat PERSISTENT if its role is already
         * PERSISTENT */
-       assert(mode == PERSISTENT || mode == TRANSIENT);
-       assert(mode == TRANSIENT || b->batRole == PERSISTENT);
+       assert(transient || b->batRole == PERSISTENT);
 
-       if (b->batRole == TRANSIENT && mode != TRANSIENT) {
+       if (b->batRole == TRANSIENT && !transient) {
                GDKerror("cannot change mode of BAT in TRANSIENT farm.\n");
                return GDK_FAIL;
        }
 
-       if (mode != b->batPersistence) {
+       if (transient != b->batTransient) {
                bat bid = b->batCacheid;
 
-               if (mode == PERSISTENT) {
+               if (!transient) {
                        check_type(b->ttype);
                }
                BBP_dirty = true;
 
-               if (mode == PERSISTENT && isVIEW(b)) {
+               if (!transient && isVIEW(b)) {
                        if (VIEWreset(b) != GDK_SUCCEED) {
                                return GDK_FAIL;
                        }
                }
                /* persistent BATs get a logical reference */
-               if (mode == PERSISTENT) {
+               if (!transient) {
                        BBPretain(bid);
-               } else if (b->batPersistence == PERSISTENT) {
+               } else if (!b->batTransient) {
                        BBPrelease(bid);
                }
                MT_lock_set(&GDKswapLock(bid));
-               if (mode == PERSISTENT) {
+               if (!transient) {
                        if (!(BBP_status(bid) & BBPDELETED))
                                BBP_status_on(bid, BBPNEW, "BATmode");
                        else
                                BBP_status_on(bid, BBPEXISTING, "BATmode");
                        BBP_status_off(bid, BBPDELETED, "BATmode");
-               } else if (b->batPersistence == PERSISTENT) {
+               } else if (!b->batTransient) {
                        if (!(BBP_status(bid) & BBPNEW))
                                BBP_status_on(bid, BBPDELETED, "BATmode");
                        BBP_status_off(bid, BBPPERSISTENT, "BATmode");
@@ -2081,7 +2080,7 @@ BATmode(BAT *b, int mode)
                /* session bats or persistent bats that did not
                 * witness a commit yet may have been saved */
                if (b->batCopiedtodisk) {
-                       if (mode == PERSISTENT) {
+                       if (!transient) {
                                BBP_status_off(bid, BBPTMP, "BATmode");
                        } else {
                                /* TMcommit must remove it to
@@ -2089,7 +2088,7 @@ BATmode(BAT *b, int mode)
                                BBP_status_on(bid, BBPTMP, "BATmode");
                        }
                }
-               b->batPersistence = mode;
+               b->batTransient = transient;
                MT_lock_unset(&GDKswapLock(bid));
        }
        return GDK_SUCCEED;
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -1106,7 +1106,7 @@ BATkeyed(BAT *b)
                        /* we completed the scan: no duplicates */
                        b->tkey = true;
                } else if (BATcheckhash(b) ||
-                          (b->batPersistence == PERSISTENT &&
+                          (!b->batTransient &&
                            BAThash(b) == GDK_SUCCEED) ||
                           (VIEWtparent(b) != 0 &&
                            BATcheckhash(BBPdescriptor(VIEWtparent(b))))) {
@@ -1724,7 +1724,7 @@ BATsort(BAT **sorted, BAT **order, BAT *
                if (!reverse &&
                    !nilslast &&
                    pb != NULL &&
-                   (ords != NULL || pb->batPersistence == PERSISTENT) &&
+                   (ords != NULL || !pb->batTransient) &&
                    (m = createOIDXheap(pb, stable)) != NULL) {
                        if (ords == NULL) {
                                ords = (oid *) m->base + ORDERIDXOFF;
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -769,7 +769,7 @@ BBPreadEntries(FILE *fp, unsigned bbpver
                bn->batCacheid = bid;
                if (BATroles(bn, NULL) != GDK_SUCCEED)
                        GDKfatal("BBPinit: BATroles failed.");
-               bn->batPersistence = PERSISTENT;
+               bn->batTransient = false;
                bn->batCopiedtodisk = true;
                bn->batRestricted = (properties & 0x06) >> 1;
                bn->batCount = (BUN) count;
@@ -1485,7 +1485,7 @@ BBPdump(void)
                }
                fprintf(stderr, " role: %s, persistence: %s\n",
                        b->batRole == PERSISTENT ? "persistent" : "transient",
-                       b->batPersistence == PERSISTENT ? "persistent" : 
"transient");
+                       b->batTransient ? "transient" : "persistent");
        }
        fprintf(stderr,
                "# %d bats: mem=%zu, vm=%zu %d cached bats: mem=%zu, vm=%zu\n",
@@ -1919,7 +1919,7 @@ BBPrename(bat bid, const char *nme)
                BBP_insert(bid);
        }
        b->batDirtydesc = true;
-       if (b->batPersistence == PERSISTENT) {
+       if (!b->batTransient) {
                bool lock = locked_by == 0 || locked_by != MT_getpid();
 
                if (lock)
@@ -2375,7 +2375,7 @@ BBPsave(BAT *b)
                        flags |= BBPSWAPPED;
                        BBP_dirty = true;
                }
-               if (b->batPersistence != PERSISTENT) {
+               if (b->batTransient) {
                        flags |= BBPTMP;
                }
                BBP_status_on(bid, flags, "BBPsave");
@@ -2798,7 +2798,7 @@ BBPbackup(BAT *b, bool subcommit)
        if (BBPprepare(subcommit) != GDK_SUCCEED) {
                return GDK_FAIL;
        }
-       if (!b->batCopiedtodisk || b->batPersistence != PERSISTENT) {
+       if (!b->batCopiedtodisk || b->batTransient) {
                return GDK_SUCCEED;
        }
        /* determine location dir and physical suffix */
diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -966,7 +966,7 @@ BATgroup_internal(BAT **groups, BAT **ex
                GDKfree(sgrps);
        } else if (g == NULL &&
                   (BATcheckhash(b) ||
-                   (b->batPersistence == PERSISTENT &&
+                   (!b->batTransient &&
                     BAThash(b) == GDK_SUCCEED) ||
                    ((parent = VIEWtparent(b)) != 0 &&
                     BATcheckhash(BBPdescriptor(parent))))) {
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3896,14 +3896,12 @@ BATjoin(BAT **r1p, BAT **r2p, BAT *l, BA
                                 rstart, rend, rcnt, rcand, rcandend,
                                 nil_matches, false, false, false,
                                 estimate, t0, false);
-       } else if (l->batPersistence == PERSISTENT &&
-                  r->batPersistence != PERSISTENT) {
+       } else if (!l->batTransient && r->batTransient) {
                /* l is persistent and r is not, create hash on l
                 * since it may be reused */
                swap = true;
                reason = "left is persistent";
-       } else if (l->batPersistence != PERSISTENT &&
-                  r->batPersistence == PERSISTENT) {
+       } else if (l->batTransient && !r->batTransient) {
                /* l is not persistent but r is, create hash on r
                 * since it may be reused */
                /* nothing */;
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -177,7 +177,7 @@ logbat_new(int tt, BUN size, int role)
 
        if (nb) {
                if (role == PERSISTENT)
-                       BATmode(nb, PERSISTENT);
+                       BATmode(nb, false);
        } else {
                fprintf(stderr, "!ERROR: logbat_new: creating new 
BAT[void:%s]#" BUNFMT " failed\n", ATOMname(tt), size);
        }
@@ -1324,7 +1324,7 @@ logger_switch_bat(BAT *old, BAT *new, co
 {
        char bak[BUFSIZ];
 
-       if (BATmode(old, TRANSIENT) != GDK_SUCCEED) {
+       if (BATmode(old, true) != GDK_SUCCEED) {
                GDKerror("Logger_new: cannot convert old %s to transient", 
name);
                return GDK_FAIL;
        }
@@ -2485,7 +2485,7 @@ log_bat_persists(logger *lg, BAT *b, con
        int len;
        char buf[BUFSIZ];
        logformat l;
-       int flag = (b->batPersistence == PERSISTENT) ? LOG_USE : LOG_CREATE;
+       int flag = b->batTransient ? LOG_CREATE : LOG_USE;
        BUN p;
 
        l.nr = 0;
@@ -2903,7 +2903,7 @@ bm_commit(logger *lg)
                str name = BBPname(bid);
 
                if (lb == NULL ||
-                   BATmode(lb, TRANSIENT) != GDK_SUCCEED) {
+                   BATmode(lb, true) != GDK_SUCCEED) {
                        logbat_destroy(lb);
                        logbat_destroy(n);
                        return GDK_FAIL;
@@ -2934,7 +2934,7 @@ bm_commit(logger *lg)
                        continue;
 
                if ((lb = BATdescriptor(bid)) == NULL ||
-                   BATmode(lb, PERSISTENT) != GDK_SUCCEED) {
+                   BATmode(lb, false) != GDK_SUCCEED) {
                        logbat_destroy(lb);
                        logbat_destroy(n);
                        return GDK_FAIL;
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -263,7 +263,7 @@ stpconcat(char *restrict dst, const char
 #define ALGOBATPAR(b)  BATgetId(b),                    \
                        BATcount(b),                    \
                        ATOMname(b->ttype),             \
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to