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