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