Changeset: 67b23b6af9cc for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=67b23b6af9cc
Modified Files:
        gdk/gdk_logger.c
        gdk/gdk_logger.h
        sql/storage/bat/bat_logger.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: transaction-replication
Log Message:

Force the shared WAL to read all transactions
- logger_readlogs: Loop over all transaction starting from the current one 
until the last one written in the catalog file.
- logger_load: Make sure the transaction id stored in the WAL is not 
incremented in based on the BATcount. This will be done in logger_readlogs.
- Add some extra logging statement (real logging, not WAL).
While there:
- Replace int with lng for all transaction id functions.


diffs (141 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -779,6 +779,9 @@ logger_readlog(logger *lg, char *filenam
        struct stat sb;
        lng fpos;
 
+       if (lg->debug & 1) {
+                       fprintf(stderr, "#logger_readlog opening %s\n", 
filename);
+       }
        lg->log = open_rstream(filename);
 
        /* if the file doesn't exist, there is nothing to be read back */
@@ -907,15 +910,21 @@ logger_readlogs(logger *lg, FILE *fp, ch
        int res = 0;
        char id[BUFSIZ];
 
-       if (lg->debug & 1)
+       if (lg->debug & 1) {
                fprintf(stderr, "#logger_readlogs %s\n", filename);
+               fprintf(stderr, "#logger_readlogs logger id=%lld\n", lg->id);
+       }
 
        while (fgets(id, BUFSIZ, fp) != NULL) {
                char buf[BUFSIZ];
                lng lid = strtoll(id, NULL, 10);
 
-               if (lid >= lg->id) {
-                       lg->id = lid;
+               if (lg->debug & 1) {
+                       fprintf(stderr, "#logger_readlogs lid=%lld\n", lid);
+               }
+
+               while(lid > lg->id) {
+                       lg->id++;
                        snprintf(buf, BUFSIZ, "%s." LLFMT, filename, lg->id);
 
                        if ((res = logger_readlog(lg, buf)) != 0) {
@@ -1341,9 +1350,12 @@ logger_load(int debug, char* fn, char fi
                lg->seqs_val = BATdescriptor(seqs_val);
                if (lg->seqs_val == 0)
                        logger_fatal("logger_load: inconsistent database, 
seqs_val does not exist", 0, 0, 0);
-               if (BATcount(lg->seqs_id)) {
+               if (BATcount(lg->seqs_id) && !lg->readonly) {
                        BUN p = BUNfndT(lg->seqs_id, &id);
                        lg->id = *(lng *) Tloc(lg->seqs_val, p);
+                       if (lg->debug & 1) {
+                               fprintf(stderr, "#logger_load setting new 
logger id=%lld\n", lg->id);
+                       }
                } else {
                        BUNappend(lg->seqs_id, &id, FALSE);
                        BUNappend(lg->seqs_val, &lg->id, FALSE);
@@ -1733,7 +1745,7 @@ logger_changes(logger *lg)
 }
 
 /* Read the last recorded transactions id from the LOGFILE */
-int
+lng
 logger_read_last_transaction_id(logger *lg)
 {
        char filename[BUFSIZ];
diff --git a/gdk/gdk_logger.h b/gdk/gdk_logger.h
--- a/gdk/gdk_logger.h
+++ b/gdk/gdk_logger.h
@@ -117,7 +117,7 @@ gdk_export int logger_exit(logger *lg);
 gdk_export int logger_restart(logger *lg);
 gdk_export int logger_cleanup(logger *lg, int keep_persisted_log_files);
 gdk_export lng logger_changes(logger *lg);
-gdk_export int logger_read_last_transaction_id(logger *lg);
+gdk_export lng logger_read_last_transaction_id(logger *lg);
 gdk_export int logger_sequence(logger *lg, int seq, lng *id);
 gdk_export int logger_reload(logger *lg);
 
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
@@ -402,18 +402,18 @@ bl_changes(void)
        return (int) MIN(logger_changes(bat_logger), GDK_int_max);
 }
 
-static int
+static lng
 bl_read_last_transaction_id_shared(void)
 {
        return logger_read_last_transaction_id(bat_logger_shared);
 }
 
-static int
+static lng
 bl_get_transaction_drift_shared(void)
 {
-       int res = logger_read_last_transaction_id(bat_logger_shared);
+       lng res = logger_read_last_transaction_id(bat_logger_shared);
        if (res != LOG_ERR) {
-               return (int) (MIN(res, GDK_int_max) - 
MIN(bat_logger_shared->id, GDK_int_max));
+               return MIN(res, GDK_int_max) - MIN(bat_logger_shared->id, 
GDK_int_max);
        }
        return res;
 }
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -256,8 +256,8 @@ typedef int (*logger_cleanup_fptr) (int 
 
 typedef int (*logger_changes_fptr)(void);
 typedef int (*logger_get_sequence_fptr) (int seq, lng *id);
-typedef int (*logger_read_last_transaction_id_fptr)(void);
-typedef int (*logger_get_transaction_drift_fptr)(void);
+typedef lng (*logger_read_last_transaction_id_fptr)(void);
+typedef lng (*logger_get_transaction_drift_fptr)(void);
 
 typedef int (*logger_reload_fptr) (void);
 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1604,7 +1604,7 @@ store_manager(void)
        while (!GDKexiting()) {
                int res = LOG_OK;
                int t;
-               int shared_transactions_drift = -1;
+               lng shared_transactions_drift = -1;
 
                for (t = 30000; t > 0; t -= 50) {
                        MT_sleep_ms(50);
@@ -1615,12 +1615,12 @@ store_manager(void)
                if (create_shared_logger) {
                        /* get the shared transactions drift */
                        shared_transactions_drift = 
shared_logger_funcs.get_transaction_drift();
+#ifdef STORE_DEBUG
+       fprintf(stderr, "#store_manager shared_transactions_drift=%d\n", 
shared_transactions_drift);
+#endif
                        if (shared_transactions_drift == LOG_ERR) {
                                GDKfatal("shared write-ahead log last 
transaction read failure");
                        }
-#ifdef STORE_DEBUG
-       fprintf(stderr, "#store_manager shared_transactions_drift=%d\n", 
shared_transactions_drift);
-#endif
                }
 
                MT_lock_set(&bs_lock, "store_manager");
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to