Changeset: fc42a2970fbe for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fc42a2970fbe
Modified Files:
gdk/gdk_logger.c
gdk/gdk_logger_old.c
sql/storage/bat/bat_logger.c
sql/storage/bat/bat_storage.c
Branch: Jan2022
Log Message:
BAThash can fail (e.g. when exiting), also inside the logger.
diffs (truncated from 531 to 300 lines):
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -209,8 +209,9 @@ internal_find_bat(logger *lg, log_id id,
}
}
MT_rwlock_rdunlock(&cni.b->thashlock);
+ return 0; /* not found */
}
- return 0;
+ return -1; /* error creating hash */
}
static void
@@ -274,6 +275,9 @@ la_bat_clear(logger *lg, logaction *la,
log_bid bid = internal_find_bat(lg, la->cid, tid);
BAT *b;
+ if (bid < 0)
+ return GDK_FAIL;
+
if (lg->debug & 1)
fprintf(stderr, "#la_bat_clear %d\n", la->cid);
@@ -633,8 +637,9 @@ la_bat_update_count(logger *lg, log_id i
}
}
MT_rwlock_rdunlock(&cni.b->thashlock);
+ return GDK_SUCCEED;
}
- return GDK_SUCCEED;
+ return GDK_FAIL;
}
static gdk_return
@@ -643,6 +648,8 @@ la_bat_updates(logger *lg, logaction *la
log_bid bid = internal_find_bat(lg, la->cid, tid);
BAT *b = NULL;
+ if (bid < 0)
+ return GDK_FAIL;
if (bid == 0)
return GDK_SUCCEED; /* ignore bats no longer in the catalog */
@@ -746,6 +753,8 @@ la_bat_destroy(logger *lg, logaction *la
{
log_bid bid = internal_find_bat(lg, la->cid, tid);
+ if (bid < 0)
+ return GDK_FAIL;
if (bid && logger_del_bat(lg, bid) != GDK_SUCCEED)
return GDK_FAIL;
return GDK_SUCCEED;
@@ -2589,6 +2598,10 @@ log_bat_transient(logger *lg, log_id id)
log_bid bid = internal_find_bat(lg, id, -1);
logformat l;
+ if (bid < 0) {
+ logger_unlock(lg);
+ return GDK_FAIL;
+ }
l.flag = LOG_DESTROY;
l.id = id;
@@ -2887,6 +2900,8 @@ logger_add_bat(logger *lg, BAT *b, log_i
b == lg->seqs_val ||
b == lg->dseqs);
assert(b->batRole == PERSISTENT);
+ if (bid < 0)
+ return GDK_FAIL;
if (bid) {
if (bid != b->batCacheid) {
if (logger_del_bat(lg, bid) != GDK_SUCCEED)
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
@@ -313,6 +313,7 @@ old_logger_find_bat(old_logger *lg, cons
}
}
MT_rwlock_rdunlock(&cni.b->thashlock);
+ return 0; /* not found */
}
} else {
BATiter cni = bat_iterator_nolock(lg->catalog_oid);
@@ -331,9 +332,10 @@ old_logger_find_bat(old_logger *lg, cons
}
}
MT_rwlock_rdunlock(&cni.b->thashlock);
+ return 0; /* not found */
}
}
- return 0;
+ return -1; /* BAThash failed */
}
static gdk_return
@@ -342,6 +344,9 @@ la_bat_clear(old_logger *lg, logaction *
log_bid bid = old_logger_find_bat(lg, la->name, la->tpe, la->cid);
BAT *b;
+ if (bid < 0)
+ return GDK_FAIL;
+
if (lg->lg->debug & 1)
fprintf(stderr, "#la_bat_clear %s\n", NAME(la->name, la->tpe,
la->cid));
@@ -409,6 +414,8 @@ static log_return
log_read_updates(old_logger *lg, trans *tr, logformat *l, char *name, int tpe,
oid id, int pax)
{
log_bid bid = old_logger_find_bat(lg, name, tpe, id);
+ if (bid < 0)
+ return LOG_ERR;
BAT *b = BATdescriptor(bid);
log_return res = LOG_OK;
int ht = -1, tt = -1, tseq = 0;
@@ -625,6 +632,8 @@ la_bat_updates(old_logger *lg, logaction
log_bid bid = old_logger_find_bat(lg, la->name, la->tpe, la->cid);
BAT *b;
+ if (bid < 0)
+ return GDK_FAIL;
if (bid == 0)
return GDK_SUCCEED; /* ignore bats no longer in the catalog */
@@ -704,6 +713,8 @@ la_bat_destroy(old_logger *lg, logaction
{
log_bid bid = old_logger_find_bat(lg, la->name, la->tpe, la->cid);
+ if (bid < 0)
+ return GDK_FAIL;
if (bid) {
BUN p;
@@ -1494,6 +1505,8 @@ logger_load(const char *fn, char filenam
goto error;
}
snapshots_bid = old_logger_find_bat(lg, "snapshots_bid", 0, 0);
+ if (snapshots_bid < 0)
+ goto error;
if (snapshots_bid == 0) {
lg->snapshots_bid = logbat_new(TYPE_int, 1, TRANSIENT);
lg->snapshots_tid = logbat_new(TYPE_int, 1, TRANSIENT);
@@ -1508,6 +1521,8 @@ logger_load(const char *fn, char filenam
bat snapshots_tid = old_logger_find_bat(lg, "snapshots_tid", 0,
0);
bat dsnapshots = old_logger_find_bat(lg, "dsnapshots", 0, 0);
+ if (snapshots_tid < 0 || dsnapshots < 0)
+ goto error;
GDKdebug &= ~CHECKMASK;
lg->snapshots_bid = BATdescriptor(snapshots_bid);
if (lg->snapshots_bid == NULL) {
@@ -1924,6 +1939,8 @@ logger_add_bat(old_logger *lg, BAT *b, c
b == lg->seqs_val ||
b == lg->dseqs);
assert(b->batRole == PERSISTENT);
+ if (bid < 0)
+ return GDK_FAIL;
if (bid) {
if (bid != b->batCacheid) {
if (logger_del_bat(lg, bid) != GDK_SUCCEED)
diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c
--- a/sql/storage/bat/bat_logger.c
+++ b/sql/storage/bat/bat_logger.c
@@ -78,6 +78,14 @@ bl_preversion(sqlstore *store, int oldve
#define D(schema, table) "D_" schema "_" table
+static BAT *
+log_temp_descriptor(log_bid b)
+{
+ if (b <= 0)
+ return NULL;
+ return temp_descriptor(b);
+}
+
#if defined CATALOG_JUN2020 || defined CATALOG_OCT2020
static gdk_return
tabins(logger *lg, old_logger *old_lg, bool first, int tt, int nid, ...)
@@ -91,7 +99,7 @@ tabins(logger *lg, old_logger *old_lg, b
va_start(va, nid);
while ((cid = va_arg(va, int)) != 0) {
cval = va_arg(va, void *);
- if ((b = temp_descriptor(logger_find_bat(lg, cid))) == NULL) {
+ if ((b = log_temp_descriptor(logger_find_bat(lg, cid))) ==
NULL) {
va_end(va);
return GDK_FAIL;
}
@@ -1335,18 +1343,18 @@ upgrade(old_logger *lg)
BAT *mapold = COLnew(0, TYPE_int, 256, TRANSIENT);
BAT *mapnew = COLnew(0, TYPE_int, 256, TRANSIENT);
- bats[0].nmbat = temp_descriptor(old_logger_find_bat(lg,
"sys_schemas_name", 0, 0));
- bats[0].idbat = temp_descriptor(old_logger_find_bat(lg,
"sys_schemas_id", 0, 0));
+ bats[0].nmbat = log_temp_descriptor(old_logger_find_bat(lg,
"sys_schemas_name", 0, 0));
+ bats[0].idbat = log_temp_descriptor(old_logger_find_bat(lg,
"sys_schemas_id", 0, 0));
bats[0].parbat = NULL;
- bats[0].cands = temp_descriptor(old_logger_find_bat(lg,
"D_sys_schemas", 0, 0));
- bats[1].nmbat = temp_descriptor(old_logger_find_bat(lg,
"sys__tables_name", 0, 0));
- bats[1].idbat = temp_descriptor(old_logger_find_bat(lg,
"sys__tables_id", 0, 0));
- bats[1].parbat = temp_descriptor(old_logger_find_bat(lg,
"sys__tables_schema_id", 0, 0));
- bats[1].cands = temp_descriptor(old_logger_find_bat(lg,
"D_sys__tables", 0, 0));
- bats[2].nmbat = temp_descriptor(old_logger_find_bat(lg,
"sys__columns_name", 0, 0));
- bats[2].idbat = temp_descriptor(old_logger_find_bat(lg,
"sys__columns_id", 0, 0));
- bats[2].parbat = temp_descriptor(old_logger_find_bat(lg,
"sys__columns_table_id", 0, 0));
- bats[2].cands = temp_descriptor(old_logger_find_bat(lg,
"D_sys__columns", 0, 0));
+ bats[0].cands = log_temp_descriptor(old_logger_find_bat(lg,
"D_sys_schemas", 0, 0));
+ bats[1].nmbat = log_temp_descriptor(old_logger_find_bat(lg,
"sys__tables_name", 0, 0));
+ bats[1].idbat = log_temp_descriptor(old_logger_find_bat(lg,
"sys__tables_id", 0, 0));
+ bats[1].parbat = log_temp_descriptor(old_logger_find_bat(lg,
"sys__tables_schema_id", 0, 0));
+ bats[1].cands = log_temp_descriptor(old_logger_find_bat(lg,
"D_sys__tables", 0, 0));
+ bats[2].nmbat = log_temp_descriptor(old_logger_find_bat(lg,
"sys__columns_name", 0, 0));
+ bats[2].idbat = log_temp_descriptor(old_logger_find_bat(lg,
"sys__columns_id", 0, 0));
+ bats[2].parbat = log_temp_descriptor(old_logger_find_bat(lg,
"sys__columns_table_id", 0, 0));
+ bats[2].cands = log_temp_descriptor(old_logger_find_bat(lg,
"D_sys__columns", 0, 0));
if (mapold == NULL || mapnew == NULL)
goto bailout;
for (int i = 0; i < 3; i++) {
@@ -1451,11 +1459,11 @@ upgrade(old_logger *lg)
delidx = i;
continue;
}
- BAT *b = temp_descriptor(old_logger_find_bat(lg,
tables[i].fullname, 0, 0));
+ BAT *b = log_temp_descriptor(old_logger_find_bat(lg,
tables[i].fullname, 0, 0));
if (b == NULL)
continue;
if (delidx >= 0) {
- BAT *d = temp_descriptor(old_logger_find_bat(lg,
delname, 0, 0));
+ BAT *d = log_temp_descriptor(old_logger_find_bat(lg,
delname, 0, 0));
BAT *m = BATconstant(0, TYPE_msk, &(msk){false},
BATcount(b), PERSISTENT);
if (m == NULL) {
bat_destroy(d);
@@ -1486,7 +1494,7 @@ upgrade(old_logger *lg)
}
if (tables[i].hasids && mapold) {
BAT *b1, *b2;
- BAT *cands = temp_descriptor(old_logger_find_bat(lg,
delname, 0, 0));
+ BAT *cands =
log_temp_descriptor(old_logger_find_bat(lg, delname, 0, 0));
if (cands) {
if (BATcount(cands) == 0) {
bat_destroy(cands);
@@ -1897,7 +1905,7 @@ bl_postversion(void *Store, void *Lg)
const int *ocl; /* old eclass */
int *ncl; /* new eclass */
- te = temp_descriptor(logger_find_bat(lg, 2014)); /*
sys.types.eclass */
+ te = log_temp_descriptor(logger_find_bat(lg, 2014)); /*
sys.types.eclass */
if (te == NULL)
return GDK_FAIL;
tne = COLnew(te->hseqbase, TYPE_int, BATcount(te), PERSISTENT);
@@ -1956,7 +1964,7 @@ bl_postversion(void *Store, void *Lg)
BAT *b;
/* temp variable */
{
/* new BOOLEAN column sys.functions.semantics */
- b = temp_descriptor(logger_find_bat(lg, 2017)); /*
sys.functions.id */
+ b = log_temp_descriptor(logger_find_bat(lg, 2017)); /*
sys.functions.id */
BAT *sem = BATconstant(b->hseqbase, TYPE_bit,
&(bit){1}, BATcount(b), PERSISTENT);
bat_destroy(b);
if (sem == NULL)
@@ -1992,14 +2000,14 @@ bl_postversion(void *Store, void *Lg)
}
/* sys.functions i.e. deleted rows */
- BAT *del_funcs = temp_descriptor(logger_find_bat(lg, 2016));
+ BAT *del_funcs = log_temp_descriptor(logger_find_bat(lg, 2016));
{
/* move sql.degrees, sql.radians, sql.like and
sql.ilike functions
* from 09_like.sql and 10_math.sql script to sql_types
list */
/* sys.functions.name */
- BAT *func_func = temp_descriptor(logger_find_bat(lg,
2018));
+ BAT *func_func =
log_temp_descriptor(logger_find_bat(lg, 2018));
/* sys.functions.schema_id */
- BAT *func_schem = temp_descriptor(logger_find_bat(lg,
2026));
+ BAT *func_schem =
log_temp_descriptor(logger_find_bat(lg, 2026));
BAT *func_tid;
BAT *cands;
if (del_funcs == NULL || func_func == NULL ||
func_schem == NULL) {
@@ -2058,7 +2066,7 @@ bl_postversion(void *Store, void *Lg)
* sql.null, sql.all, sql.zero_or_one and
sql.not_unique */
BAT *func_tid = BATmaskedcands(0, BATcount(del_funcs),
del_funcs, false);
/* sys.functions.mod */
- BAT *func_mod = temp_descriptor(logger_find_bat(lg,
2020));
+ BAT *func_mod = log_temp_descriptor(logger_find_bat(lg,
2020));
bat_destroy(del_funcs);
if (func_tid == NULL || func_mod == NULL) {
bat_destroy(func_tid);
@@ -2074,7 +2082,7 @@ bl_postversion(void *Store, void *Lg)
return GDK_FAIL;
}
/* sys.functions.type */
- BAT *func_type = temp_descriptor(logger_find_bat(lg,
2022));
+ BAT *func_type =
log_temp_descriptor(logger_find_bat(lg, 2022));
if (func_type == NULL) {
bat_destroy(func_mod);
bat_destroy(sqlfunc);
@@ -2090,7 +2098,7 @@ bl_postversion(void *Store, void *Lg)
}
/* sys.functions.func */
- BAT *func_func = temp_descriptor(logger_find_bat(lg,
2019));
+ BAT *func_func =
log_temp_descriptor(logger_find_bat(lg, 2019));
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]