Changeset: 65fa881c74b6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=65fa881c74b6
Removed Files:
        monetdb5/modules/kernel/logger.c
        monetdb5/modules/kernel/logger.mal
        sql/storage/bat/nop_logger.c
        sql/storage/bat/nop_logger.h
Modified Files:
        clients/Tests/exports.stable.out
        gdk/gdk_bbp.c
        gdk/gdk_logger.c
        gdk/gdk_logger.h
        gdk/gdk_tm.c
        monetdb5/mal/mal.c
        monetdb5/mal/mal_authorize.c
        monetdb5/mal/mal_profiler.c
        monetdb5/mal/mal_session.c
        monetdb5/modules/kernel/Makefile.ag
        monetdb5/modules/mal/mal_mapi.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_scenario.c
        sql/storage/bat/Makefile.ag
        sql/storage/store.c
        tools/mserver/mserver5.c
Branch: default
Log Message:

merged


diffs (truncated from 1318 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
@@ -443,7 +443,6 @@ gdk_return logger_del_bat(logger *lg, lo
 void logger_destroy(logger *lg);
 gdk_return logger_exit(logger *lg);
 log_bid logger_find_bat(logger *lg, const char *name, char tpe, oid id);
-lng logger_read_last_transaction_id(logger *lg, char *dir, char *logger_file, 
role_t role);
 gdk_return logger_reload(logger *lg);
 gdk_return logger_restart(logger *lg);
 int logger_sequence(logger *lg, int seq, lng *id);
@@ -2340,8 +2339,6 @@ str listRef;
 str loadLibrary(str modulename, int flag);
 char *locate_file(const char *basename, const char *ext, bit recurse);
 str lockRef;
-str logger_create_wrap(logger *L, int *debug, str *fn, str *dirname, int 
*version);
-str logger_destroy_wrap(void *ret, logger *L);
 str lookupRef;
 str mal2str(MalBlkPtr mb, int first, int last);
 int malAtomSize(int size, const char *name);
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1043,6 +1043,13 @@ BBPaddfarm(const char *dirname, int role
        struct stat st;
        int i;
 
+       if (dirname == NULL) {
+               assert(BBPfarms[0].dirname == NULL);
+               assert(rolemask & 1);
+               assert(BBPfarms[0].roles == 0);
+               BBPfarms[0].roles = rolemask;
+               return GDK_SUCCEED;
+       }
        if (strchr(dirname, '\n') != NULL) {
                GDKerror("BBPaddfarm: no newline allowed in directory name\n");
                return GDK_FAIL;
@@ -1118,12 +1125,7 @@ BBPinit(void)
        unsigned bbpversion = 0;
        int i;
 
-       if (GDKinmemory()) {
-               if (BBPaddfarm(".", 1 << PERSISTENT) != GDK_SUCCEED ||
-                   BBPaddfarm(".", 1 << TRANSIENT) != GDK_SUCCEED) {
-                       return GDK_FAIL;
-               }
-       } else {
+       if (!GDKinmemory()) {
                str bbpdirstr, backupbbpdirstr;
 
                if (!(bbpdirstr = GDKfilepath(0, BATDIR, "BBP", "dir"))) {
@@ -1195,7 +1197,9 @@ BBPinit(void)
        memset(BBP, 0, sizeof(BBP));
        ATOMIC_SET(&BBPsize, 1);
 
-       if (!GDKinmemory()) {
+       if (GDKinmemory()) {
+               bbpversion = GDKLIBRARY;
+       } else {
                bbpversion = BBPheader(fp);
                if (bbpversion == 0)
                        return GDK_FAIL;
@@ -2350,7 +2354,7 @@ decref(bat i, bool logical, bool release
         * if they have been made cold or are not dirty */
        if (BBP_refs(i) > 0 ||
            (BBP_lrefs(i) > 0 &&
-            (b == NULL || BATdirty(b) || !(BBP_status(i) & BBPPERSISTENT)))) {
+            (b == NULL || BATdirty(b) || !(BBP_status(i) & BBPPERSISTENT) || 
GDKinmemory()))) {
                /* bat cannot be swapped out */
        } else if (b ? b->batSharecnt == 0 : (BBP_status(i) & BBPTMP)) {
                /* bat will be unloaded now. set the UNLOADING bit
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -187,6 +187,7 @@ logbat_new(int tt, BUN size, role_t role
 static int
 log_read_format(logger *l, logformat *data)
 {
+       assert(!l->inmemory);
        return mnstr_read(l->log, &data->flag, 1, 1) == 1 &&
                mnstr_readLng(l->log, &data->nr) == 1 &&
                mnstr_readInt(l->log, &data->tid) == 1;
@@ -195,6 +196,7 @@ log_read_format(logger *l, logformat *da
 static gdk_return
 log_write_format(logger *l, logformat *data)
 {
+       assert(!l->inmemory);
        if (mnstr_write(l->log, &data->flag, 1, 1) == 1 &&
            mnstr_writeLng(l->log, data->nr) &&
            mnstr_writeInt(l->log, data->tid))
@@ -210,6 +212,7 @@ log_read_string(logger *l)
        ssize_t nr;
        char *buf;
 
+       assert(!l->inmemory);
        if (mnstr_readInt(l->log, &len) != 1) {
                fprintf(stderr, "!ERROR: log_read_string: read failed\n");
 //MK This leads to non-repeatable log structure?
@@ -239,6 +242,7 @@ log_write_string(logger *l, const char *
 {
        size_t len = strlen(n) + 1;     /* log including EOS */
 
+       assert(!l->inmemory);
        assert(len > 1);
        assert(len <= INT_MAX);
        if (!mnstr_writeInt(l->log, (int) len) ||
@@ -312,6 +316,7 @@ log_read_seq(logger *lg, logformat *l)
        lng val;
        BUN p;
 
+       assert(!lg->inmemory);
        assert(l->nr <= (lng) INT_MAX);
        if (mnstr_readLng(lg->log, &val) != 1) {
                fprintf(stderr, "!ERROR: log_read_seq: read failed\n");
@@ -339,6 +344,7 @@ static gdk_return
 log_write_id(logger *l, char tpe, oid id)
 {
        lng lid = id;
+       assert(!l->inmemory);
        assert(lid >= 0);
        if (mnstr_writeChr(l->log, tpe) &&
            mnstr_writeLng(l->log, lid))
@@ -352,6 +358,7 @@ log_read_id(logger *lg, char *tpe, oid *
 {
        lng lid;
 
+       assert(!lg->inmemory);
        if (mnstr_readChr(lg->log, tpe) != 1 ||
            mnstr_readLng(lg->log, &lid) != 1) {
                fprintf(stderr, "!ERROR: log_read_id: read failed\n");
@@ -368,6 +375,7 @@ fltRead(void *dst, stream *s, size_t cnt
        flt *ptr;
        size_t i;
 
+       assert(!GDKinmemory());
        if ((ptr = BATatoms[TYPE_flt].atomRead(dst, s, cnt)) == NULL)
                return NULL;
        for (i = 0; i < cnt; i++)
@@ -382,6 +390,7 @@ dblRead(void *dst, stream *s, size_t cnt
        dbl *ptr;
        size_t i;
 
+       assert(!GDKinmemory());
        if ((ptr = BATatoms[TYPE_dbl].atomRead(dst, s, cnt)) == NULL)
                return NULL;
        for (i = 0; i < cnt; i++)
@@ -396,6 +405,7 @@ mbrRead(void *dst, stream *s, size_t cnt
        /* an MBR consists of 4 flt values; here we don't care about
         * anything else, we just need to convert the old NIL to NaN
         * for all those values */
+       assert(!GDKinmemory());
        return fltRead(dst, s, cnt * 4);
 }
 #endif
@@ -408,6 +418,7 @@ log_read_updates(logger *lg, trans *tr, 
        log_return res = LOG_OK;
        int ht = -1, tt = -1, tseq = 0;
 
+       assert(!lg->inmemory);
        if (lg->debug & 1)
                fprintf(stderr, "#logger found log_read_updates %s %s " LLFMT 
"\n", name, l->flag == LOG_INSERT ? "insert" : "update", l->nr);
 
@@ -637,6 +648,7 @@ static log_return
 log_read_destroy(logger *lg, trans *tr, char *name, char tpe, oid id)
 {
        (void) lg;
+       assert(!lg->inmemory);
        if (tr_grow(tr) == GDK_SUCCEED) {
                tr->changes[tr->nr].type = LOG_DESTROY;
                tr->changes[tr->nr].tpe = tpe;
@@ -684,7 +696,7 @@ log_read_create(logger *lg, trans *tr, c
        int ht, tt;
        char *ha, *ta;
 
-
+       assert(!lg->inmemory);
        if (lg->debug & 1)
                fprintf(stderr, "#log_read_create %s\n", name);
 
@@ -750,6 +762,8 @@ static log_return
 log_read_use(logger *lg, trans *tr, logformat *l, char *name, char tpe, oid id)
 {
        (void) lg;
+
+       assert(!lg->inmemory);
        if (tr_grow(tr) != GDK_SUCCEED)
                return LOG_ERR;
        tr->changes[tr->nr].type = LOG_USE;
@@ -960,6 +974,10 @@ logger_open(logger *lg)
        char id[BUFSIZ];
        char *filename;
 
+       if (lg->inmemory) {
+               lg->end = 0;
+               return GDK_SUCCEED;
+       }
        snprintf(id, sizeof(id), LLFMT, lg->id);
        filename = GDKfilepath(BBPselectfarm(PERSISTENT, 0, offheap), lg->dir, 
LOGFILE, id);
 
@@ -982,7 +1000,8 @@ logger_open(logger *lg)
 static void
 logger_close(logger *lg)
 {
-       close_stream(lg->log);
+       if (!lg->inmemory)
+               close_stream(lg->log);
        lg->log = NULL;
 }
 
@@ -997,6 +1016,7 @@ logger_readlog(logger *lg, char *filenam
        int dbg = GDKdebug;
        int fd;
 
+       assert(!lg->inmemory);
        GDKdebug &= ~(CHECKMASK|PROPMASK);
 
        if (lg->debug & 1) {
@@ -1224,6 +1244,7 @@ logger_readlogs(logger *lg, FILE *fp, ch
        char id[BUFSIZ];
        int len;
 
+       assert(!lg->inmemory);
        if (lg->debug & 1) {
                fprintf(stderr, "#logger_readlogs logger id is " LLFMT "\n", 
lg->id);
        }
@@ -1295,6 +1316,7 @@ check_version(logger *lg, FILE *fp)
 {
        int version = 0;
 
+       assert(!lg->inmemory);
        if (fscanf(fp, "%6d", &version) != 1) {
                GDKerror("Could not read the version number from the file 
'%s/log'.\n",
                         lg->dir);
@@ -1560,14 +1582,16 @@ logger_load(int debug, const char *fn, c
        bool needcommit = false;
        int dbg = GDKdebug;
 
-       if(!(filenamestr = GDKfilepath(farmid, lg->dir, LOGFILE, NULL)))
-               goto error;
-       snprintf(filename, FILENAME_MAX, "%s", filenamestr);
-       len = snprintf(bak, sizeof(bak), "%s.bak", filename);
-       GDKfree(filenamestr);
-       if (len == -1 || len >= FILENAME_MAX) {
-               GDKerror("Logger filename path is too large\n");
-               goto error;
+       if (!lg->inmemory) {
+               if ((filenamestr = GDKfilepath(farmid, lg->dir, LOGFILE, NULL)) 
== NULL)
+                       goto error;
+               snprintf(filename, FILENAME_MAX, "%s", filenamestr);
+               len = snprintf(bak, sizeof(bak), "%s.bak", filename);
+               GDKfree(filenamestr);
+               if (len == -1 || len >= FILENAME_MAX) {
+                       GDKerror("Logger filename path is too large\n");
+                       goto error;
+               }
        }
 
        lg->catalog_bid = NULL;
@@ -1583,17 +1607,19 @@ logger_load(int debug, const char *fn, c
        lg->seqs_val = NULL;
        lg->dseqs = NULL;
 
-       /* try to open logfile backup, or failing that, the file
-        * itself. we need to know whether this file exists when
-        * checking the database consistency later on */
-       if ((fp = fopen(bak, "r")) != NULL) {
-               fclose(fp);
-               fp = NULL;
-               if (GDKunlink(farmid, lg->dir, LOGFILE, NULL) != GDK_SUCCEED ||
-                   GDKmove(farmid, lg->dir, LOGFILE, "bak", lg->dir, LOGFILE, 
NULL) != GDK_SUCCEED)
-                       goto error;
+       if (!lg->inmemory) {
+               /* try to open logfile backup, or failing that, the file
+                * itself. we need to know whether this file exists when
+                * checking the database consistency later on */
+               if ((fp = fopen(bak, "r")) != NULL) {
+                       fclose(fp);
+                       fp = NULL;
+                       if (GDKunlink(farmid, lg->dir, LOGFILE, NULL) != 
GDK_SUCCEED ||
+                           GDKmove(farmid, lg->dir, LOGFILE, "bak", lg->dir, 
LOGFILE, NULL) != GDK_SUCCEED)
+                               goto error;
+               }
+               fp = fopen(filename, "r");
        }
-       fp = fopen(filename, "r");
 
        stpconcat(bak, fn, "_catalog", NULL);
        bid = BBPindex(bak);
@@ -1661,41 +1687,43 @@ logger_load(int debug, const char *fn, c
                        goto error;
                }
 
-               if (GDKcreatedir(filename) != GDK_SUCCEED) {
-                       GDKerror("logger_load: cannot create directory for log 
file %s\n",
-                                filename);
-                       goto error;
-               }
-               if ((fp = fopen(filename, "w")) == NULL) {
-                       GDKerror("logger_load: cannot create log file %s\n",
-                                filename);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to