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]

Reply via email to