Changeset: 41912d4e0cd0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=41912d4e0cd0
Modified Files:
gdk/gdk_logger.c
gdk/gdk_logger.h
monetdb5/modules/kernel/logger.c
sql/server/sql_mvc.c
sql/storage/bat/bat_logger.c
sql/storage/restrict/restrict_logger.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: transaction-replication
Log Message:
Pass the keep persisted log files flag only (directly) to logger_cleanup
Make sure all calls to logger_cleanup set the flag correctly
While there:
Fix a bug during initialization for read-only loggers with no existing logdir
Make sure the shared logger is also destroyed on store shutdown
Fix incorrect fuction references in debug statements
diffs (truncated from 517 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
@@ -1045,7 +1045,7 @@ logger_upgrade_format(char *fn, logger *
BAT* b = BATdescriptor(*bid);
BAT* v;
if (b == 0) {
- logger_fatal("Logger_new: inconsistent database, '%s' does not
exist", bak, 0, 0);
+ logger_fatal("logger_upgrade_format: inconsistent database,
'%s' does not exist", bak, 0, 0);
}
lg->catalog_bid = logbat_new(TYPE_int, BATSIZE);
@@ -1073,7 +1073,7 @@ logger_upgrade_format(char *fn, logger *
*bid = logger_find_bat(lg, "snapshots");
b = BATdescriptor(*bid);
if (b == 0) {
- logger_fatal("Logger_new: inconsistent database, '%s' snapshots
does not exist", bak, 0, 0);
+ logger_fatal("logger_upgrade_format: inconsistent database,
'%s' snapshots does not exist", bak, 0, 0);
}
lg->snapshots_bid = logbat_new(TYPE_int, 1);
@@ -1097,7 +1097,7 @@ logger_upgrade_format(char *fn, logger *
*bid = logger_find_bat(lg, "seqs");
b = BATdescriptor(*bid);
if (b == 0) {
- logger_fatal("Logger_new: inconsistent database, '%s' seqs does
not exist", bak, 0, 0);
+ logger_fatal("logger_upgrade_format: inconsistent database,
'%s' seqs does not exist", bak, 0, 0);
}
lg->seqs_id = logbat_new(TYPE_int, 1);
@@ -1139,7 +1139,7 @@ logger_create_catalog_file(int debug, lo
* shouldn't exist */
if (fp != NULL) {
logger_fatal(
- "logger_new: there is no logger catalog, but
there is a log file.\n"
+ "logger_create_catalog_file: there is no logger
catalog, but there is a log file.\n"
"Are you sure you are using the
correct combination of database\n"
"(--dbpath) and log directory
(--set %s_logdir)?\n", fn, 0, 0);
return LOG_ERR;
@@ -1162,11 +1162,11 @@ logger_create_catalog_file(int debug, lo
snprintf(bak, BUFSIZ, "%s_catalog_nme", fn);
BBPrename(lg->catalog_nme->batCacheid, bak);
if (!GDKcreatedir(filename)) {
- logger_fatal("logger_new: cannot create directory for log file
%s\n", filename, 0, 0);
+ logger_fatal("logger_create_catalog_file: cannot create
directory for log file %s\n", filename, 0, 0);
return LOG_ERR;
}
if ((fp = fopen(filename, "w")) == NULL) {
- logger_fatal("logger_new: cannot create log file %s\n",
filename, 0, 0);
+ logger_fatal("logger_create_catalog_file: cannot create log
file %s\n", filename, 0, 0);
return LOG_ERR;
}
fprintf(fp, "%06d\n\n", lg->version);
@@ -1191,18 +1191,18 @@ logger_find_persistent_catalog(logger *l
BUN p, q;
BAT *b = BATdescriptor(*catalog_bid), *n;
if (b == 0)
- logger_fatal("Logger_new: inconsistent database, catalog does
not exist", 0, 0, 0);
+ logger_fatal("logger_find_persistent_catalog: inconsistent
database, catalog does not exist", 0, 0, 0);
snprintf(bak, BUFSIZ, "%s_catalog_nme", fn);
*catalog_nme = BBPindex(bak);
n = BATdescriptor(*catalog_nme);
if (n == 0)
- logger_fatal("Logger_new: inconsistent database, catalog_nme
does not exist", 0, 0, 0);
+ logger_fatal("logger_find_persistent_catalog: inconsistent
database, catalog_nme does not exist", 0, 0, 0);
/* the catalog exists, and so should the log file */
if (fp == NULL) {
logger_fatal(
- "logger_new: there is a logger catalog, but no
log file.\n"
+ "logger_find_persistent_catalog: there is a
logger catalog, but no log file.\n"
"Are you sure you are using the
correct combination of database\n"
"(--dbpath) and log directory
(--set %s_logdir)?\n"
"If you have done a recent
update of the server, it may be that your\n"
@@ -1257,7 +1257,7 @@ logger_load(int debug, char* fn, char fi
fclose(fp);
(void) GDKunlink(lg->dir, LOGFILE, NULL);
if (GDKmove(lg->dir, LOGFILE, "bak", lg->dir, LOGFILE, NULL) !=
0)
- logger_fatal("logger_new: cannot move log.bak file
back.\n", 0, 0, 0);
+ logger_fatal("logger_load: cannot move log.bak file
back.\n", 0, 0, 0);
}
fp = fopen(filename, "r");
@@ -1271,9 +1271,11 @@ logger_load(int debug, char* fn, char fi
snprintf(bak, BUFSIZ, "%s_catalog_bid", fn);
catalog_bid = BBPindex(bak);
- if (catalog_bid == 0 && !lg->readonly) {
- if (logger_create_catalog_file(debug, lg, fn, fp, filename,
bak) == LOG_ERR) {
- goto error;
+ if (catalog_bid == 0 ) {
+ if (!lg->readonly) {
+ if (logger_create_catalog_file(debug, lg, fn, fp,
filename, bak) == LOG_ERR) {
+ goto error;
+ }
}
} else {
if (logger_find_persistent_catalog(lg, fn, fp, bak,
&catalog_bid, &catalog_nme) == LOG_ERR) {
@@ -1318,10 +1320,10 @@ logger_load(int debug, char* fn, char fi
lg->seqs_id = BATdescriptor(seqs_id);
if (lg->seqs_id == 0)
- logger_fatal("Logger_new: inconsistent database,
seqs_id does not exist",0,0,0);
+ logger_fatal("logger_load: inconsistent database,
seqs_id does not exist", 0, 0, 0);
lg->seqs_val = BATdescriptor(seqs_val);
if (lg->seqs_val == 0)
- logger_fatal("Logger_new: inconsistent database,
seqs_val does not exist",0,0,0);
+ logger_fatal("logger_load: inconsistent database,
seqs_val does not exist", 0, 0, 0);
if (BATcount(lg->seqs_id)) {
BUN p = BUNfndT(lg->seqs_id, &id);
lg->id = *(lng *) Tloc(lg->seqs_val, p);
@@ -1331,10 +1333,10 @@ logger_load(int debug, char* fn, char fi
}
lg->snapshots_bid = BATdescriptor(snapshots_bid);
if (lg->snapshots_bid == 0)
- logger_fatal("Logger_new: inconsistent database,
snapshots_bid does not exist",0,0,0);
+ logger_fatal("logger_load: inconsistent database,
snapshots_bid does not exist", 0, 0, 0);
lg->snapshots_tid = BATdescriptor(snapshots_tid);
if (lg->snapshots_tid == 0)
- logger_fatal("Logger_new: inconsistent database,
snapshots_tid does not exist",0,0,0);
+ logger_fatal("logger_load: inconsistent database,
snapshots_tid does not exist", 0, 0, 0);
}
lg->freed = BATnew(TYPE_void, TYPE_int, 1);
@@ -1461,7 +1463,7 @@ logger_load(int debug, char* fn, char fi
/* Initialize a new logger
* It will load any data in the logdir and persist it in the BATs*/
static logger *
-logger_new(int debug, char *fn, char *logdir, int version, preversionfix_fptr
prefuncp, postversionfix_fptr postfuncp, int readonly, int keep_logs_files)
+logger_new(int debug, char *fn, char *logdir, int version, preversionfix_fptr
prefuncp, postversionfix_fptr postfuncp, int readonly)
{
logger *lg = (struct logger *) GDKmalloc(sizeof(struct logger));
char filename[BUFSIZ];
@@ -1473,7 +1475,6 @@ logger_new(int debug, char *fn, char *lo
lg->debug = debug;
lg->readonly = readonly;
- lg->keep_logs_files = keep_logs_files;
lg->changes = 0;
lg->version = version;
@@ -1529,11 +1530,11 @@ logger_reload(logger *lg)
return logger_load(lg->debug, lg->fn, filename, lg);
}
-/* Create a logger */
+/* Create a new logger */
logger *
-logger_create(int debug, char *fn, char *logdir, int version, int
keep_logs_files, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp)
+logger_create(int debug, char *fn, char *logdir, int version,
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp)
{
- logger *lg = logger_new(debug, fn, logdir, version, prefuncp,
postfuncp, 0, keep_logs_files);
+ logger *lg = logger_new(debug, fn, logdir, version, prefuncp,
postfuncp, 0);
if (!lg)
return NULL;
@@ -1544,7 +1545,7 @@ logger_create(int debug, char *fn, char
}
if (lg->changes &&
(logger_restart(lg) != LOG_OK ||
- logger_cleanup(lg) != LOG_OK)) {
+ logger_cleanup(lg, 1) != LOG_OK)) {
logger_destroy(lg);
return NULL;
@@ -1552,14 +1553,14 @@ logger_create(int debug, char *fn, char
return lg;
}
-/* Create new read-only logger
+/* Create a new read-only logger
* Usually reserved for shared log directories */
logger *
-logger_create_ro(int debug, char *fn, char *logdir, int version, int
keep_logs_files, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp)
+logger_create_ro(int debug, char *fn, char *logdir, int version,
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp)
{
logger *lg = NULL;
- lg = logger_new(debug, fn, logdir, version, prefuncp, postfuncp, 1,
keep_logs_files);
+ lg = logger_new(debug, fn, logdir, version, prefuncp, postfuncp, 1);
return lg;
}
@@ -1571,7 +1572,7 @@ logger_destroy(logger *lg)
BUN p, q;
BAT *b = lg->catalog_bid;
- logger_cleanup(lg);
+ logger_cleanup(lg, 0);
/* destroy the deleted */
/* would be an error ....
@@ -1667,10 +1668,14 @@ logger_restart(logger *lg)
return res;
}
+/* Clean-up write-ahead log files already persisted in the BATs, leaving only
the most recent one.
+ * Update the LOGFILE and delete all bak- files as well.
+ * If the keep_persisted_log_files, no clean-up happens.
+ */
int
-logger_cleanup(logger *lg)
+logger_cleanup(logger *lg, int keep_persisted_log_files)
{
- if (!lg->keep_logs_files) {
+ if (!keep_persisted_log_files) {
char buf[BUFSIZ];
char id[BUFSIZ];
FILE *fp = NULL;
@@ -1700,7 +1705,6 @@ logger_cleanup(logger *lg)
snprintf(buf, BUFSIZ, "bak-" LLFMT, lg->id);
GDKunlink(lg->dir, LOGFILE, buf);
-
}
return LOG_OK;
}
@@ -1711,7 +1715,7 @@ logger_changes(logger *lg)
return lg->changes;
}
-/* Read the last recorded transactions id from the logfile */
+/* Read the last recorded transactions id from the LOGFILE */
int
logger_read_last_transaction_id(logger *lg)
{
diff --git a/gdk/gdk_logger.h b/gdk/gdk_logger.h
--- a/gdk/gdk_logger.h
+++ b/gdk/gdk_logger.h
@@ -61,7 +61,6 @@ typedef struct logger {
char *fn;
char *dir;
int readonly; /* a flag to indicate if the logger is read-only */
- int keep_logs_files; /* a flag if old WAL files should be preserved
*/
preversionfix_fptr prefuncp;
postversionfix_fptr postfuncp;
stream *log;
@@ -87,7 +86,7 @@ typedef struct logger_settings {
char *logdir; /* (the regular) server write-ahead log directory */
char *shared_logdir; /* shared write-ahead log directory */
int shared_drift_threshold; /* shared write-ahead log drift
threshold */
- int keep_logs_files; /* a flag if old WAL files should be preserved
*/
+ int keep_persisted_log_files; /* a flag if old WAL files should be
preserved */
} logger_settings;
#define BATSIZE 0
@@ -111,12 +110,12 @@ typedef int log_bid;
/* the sequence identifier for frontend objects */
#define OBJ_SID 1
-gdk_export logger *logger_create(int debug, char *fn, char *logdir, int
version, int keep_logs_files, preversionfix_fptr prefuncp, postversionfix_fptr
postfuncp);
-gdk_export logger *logger_create_ro(int debug, char *fn, char *logdir, int
version, int keep_logs_files, preversionfix_fptr prefuncp, postversionfix_fptr
postfuncp);
+gdk_export logger *logger_create(int debug, char *fn, char *logdir, int
version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp);
+gdk_export logger *logger_create_ro(int debug, char *fn, char *logdir, int
version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp);
gdk_export void logger_destroy(logger *lg);
gdk_export int logger_exit(logger *lg);
gdk_export int logger_restart(logger *lg);
-gdk_export int logger_cleanup(logger *lg);
+gdk_export int logger_cleanup(logger *lg, int keep_persisted_log_files);
gdk_export size_t logger_changes(logger *lg);
gdk_export int logger_read_last_transaction_id(logger *lg);
gdk_export int logger_sequence(logger *lg, int seq, lng *id);
diff --git a/monetdb5/modules/kernel/logger.c b/monetdb5/modules/kernel/logger.c
--- a/monetdb5/modules/kernel/logger.c
+++ b/monetdb5/modules/kernel/logger.c
@@ -90,7 +90,7 @@ logger_export str logger_create_wrap( lo
str
logger_create_wrap( logger *L, int *debug, str *fn, str *dirname, int *version)
{
- logger *l = logger_create(*debug, *fn, *dirname, *version, 0, NULL,
NULL);
+ logger *l = logger_create(*debug, *fn, *dirname, *version, NULL, NULL);
if (l) {
*(logger**)L = l;
@@ -141,7 +141,7 @@ int
logger_cleanup_wrap(logger *L )
{
logger *l = *(logger**)L;
- if (l && logger_cleanup(l) == LOG_OK)
+ if (l && logger_cleanup(l, 0) == LOG_OK)
return GDK_SUCCEED;
return GDK_FAIL;
}
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -52,7 +52,7 @@ mvc_init(int debug, store_type store, in
log_settings->shared_drift_threshold =
GDKgetenv_int("gdk_shared_drift_threshold", -1);
/* Get and pass on the flag if old WAL files should be preserved. 0
(no) by default */
- log_settings->keep_logs_files = GDKgetenv_int("gdk_keep_logs_files", 0);
+ log_settings->keep_persisted_log_files =
GDKgetenv_int("gdk_keep_persisted_log_files", 0);
mvc_debug = debug&4;
if (mvc_debug) {
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
@@ -276,22 +276,22 @@ bl_postversion( void *lg)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list