Changeset: aadda6695eaf for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/aadda6695eaf
Modified Files:
        sql/storage/store.c
Branch: iso
Log Message:

merged with jul2021


diffs (224 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -393,10 +393,10 @@ recover_dir(int farmid, bool direxists)
                /* just try; don't care about these non-vital files */
                if (GDKunlink(farmid, BATDIR, "BBP", "bak") != GDK_SUCCEED)
                        TRC_WARNING(GDK, "unlink of BBP.bak failed\n");
-               if (GDKmove(farmid, BATDIR, "BBP", "dir", BATDIR, "BBP", "bak") 
!= GDK_SUCCEED)
+               if (GDKmove(farmid, BATDIR, "BBP", "dir", BATDIR, "BBP", "bak", 
false) != GDK_SUCCEED)
                        TRC_WARNING(GDK, "rename of BBP.dir to BBP.bak 
failed\n");
        }
-       return GDKmove(farmid, BAKDIR, "BBP", "dir", BATDIR, "BBP", "dir");
+       return GDKmove(farmid, BAKDIR, "BBP", "dir", BATDIR, "BBP", "dir", 
true);
 }
 
 static gdk_return BBPrecover(int farmid);
@@ -1088,7 +1088,7 @@ BBPinit(void)
                                        GDKfree(backupbbpdirstr);
                                        goto bailout;
                                }
-                       } else if (GDKmove(0, BATDIR, "BBP", "bak", BATDIR, 
"BBP", "dir") == GDK_SUCCEED)
+                       } else if (GDKmove(0, BATDIR, "BBP", "bak", BATDIR, 
"BBP", "dir", true) == GDK_SUCCEED)
                                TRC_DEBUG(IO_, "reverting to dir saved in 
BBP.bak.\n");
 
                        if ((fp = GDKfilelocate(0, "BBP", "r", "dir")) == NULL) 
{
@@ -2718,7 +2718,7 @@ dirty_bat(bat *i, bool subcommit)
 static gdk_return
 file_move(int farmid, const char *srcdir, const char *dstdir, const char 
*name, const char *ext)
 {
-       if (GDKmove(farmid, srcdir, name, ext, dstdir, name, ext) == 
GDK_SUCCEED) {
+       if (GDKmove(farmid, srcdir, name, ext, dstdir, name, ext, true) == 
GDK_SUCCEED) {
                return GDK_SUCCEED;
        } else {
                char *path;
@@ -2864,7 +2864,7 @@ BBPprepare(bool subcommit)
        }
        if (ret == GDK_SUCCEED && backup_dir != set) {
                /* a valid backup dir *must* at least contain BBP.dir */
-               if ((ret = GDKmove(0, backup_dir ? BAKDIR : BATDIR, "BBP", 
"dir", subcommit ? SUBDIR : BAKDIR, "BBP", "dir")) == GDK_SUCCEED) {
+               if ((ret = GDKmove(0, backup_dir ? BAKDIR : BATDIR, "BBP", 
"dir", subcommit ? SUBDIR : BAKDIR, "BBP", "dir", true)) == GDK_SUCCEED) {
                        backup_dir = set;
                }
        }
@@ -3294,7 +3294,7 @@ force_move(int farmid, const char *srcdi
                return ret;
        }
        /* try to rename it */
-       ret = GDKmove(farmid, srcdir, name, NULL, dstdir, name, NULL);
+       ret = GDKmove(farmid, srcdir, name, NULL, dstdir, name, NULL, false);
 
        if (ret != GDK_SUCCEED) {
                char *srcpath;
@@ -3312,7 +3312,7 @@ force_move(int farmid, const char *srcdi
                TRC_DEBUG(IO_, "remove %s = %d\n", dstpath, (int) ret);
 
                (void) GDKcreatedir(dstdir); /* if fails, move will fail */
-               ret = GDKmove(farmid, srcdir, name, NULL, dstdir, name, NULL);
+               ret = GDKmove(farmid, srcdir, name, NULL, dstdir, name, NULL, 
true);
                TRC_DEBUG(IO_, "link %s %s = %d\n", srcpath, dstpath, (int) 
ret);
                GDKfree(dstpath);
                GDKfree(srcpath);
@@ -3467,7 +3467,7 @@ BBPrecover_subdir(void)
        while ((dent = readdir(dirp)) != NULL) {
                if (dent->d_name[0] == '.')
                        continue;
-               ret = GDKmove(0, SUBDIR, dent->d_name, NULL, BAKDIR, 
dent->d_name, NULL);
+               ret = GDKmove(0, SUBDIR, dent->d_name, NULL, BAKDIR, 
dent->d_name, NULL, true);
                if (ret == GDK_SUCCEED && strcmp(dent->d_name, "BBP.dir") == 0)
                        backup_dir = 1;
                if (ret != GDK_SUCCEED)
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -496,7 +496,7 @@ GDKupgradevarheap(BAT *b, var_t v, BUN c
                if (exists == 0 &&
                    (old->storage != STORE_MEM ||
                     GDKmove(old->farmid, BATDIR, old->filename, NULL,
-                            BAKDIR, filename, NULL) != GDK_SUCCEED)) {
+                            BAKDIR, filename, NULL, false) != GDK_SUCCEED)) {
                        int fd;
                        ssize_t ret = 0;
                        size_t size = n << b->tshift;
@@ -531,7 +531,7 @@ GDKupgradevarheap(BAT *b, var_t v, BUN c
                        }
                        /* move tmp file to backup directory (without .tmp
                         * extension) */
-                       if (GDKmove(old->farmid, BATDIR, old->filename, "tmp", 
BAKDIR, filename, NULL) != GDK_SUCCEED) {
+                       if (GDKmove(old->farmid, BATDIR, old->filename, "tmp", 
BAKDIR, filename, NULL, true) != GDK_SUCCEED) {
                                /* backup failed */
                                GDKunlink(old->farmid, BATDIR, old->filename, 
"tmp");
                                return GDK_FAIL;
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1669,7 +1669,7 @@ logger_load(int debug, const char *fn, c
                        fclose(fp);
                        fp = NULL;
                        if (GDKunlink(0, lg->dir, LOGFILE, NULL) != GDK_SUCCEED 
||
-                           GDKmove(0, lg->dir, LOGFILE, "bak", lg->dir, 
LOGFILE, NULL) != GDK_SUCCEED)
+                           GDKmove(0, lg->dir, LOGFILE, "bak", lg->dir, 
LOGFILE, NULL, true) != GDK_SUCCEED)
                                goto error;
                } else if (errno != ENOENT) {
                        GDKsyserror("open %s failed", bak);
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
@@ -1750,7 +1750,7 @@ old_logger_destroy(old_logger *lg)
            BBPrename(lg->lg->dcatalog->batCacheid, bak) < 0) {
                return GDK_FAIL;
        }
-       if (GDKmove(0, lg->lg->dir, LOGFILE, NULL, lg->lg->dir, LOGFILE, "bak") 
!= GDK_SUCCEED) {
+       if (GDKmove(0, lg->lg->dir, LOGFILE, NULL, lg->lg->dir, LOGFILE, "bak", 
true) != GDK_SUCCEED) {
                TRC_CRITICAL(GDK, "logger_destroy failed\n");
                return GDK_FAIL;
        }
@@ -1765,7 +1765,7 @@ old_logger_destroy(old_logger *lg)
                return GDK_FAIL;
        }
        snprintf(bak, sizeof(bak), "bak-" LLFMT, lg->id);
-       if (GDKmove(0, lg->lg->dir, LOGFILE, "bak", lg->lg->dir, LOGFILE, bak) 
!= GDK_SUCCEED) {
+       if (GDKmove(0, lg->lg->dir, LOGFILE, "bak", lg->lg->dir, LOGFILE, bak, 
true) != GDK_SUCCEED) {
                TRC_CRITICAL(GDK, "logger_destroy failed\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
@@ -145,7 +145,7 @@ char *GDKload(int farmid, const char *nm
 void GDKlog(_In_z_ _Printf_format_string_ FILE * fl, const char *format, ...)
        __attribute__((__format__(__printf__, 2, 3)))
        __attribute__((__visibility__("hidden")));
-gdk_return GDKmove(int farmid, const char *dir1, const char *nme1, const char 
*ext1, const char *dir2, const char *nme2, const char *ext2)
+gdk_return GDKmove(int farmid, const char *dir1, const char *nme1, const char 
*ext1, const char *dir2, const char *nme2, const char *ext2, bool report)
        __attribute__((__warn_unused_result__))
        __attribute__((__visibility__("hidden")));
 void *GDKmremap(const char *path, int mode, void *old_address, size_t 
old_size, size_t *new_size)
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -315,7 +315,7 @@ GDKunlink(int farmid, const char *dir, c
  * A move routine is overloaded to deal with extensions.
  */
 gdk_return
-GDKmove(int farmid, const char *dir1, const char *nme1, const char *ext1, 
const char *dir2, const char *nme2, const char *ext2)
+GDKmove(int farmid, const char *dir1, const char *nme1, const char *ext1, 
const char *dir2, const char *nme2, const char *ext2, bool report)
 {
        char *path1;
        char *path2;
@@ -329,7 +329,7 @@ GDKmove(int farmid, const char *dir1, co
        path2 = GDKfilepath(farmid, dir2, nme2, ext2);
        if (path1 && path2) {
                ret = MT_rename(path1, path2);
-               if (ret < 0)
+               if (ret < 0 && report)
                        GDKsyserror("cannot rename %s to %s\n", path1, path2);
 
                TRC_DEBUG(IO_, "Move %s %s = %d (%dms)\n", path1, path2, ret, 
GDKms() - t0);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -44,18 +44,10 @@ store_transaction_id(sqlstore *store)
        return tid;
 }
 
-static ulng
-store_oldest_given_max(sqlstore *store, ulng commit_ts)
-{
-       if (ATOMIC_GET(&store->nr_active) <= 1)
-               return commit_ts;
-       return store->oldest;
-}
-
 ulng
 store_oldest(sqlstore *store)
 {
-       return store_oldest_given_max(store, TRANSACTION_ID_BASE);
+       return store->oldest;
 }
 
 static ulng
@@ -1994,7 +1986,6 @@ store_apply_deltas(sqlstore *store)
        return res;
 }
 
-
 void
 store_suspend_log(sqlstore *store)
 {
@@ -3401,7 +3392,7 @@ sql_trans_commit(sql_trans *tr)
        sqlstore *store = tr->store;
        store_lock(store);
        ulng commit_ts = tr->parent ? tr->parent->tid : store_timestamp(store);
-       ulng oldest = store_oldest_given_max(store, commit_ts);
+       ulng oldest = store_oldest(store);
 
        if (tr->predicates && !sql_trans_valid(tr))
                        return LOG_ERR;
@@ -3409,6 +3400,7 @@ sql_trans_commit(sql_trans *tr)
        /* write phase */
        TRC_DEBUG(SQL_STORE, "Forwarding changes (" ULLFMT ", " ULLFMT ") -> " 
ULLFMT "\n", tr->tid, tr->ts, commit_ts);
        store_pending_changes(store, oldest);
+       oldest = store_oldest_pending(store);
        if (tr->changes) {
                int min_changes = GDKdebug & FORCEMITOMASK ? 5 : 100000;
                int flush = (tr->logchanges > min_changes && !store->changes);
@@ -3422,7 +3414,6 @@ sql_trans_commit(sql_trans *tr)
                                if (c->log && ok == LOG_OK)
                                        ok = c->log(tr, c);
                        }
-                       //saved_id = store->logger_api.log_save_id(store);
                        if (ok == LOG_OK && store->prev_oid != store->obj_id)
                                ok = store->logger_api.log_sequence(store, 
OBJ_SID, store->obj_id);
                        store->prev_oid = store->obj_id;
@@ -3431,6 +3422,10 @@ sql_trans_commit(sql_trans *tr)
                }
                tr->logchanges = 0;
                /* apply committed changes */
+               if (ATOMIC_GET(&store->nr_active) == 1) {
+                       oldest = commit_ts;
+                       store_pending_changes(store, oldest);
+               }
                for(node *n=tr->changes->h; n && ok == LOG_OK; n = n->next) {
                        sql_change *c = n->data;
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to