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