Changeset: 3f2fdc52cea9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3f2fdc52cea9
Modified Files:
        gdk/gdk_logger.c
Branch: unlock
Log Message:

fixed problem in handling LOG_UPDATE (log_delta/read/apply updates)
handle end of file sooner when reading the log


diffs (108 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -185,6 +185,7 @@ log_read_format(logger *l, logformat *da
 static gdk_return
 log_write_format(logger *lg, logformat *data)
 {
+       assert(data->id || data->flag);
        assert(!lg->inmemory);
        if (mnstr_write(lg->output_log, &data->flag, 1, 1) == 1 &&
            mnstr_writeInt(lg->output_log, data->id))
@@ -350,20 +351,23 @@ log_read_updates(logger *lg, trans *tr, 
 
                        if (hv == NULL)
                                res = LOG_ERR;
-
                        for (; res == LOG_OK && nr > 0; nr--) {
                                void *h = rh(hv, lg->input_log, 1);
+
+                               if ((uid && BUNappend(uid, h, true) != 
GDK_SUCCEED))
+                                       res = LOG_ERR;
+                       }
+                       nr = pnr;
+                       for (; res == LOG_OK && nr > 0; nr--) {
                                void *t = rt(tv, lg->input_log, 1);
 
-                               if (h == NULL)
-                                       res = LOG_EOF;
-                               else if (t == NULL) {
+                               if (t == NULL) {
                                        if (strstr(GDKerrbuf, "malloc") == NULL)
                                                res = LOG_EOF;
                                        else
                                                res = LOG_ERR;
-                               } else if ((uid && BUNappend(uid, h, true) != 
GDK_SUCCEED) ||
-                                       (r && BUNappend(r, t, true) != 
GDK_SUCCEED))
+                               }
+                               if ((r && BUNappend(r, t, true) != GDK_SUCCEED))
                                        res = LOG_ERR;
                                if (t != tv)
                                        GDKfree(t);
@@ -484,31 +488,9 @@ la_bat_updates(logger *lg, logaction *la
                        oid h = BUNtoid(la->uid, p);
                        const void *t = BUNtail(vi, p);
 
-                       if (h < b->hseqbase || h >= b->hseqbase + BATcount(b)) {
-                               /* if value doesn't exist, insert it;
-                                * if b void headed, maintain that by
-                                * inserting nils */
-                               if (b->batCount == 0 && !is_oid_nil(h))
-                                       b->hseqbase = h;
-                               if (!is_oid_nil(b->hseqbase) && !is_oid_nil(h)) 
{
-                                       const void *tv = ATOMnilptr(b->ttype);
-
-                                       while (b->hseqbase + b->batCount < h) {
-                                               if (BUNappend(b, tv, true) != 
GDK_SUCCEED) {
-                                                       logbat_destroy(b);
-                                                       return GDK_FAIL;
-                                               }
-                                       }
-                               }
-                               if (BUNappend(b, t, true) != GDK_SUCCEED) {
-                                       logbat_destroy(b);
-                                       return GDK_FAIL;
-                               }
-                       } else {
-                               if (BUNreplace(b, h, t, true) != GDK_SUCCEED) {
-                                       logbat_destroy(b);
-                                       return GDK_FAIL;
-                               }
+                       if (BUNreplace(b, h, t, true) != GDK_SUCCEED) {
+                               logbat_destroy(b);
+                               return GDK_FAIL;
                        }
                }
        }
@@ -602,7 +584,7 @@ logger_write_new_types(logger *lg, FILE 
                id++;
        }
        /* second the var sized types */
-       id=-127; // start after nil 
+       id=-127; /* start after nil */
        for (int i=0;i<GDKatomcnt; i++) {
                if (!ATOMvarsized(i))
                        continue;
@@ -905,6 +887,11 @@ logger_read_transaction(logger *lg)
        GDKdebug &= ~(CHECKMASK|PROPMASK);
 
        while (err == LOG_OK && (ok=log_read_format(lg, &l))) {
+               if (l.flag == 0 && l.id == 0) {
+                       err = LOG_EOF;
+                       break;
+               }
+
                if (lg->debug & 1) {
                        fprintf(stderr, "#logger_readlog: ");
                        if (l.flag > 0 &&
@@ -1711,8 +1698,8 @@ logger_new(int debug, const char *fn, co
                .postfuncp = postfuncp,
 
                .id = 1,
-               .tid = (int)getBBPtransid(),    /* get saved transaction id 
from bbp */
-               .saved_id = getBBPlogno(),      /* get saved log numer from bbp 
*/
+               .saved_id = getBBPlogno(),              /* get saved log numer 
from bbp */
+               .saved_tid = (int)getBBPtransid(),      /* get saved 
transaction id from bbp */
        };
 
        /* probably open file and check version first, then call call old 
logger code */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to