Changeset: abaa47e4e552 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/abaa47e4e552
Modified Files:
gdk/gdk.h
gdk/gdk_bbp.c
gdk/gdk_logger.c
gdk/gdk_logger_old.c
gdk/gdk_private.h
gdk/gdk_utils.c
Branch: default
Log Message:
Create extra farm for system transients.
diffs (196 lines):
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -541,6 +541,7 @@ typedef size_t BUN;
typedef enum {
PERSISTENT = 0,
TRANSIENT,
+ SYSTRANS,
} role_t;
/* Heap storage modes */
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1108,7 +1108,7 @@ BBPaddfarm(const char *dirname, uint32_t
GDKerror("no newline allowed in directory name\n");
return GDK_FAIL;
}
- if (rolemask == 0 || (rolemask & 1 && BBPfarms[0].dirname != NULL)) {
+ if (rolemask == 0 || (rolemask & 1 && BBPfarms[0].roles != 0)) {
if (logerror)
GDKerror("bad rolemask\n");
return GDK_FAIL;
@@ -1181,6 +1181,36 @@ BBPaddfarm(const char *dirname, uint32_t
return GDK_FAIL;
}
+gdk_return
+BBPchkfarms(void)
+{
+ const char *dir = NULL;
+ uint32_t rolemask = 0;
+ if ((BBPfarms[0].roles & 1) == 0) {
+ GDKerror("Must at least call BBPaddfarms for once for
persistent data\n");
+ return GDK_FAIL;
+ }
+ for (int i = 0; i < MAXFARMS; i++) {
+ if (BBPfarms[i].roles != 0) {
+ dir = BBPfarms[i].dirname;
+ rolemask |= BBPfarms[i].roles;
+ }
+ }
+ if (dir == NULL)
+ dir = "in-memory";
+ if ((rolemask & (1U << TRANSIENT)) == 0) {
+ gdk_return rc = BBPaddfarm(dir, 1U << TRANSIENT, true);
+ if (rc != GDK_SUCCEED)
+ return rc;
+ }
+ if ((rolemask & (1U << SYSTRANS)) == 0) {
+ gdk_return rc = BBPaddfarm(dir, 1U << SYSTRANS, true);
+ if (rc != GDK_SUCCEED)
+ return rc;
+ }
+ return GDK_SUCCEED;
+}
+
#ifdef GDKLIBRARY_HASHASH
static gdk_return
fixhashashbat(BAT *b)
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1218,7 +1218,7 @@ log_read_transaction(logger *lg)
else {
if (l.id > 0) {
// START OF LOG_BAT_GROUP
- cands = COLnew(0, TYPE_void, 0,
TRANSIENT);
+ cands = COLnew(0, TYPE_void, 0,
SYSTRANS);
if (!cands)
err = LOG_ERR;
}
@@ -1527,8 +1527,8 @@ cleanup_and_swap(logger *lg, int *r, con
BUN ocnt = BATcount(catalog_bid);
nbids = logbat_new(TYPE_int, ocnt-cleanup, PERSISTENT);
noids = logbat_new(TYPE_int, ocnt-cleanup, PERSISTENT);
- ncnts = logbat_new(TYPE_lng, ocnt-cleanup, TRANSIENT);
- nlids = logbat_new(TYPE_lng, ocnt-cleanup, TRANSIENT);
+ ncnts = logbat_new(TYPE_lng, ocnt-cleanup, SYSTRANS);
+ nlids = logbat_new(TYPE_lng, ocnt-cleanup, SYSTRANS);
ndels = logbat_new(TYPE_oid, BATcount(dcatalog)-cleanup, PERSISTENT);
if (nbids == NULL || noids == NULL || ncnts == NULL || nlids == NULL ||
ndels == NULL) {
@@ -1996,12 +1996,12 @@ log_load(int debug, const char *fn, cons
BBPretain(lg->catalog_id->batCacheid);
BBPretain(lg->dcatalog->batCacheid);
}
- lg->catalog_cnt = logbat_new(TYPE_lng, 1, TRANSIENT);
+ lg->catalog_cnt = logbat_new(TYPE_lng, 1, SYSTRANS);
if (lg->catalog_cnt == NULL) {
GDKerror("failed to create catalog_cnt bat");
goto error;
}
- lg->catalog_lid = logbat_new(TYPE_lng, 1, TRANSIENT);
+ lg->catalog_lid = logbat_new(TYPE_lng, 1, SYSTRANS);
if (lg->catalog_lid == NULL) {
GDKerror("failed to create catalog_lid bat");
goto error;
diff --git a/gdk/gdk_logger_old.c b/gdk/gdk_logger_old.c
--- a/gdk/gdk_logger_old.c
+++ b/gdk/gdk_logger_old.c
@@ -1390,7 +1390,7 @@ logger_load(const char *fn, char filenam
catalog_tpe = BBPindex(bak);
t = BATdescriptor(catalog_tpe);
if (t == NULL) {
- t = logbat_new(TYPE_bte, BATSIZE, TRANSIENT);
+ t = logbat_new(TYPE_bte, BATSIZE, SYSTRANS);
if (t == NULL
||BBPrename(t, bak) < 0) {
BBPunfix(b->batCacheid);
@@ -1416,7 +1416,7 @@ logger_load(const char *fn, char filenam
catalog_oid = BBPindex(bak);
o = BATdescriptor(catalog_oid);
if (o == NULL) {
- o = logbat_new(TYPE_lng, BATSIZE, TRANSIENT);
+ o = logbat_new(TYPE_lng, BATSIZE, SYSTRANS);
if (o == NULL
||BBPrename(o, bak) < 0) {
BBPunfix(b->batCacheid);
@@ -1446,7 +1446,7 @@ logger_load(const char *fn, char filenam
/* older database: create dcatalog and convert
* catalog_bid and catalog_nme to
* dense-headed */
- d = logbat_new(TYPE_oid, BATSIZE, TRANSIENT);
+ d = logbat_new(TYPE_oid, BATSIZE, SYSTRANS);
if (d == NULL) {
GDKerror("Logger_new: cannot create dcatalog bat");
BBPunfix(b->batCacheid);
@@ -1492,7 +1492,7 @@ logger_load(const char *fn, char filenam
goto error;
}
- lg->freed = logbat_new(TYPE_int, 1, TRANSIENT);
+ lg->freed = logbat_new(TYPE_int, 1, SYSTRANS);
if (lg->freed == NULL) {
GDKerror("Logger_new: failed to create freed bat");
goto error;
@@ -1501,9 +1501,9 @@ logger_load(const char *fn, char filenam
if (snapshots_bid < 0)
goto error;
if (snapshots_bid == 0) {
- lg->snapshots_bid = logbat_new(TYPE_int, 1, TRANSIENT);
- lg->snapshots_tid = logbat_new(TYPE_int, 1, TRANSIENT);
- lg->dsnapshots = logbat_new(TYPE_oid, 1, TRANSIENT);
+ lg->snapshots_bid = logbat_new(TYPE_int, 1, SYSTRANS);
+ lg->snapshots_tid = logbat_new(TYPE_int, 1, SYSTRANS);
+ lg->dsnapshots = logbat_new(TYPE_oid, 1, SYSTRANS);
if (lg->snapshots_bid == NULL ||
lg->snapshots_tid == NULL ||
lg->dsnapshots == NULL) {
@@ -1539,7 +1539,7 @@ logger_load(const char *fn, char filenam
goto error;
BBPretain(dsnapshots);
} else {
- lg->dsnapshots = logbat_new(TYPE_oid, 1, TRANSIENT);
+ lg->dsnapshots = logbat_new(TYPE_oid, 1, SYSTRANS);
if (lg->dsnapshots == NULL) {
GDKerror("Logger_new: cannot create dsnapshot
bat");
goto error;
@@ -1686,8 +1686,8 @@ logger_new(logger *lg, const char *fn, c
.id = 1,
};
- old_lg->add = COLnew(0, TYPE_int, 0, TRANSIENT);
- old_lg->del = COLnew(0, TYPE_int, 0, TRANSIENT);
+ old_lg->add = COLnew(0, TYPE_int, 0, SYSTRANS);
+ old_lg->del = COLnew(0, TYPE_int, 0, SYSTRANS);
if (old_lg->add == NULL || old_lg->del == NULL) {
TRC_CRITICAL(GDK, "cannot allocate temporary bats\n");
goto bailout;
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -96,6 +96,9 @@ ValPtr BATsetprop_nolock(BAT *b, enum pr
gdk_return BBPcacheit(BAT *bn, bool lock)
__attribute__((__warn_unused_result__))
__attribute__((__visibility__("hidden")));
+gdk_return BBPchkfarms(void)
+ __attribute__((__warn_unused_result__))
+ __attribute__((__visibility__("hidden")));
void BBPclear(bat bid, bool lock)
__attribute__((__visibility__("hidden")));
void BBPdump(void) /* never called: for debugging only */
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -897,6 +897,9 @@ GDKinit(opt *set, int setlen, bool embed
mainpid = MT_getpid();
+ if (BBPchkfarms() != GDK_SUCCEED)
+ return GDK_FAIL;
+
if (GDKinmemory(0)) {
dbpath = dbtrace = NULL;
} else {
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]