Changeset: 95564bcb3d6a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/95564bcb3d6a
Modified Files:
gdk/gdk_logger.c
Branch: Dec2023
Log Message:
Make sure we get a log message when processing the WAL encounters a hitch.
diffs (truncated from 434 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
@@ -214,12 +214,17 @@ logbat_new(int tt, BUN size, role_t role
return nb;
}
-static int
+static bool
log_read_format(logger *lg, logformat *data)
{
assert(!lg->inmemory);
- return mnstr_read(lg->input_log, &data->flag, 1, 1) == 1 &&
- mnstr_readInt(lg->input_log, &data->id) == 1;
+ if (mnstr_read(lg->input_log, &data->flag, 1, 1) == 1) {
+ if (mnstr_readInt(lg->input_log, &data->id) == 1)
+ return true;
+ /* could only read part, so complain */
+ TRC_CRITICAL(GDK, "read failed\n");
+ }
+ return false;
}
static gdk_return
@@ -254,17 +259,23 @@ log_read_seq(logger *lg, logformat *l)
if ((p = log_find(lg->seqs_id, lg->dseqs, seq)) != BUN_NONE &&
p >= lg->seqs_id->batInserted) {
assert(lg->seqs_val->hseqbase == 0);
- if (BUNreplace(lg->seqs_val, p, &val, true) != GDK_SUCCEED)
+ if (BUNreplace(lg->seqs_val, p, &val, true) != GDK_SUCCEED) {
+ TRC_CRITICAL(GDK, "replace of %s_seqs_val failed\n",
lg->fn);
return LOG_ERR;
+ }
} else {
if (p != BUN_NONE) {
oid pos = p;
- if (BUNappend(lg->dseqs, &pos, true) != GDK_SUCCEED)
+ if (BUNappend(lg->dseqs, &pos, true) != GDK_SUCCEED) {
+ TRC_CRITICAL(GDK, "append to %s_dseqs
failed\n", lg->fn);
return LOG_ERR;
+ }
}
if (BUNappend(lg->seqs_id, &seq, true) != GDK_SUCCEED ||
- BUNappend(lg->seqs_val, &val, true) != GDK_SUCCEED)
+ BUNappend(lg->seqs_val, &val, true) != GDK_SUCCEED) {
+ TRC_CRITICAL(GDK, "append to %s_seqs_val/id failed\n",
lg->fn);
return LOG_ERR;
+ }
}
return LOG_OK;
}
@@ -303,19 +314,25 @@ string_reader(logger *lg, BAT *b, lng nr
log_return res = LOG_OK;
while (nr && res == LOG_OK) {
- if (mnstr_readLng(lg->input_log, &SZ) != 1)
+ if (mnstr_readLng(lg->input_log, &SZ) != 1) {
+ TRC_CRITICAL(GDK, "read failed\n");
return LOG_EOF;
+ }
sz = (size_t) SZ;
char *buf = lg->rbuf;
if (lg->rbufsize < sz) {
- if (!(buf = GDKrealloc(lg->rbuf, sz)))
+ if (!(buf = GDKrealloc(lg->rbuf, sz))) {
+ TRC_CRITICAL(GDK, "couldn't grow string
buffer\n");
return LOG_ERR;
+ }
lg->rbuf = buf;
lg->rbufsize = sz;
}
- if (mnstr_read(lg->input_log, buf, sz, 1) != 1)
+ if (mnstr_read(lg->input_log, buf, sz, 1) != 1) {
+ TRC_CRITICAL(GDK, "read failed\n");
return LOG_EOF;
+ }
/* handle strings */
char *t = buf;
/* chunked */
@@ -327,8 +344,10 @@ string_reader(logger *lg, BAT *b, lng nr
strings[cur++] = t;
if (cur == CHUNK_SIZE &&
b &&
- BUNappendmulti(b, strings, cur, true) !=
GDK_SUCCEED)
+ BUNappendmulti(b, strings, cur, true) !=
GDK_SUCCEED) {
+ TRC_CRITICAL(GDK, "append to string bat
failed\n");
res = LOG_ERR;
+ }
if (cur == CHUNK_SIZE)
cur = 0;
/* find next */
@@ -338,8 +357,10 @@ string_reader(logger *lg, BAT *b, lng nr
}
if (cur &&
b &&
- BUNappendmulti(b, strings, cur, true) != GDK_SUCCEED)
+ BUNappendmulti(b, strings, cur, true) != GDK_SUCCEED) {
+ TRC_CRITICAL(GDK, "append to string bat failed\n");
res = LOG_ERR;
+ }
}
return res;
}
@@ -363,8 +384,10 @@ log_read_updates(logger *lg, trans *tr,
TRC_DEBUG(WAL, "found %d %s", id, l->flag == LOG_UPDATE ? "update" :
"update_buld");
if (mnstr_readLng(lg->input_log, &nr) != 1 ||
- mnstr_read(lg->input_log, &type_id, 1, 1) != 1)
- return LOG_ERR;
+ mnstr_read(lg->input_log, &type_id, 1, 1) != 1) {
+ TRC_CRITICAL(GDK, "read failed\n");
+ return LOG_EOF;
+ }
pnr = nr;
tpe = find_type_nr(lg, type_id);
@@ -378,13 +401,16 @@ log_read_updates(logger *lg, trans *tr,
if (!lg->flushing && l->flag == LOG_UPDATE) {
uid = COLnew(0, TYPE_oid, (BUN) nr, PERSISTENT);
if (uid == NULL) {
+ TRC_CRITICAL(GDK, "creating bat failed\n");
return LOG_ERR;
}
}
if (l->flag == LOG_UPDATE_CONST) {
- if (mnstr_readLng(lg->input_log, &offset) != 1)
- return LOG_ERR;
+ if (mnstr_readLng(lg->input_log, &offset) != 1) {
+ TRC_CRITICAL(GDK, "read failed\n");
+ return LOG_EOF;
+ }
if (cands) {
/* This const range actually represents a
segment of candidates corresponding to updated bat entries */
@@ -398,18 +424,23 @@ log_read_updates(logger *lg, trans *tr,
BAT *dense = BATdense(0, (oid) offset,
(BUN) nr);
BAT *newcands = NULL;
if (!dense) {
+ TRC_CRITICAL(GDK, "creating bat
failed\n");
res = LOG_ERR;
} else if ((*cands)->ttype ==
TYPE_void) {
if ((newcands =
BATmergecand(*cands, dense))) {
BBPreclaim(*cands);
*cands = newcands;
- } else
+ } else {
+ TRC_CRITICAL(GDK,
"creating bat failed\n");
res = LOG_ERR;
+ }
} else {
assert((*cands)->ttype ==
TYPE_oid);
assert(BATcount(*cands) > 0);
- if (BATappend(*cands, dense,
NULL, true) != GDK_SUCCEED)
+ if (BATappend(*cands, dense,
NULL, true) != GDK_SUCCEED) {
+ TRC_CRITICAL(GDK,
"appending to bat failed\n");
res = LOG_ERR;
+ }
}
BBPreclaim(dense);
}
@@ -418,7 +449,8 @@ log_read_updates(logger *lg, trans *tr,
size_t tlen = lg->rbufsize;
void *t = rt(lg->rbuf, &tlen, lg->input_log, 1);
if (t == NULL) {
- res = LOG_ERR;
+ TRC_CRITICAL(GDK, "read failed\n");
+ res = LOG_EOF;
}
return res;
}
@@ -437,14 +469,17 @@ log_read_updates(logger *lg, trans *tr,
size_t tlen = lg->rbufsize;
void *t = rt(lg->rbuf, &tlen, lg->input_log, 1);
if (t == NULL) {
- res = LOG_ERR;
+ TRC_CRITICAL(GDK, "read failed\n");
+ res = LOG_EOF;
} else {
lg->rbuf = t;
lg->rbufsize = tlen;
if (r) {
for (BUN p = 0; p < (BUN) nr; p++) {
- if (BUNappend(r, t, true) !=
GDK_SUCCEED)
+ if (BUNappend(r, t, true) !=
GDK_SUCCEED) {
+ TRC_CRITICAL(GDK,
"append to bat failed\n");
res = LOG_ERR;
+ }
}
}
}
@@ -452,14 +487,17 @@ log_read_updates(logger *lg, trans *tr,
if (mnstr_readLng(lg->input_log, &offset) != 1) {
if (r)
BBPreclaim(r);
- return LOG_ERR;
+ TRC_CRITICAL(GDK, "read failed\n");
+ return LOG_EOF;
}
if (tpe == TYPE_msk) {
if (r) {
if (mnstr_readIntArray(lg->input_log,
Tloc(r, 0), (size_t) ((nr + 31) / 32)))
BATsetcount(r, (BUN) nr);
- else
- res = LOG_ERR;
+ else {
+ TRC_CRITICAL(GDK, "read
failed\n");
+ res = LOG_EOF;
+ }
} else {
size_t tlen = lg->rbufsize /
sizeof(int);
size_t cnt = 0, snr = (size_t) nr;
@@ -467,8 +505,10 @@ log_read_updates(logger *lg, trans *tr,
assert(tlen);
for (; res == LOG_OK && snr > 0; snr -=
cnt) {
cnt = snr > tlen ? tlen : snr;
- if
(!mnstr_readIntArray(lg->input_log, lg->rbuf, cnt))
- res = LOG_ERR;
+ if
(!mnstr_readIntArray(lg->input_log, lg->rbuf, cnt)) {
+ TRC_CRITICAL(GDK, "read
failed\n");
+ res = LOG_EOF;
+ }
}
}
} else {
@@ -487,8 +527,10 @@ log_read_updates(logger *lg, trans *tr,
break;
}
assert(t == lg->rbuf);
- if (r && BUNappendmulti(r, t,
cnt, true) != GDK_SUCCEED)
+ if (r && BUNappendmulti(r, t,
cnt, true) != GDK_SUCCEED) {
+ TRC_CRITICAL(GDK,
"append to bat failed\n");
res = LOG_ERR;
+ }
}
} else if (tpe == TYPE_str) {
/* efficient string */
@@ -507,11 +549,14 @@ log_read_updates(logger *lg, trans *tr,
res = LOG_EOF;
else
res = LOG_ERR;
+ TRC_CRITICAL(GDK, "read
failed\n");
} else {
lg->rbuf = t;
lg->rbufsize = tlen;
- if (r && BUNappend(r,
t, true) != GDK_SUCCEED)
+ if (r && BUNappend(r,
t, true) != GDK_SUCCEED) {
+
TRC_CRITICAL(GDK, "append to bat failed\n");
res = LOG_ERR;
+ }
}
}
}
@@ -521,23 +566,29 @@ log_read_updates(logger *lg, trans *tr,
void *hv = ATOMnil(TYPE_oid);
offset = 0;
- if (hv == NULL)
- res = LOG_ERR;
+ if (hv == NULL) {
+ TRC_CRITICAL(GDK, "read failed\n");
+ res = LOG_EOF;
+ }
for (; res == LOG_OK && nr > 0; nr--) {
size_t hlen = sizeof(oid);
void *h = rh(hv, &hlen, lg->input_log, 1);
assert(hlen == sizeof(oid));
assert(h == hv);
- if ((uid && BUNappend(uid, h, true) !=
GDK_SUCCEED))
+ if ((uid && BUNappend(uid, h, true) !=
GDK_SUCCEED)) {
+ TRC_CRITICAL(GDK, "append to bat
failed\n");
res = LOG_ERR;
+ }
}
nr = pnr;
if (tpe == TYPE_msk) {
if (r) {
if (mnstr_readIntArray(lg->input_log,
Tloc(r, 0), (size_t) ((nr + 31) / 32)))
BATsetcount(r, (BUN) nr);
- else
- res = LOG_ERR;
+ else {
+ TRC_CRITICAL(GDK, "read
failed\n");
+ res = LOG_EOF;
+ }
} else {
for (lng i = 0; i < nr; i += 32) {
int v;
@@ -551,6 +602,7 @@ log_read_updates(logger *lg, trans *tr,
res = LOG_ERR;
break;
}
+ TRC_CRITICAL(GDK, "read
failed\n");
break;
}
}
@@ -567,11 +619,14 @@ log_read_updates(logger *lg, trans *tr,
res = LOG_EOF;
else
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]