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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list