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 -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to