Changeset: a786271f0781 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a786271f0781
Modified Files:
sql/backends/monet5/sql.c
Branch: default
Log Message:
Merge with Jul2021 branch.
diffs (truncated from 697 to 300 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);
@@ -2017,7 +2017,9 @@ logger_destroy(logger *lg)
if (LOG_DISABLED(lg)) {
lg->saved_id = lg->id;
lg->saved_tid = lg->tid;
+ logger_lock(lg);
logger_commit(lg);
+ logger_unlock(lg);
}
if (lg->catalog_bid) {
logger_lock(lg);
@@ -2120,9 +2122,10 @@ logger_flush(logger *lg, ulng ts)
lg->saved_tid = lg->tid;
if (lid)
logger_cleanup_range(lg);
- if (logger_commit(lg) != GDK_SUCCEED) {
+ logger_lock(lg);
+ if (logger_commit(lg) != GDK_SUCCEED)
TRC_ERROR(GDK, "failed to commit");
- }
+ logger_unlock(lg);
return GDK_SUCCEED;
}
if (lg->saved_id >= lid)
@@ -2547,7 +2550,10 @@ log_tend(logger *lg, ulng commit_ts)
l.id = lg->tid;
if (lg->flushnow) {
lg->flushnow = 0;
- return logger_commit(lg);
+ logger_lock(lg);
+ gdk_return res = logger_commit(lg);
+ logger_unlock(lg);
+ return res;
}
if (lg->current) {
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/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1277,7 +1277,7 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb
sql_table *t = mvc_bind_table(m, s, tname);
sql_column *c = mvc_bind_column(m, t, cname);
b = mvc_bind(m, sname, tname, cname, access);
- if (b && b->ttype != coltype) {
+ if (b && b->ttype && b->ttype != coltype) {
BBPunfix(b->batCacheid);
throw(SQL,"sql.bind",SQLSTATE(42000) "Column type mismatch");
}
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -32,7 +32,7 @@ static int tc_gc_col( sql_store Store, s
static int tc_gc_idx( sql_store Store, sql_change *c, ulng oldest);
static int tc_gc_del( sql_store Store, sql_change *c, ulng oldest);
-static int tr_merge_delta( sql_trans *tr, sql_delta *obat);
+static int merge_delta( sql_delta *obat);
/* valid
* !deleted && VALID_4_READ(TS, tr) existing or
newly created segment
@@ -1798,7 +1798,7 @@ static int
commit_create_col_( sql_trans *tr, sql_column *c, ulng commit_ts, ulng oldest)
{
int ok = LOG_OK;
- (void)oldest;
+ (void)tr; (void)oldest;
if(!isTempTable(c->t)) {
sql_delta *delta = ATOMIC_PTR_GET(&c->data);
@@ -1807,7 +1807,7 @@ commit_create_col_( sql_trans *tr, sql_c
assert(delta->next == NULL);
if (!delta->cs.alter)
- ok = tr_merge_delta(tr, delta);
+ ok = merge_delta(delta);
delta->cs.alter = 0;
c->base.flags = 0;
}
@@ -1898,7 +1898,7 @@ static int
commit_create_idx_( sql_trans *tr, sql_idx *i, ulng commit_ts, ulng oldest)
{
int ok = LOG_OK;
- (void)oldest;
+ (void)tr; (void)oldest;
if(!isTempTable(i->t)) {
sql_delta *delta = ATOMIC_PTR_GET(&i->data);
@@ -1906,7 +1906,7 @@ commit_create_idx_( sql_trans *tr, sql_i
delta->cs.ts = commit_ts;
assert(delta->next == NULL);
- ok = tr_merge_delta(tr, delta);
+ ok = merge_delta(delta);
i->base.flags = 0;
}
return ok;
@@ -2297,13 +2297,13 @@ drop_idx(sql_trans *tr, sql_idx *i)
static BUN
-clear_cs(sql_trans *tr, column_storage *cs)
+clear_cs(sql_trans *tr, column_storage *cs, bool renew)
{
BAT *b;
BUN sz = 0;
(void)tr;
- if (cs->bid) {
+ if (cs->bid && renew) {
b = temp_descriptor(cs->bid);
if (b) {
sz += BATcount(b);
@@ -2335,34 +2335,34 @@ clear_cs(sql_trans *tr, column_storage *
}
static BUN
-clear_col(sql_trans *tr, sql_column *c)
+clear_col(sql_trans *tr, sql_column *c, bool renew)
{
bool update_conflict = false;
sql_delta *delta, *odelta = ATOMIC_PTR_GET(&c->data);
- if ((delta = bind_col_data(tr, c, &update_conflict)) == NULL)
+ if ((delta = bind_col_data(tr, c, renew?&update_conflict:NULL)) == NULL)
return update_conflict ? LOG_CONFLICT : LOG_ERR;
if ((!inTransaction(tr, c->t) && (odelta != delta || isTempTable(c->t))
&& isGlobal(c->t)) || (!isNew(c->t) && isLocalTemp(c->t)))
trans_add(tr, &c->base, delta, &tc_gc_col, &commit_update_col,
isLocalTemp(c->t)?NULL:&log_update_col);
if (delta)
- return clear_cs(tr, &delta->cs);
+ return clear_cs(tr, &delta->cs, renew);
return 0;
}
static BUN
-clear_idx(sql_trans *tr, sql_idx *i)
+clear_idx(sql_trans *tr, sql_idx *i, bool renew)
{
bool update_conflict = false;
sql_delta *delta, *odelta = ATOMIC_PTR_GET(&i->data);
if (!isTable(i->t) || (hash_index(i->type) && list_length(i->columns)
<= 1) || !idx_has_column(i->type))
return 0;
- if ((delta = bind_idx_data(tr, i, &update_conflict)) == NULL)
+ if ((delta = bind_idx_data(tr, i, renew?&update_conflict:NULL)) == NULL)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list