Changeset: 2428d9bc967c for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2428d9bc967c 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:
Properly configure the read-only logger Pass only the needed parameters: logdir and read-only flag Make sure no unlinking is done if no 32-64bit convertion happened (in read-only mode) Remove the no-longer needed create_readonly flag from the logger_settings struc, as well as set calls for it diffs (192 lines): diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -1222,7 +1222,7 @@ logger_find_persistent_catalog(logger *l } static logger * -logger_new(int debug, char *fn, logger_settings *log_settings, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, int readonly) +logger_new(int debug, char *fn, char *logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, int readonly) { int id = LOG_SID; logger *lg = (struct logger *) GDKmalloc(sizeof(struct logger)); @@ -1249,13 +1249,13 @@ logger_new(int debug, char *fn, logger_s #endif /* if the logdir path is absolute, do not prefix it with the gdk_dbpath */ - if (MT_path_absolute(log_settings->logdir)) { + if (MT_path_absolute(logdir)) { snprintf(filename, BUFSIZ, "%s%c%s%c", - log_settings->logdir, DIR_SEP, fn, DIR_SEP); + logdir, DIR_SEP, fn, DIR_SEP); } else { snprintf(filename, BUFSIZ, "%s%c%s%c%s%c", GDKgetenv("gdk_dbpath"), DIR_SEP, - log_settings->logdir, DIR_SEP, fn, DIR_SEP); + logdir, DIR_SEP, fn, DIR_SEP); } if ((lg->fn = GDKstrdup(fn)) == NULL || @@ -1468,7 +1468,7 @@ logger_new(int debug, char *fn, logger_s fclose(fp); fp = NULL; #if SIZEOF_OID == 8 - if (lg->read32bitoid) { + if (lg->read32bitoid && !readonly) { /* we converted, remove versioned file and * reset conversion flag */ unlink(cvfile); @@ -1488,9 +1488,9 @@ logger_new(int debug, char *fn, logger_s } logger * -logger_create(int debug, char *fn, logger_settings *log_settings, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, int readonly) +logger_create(int debug, char *fn, char *logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, int readonly) { - logger *lg = logger_new(debug, fn, log_settings, version, prefuncp, postfuncp, readonly); + logger *lg = logger_new(debug, fn, logdir, version, prefuncp, postfuncp, readonly); if (!lg) return NULL; diff --git a/gdk/gdk_logger.h b/gdk/gdk_logger.h --- a/gdk/gdk_logger.h +++ b/gdk/gdk_logger.h @@ -85,7 +85,6 @@ 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 create_readonly; /* flag if a read-only logger should be created */ } logger_settings; #define BATSIZE 0 @@ -109,7 +108,7 @@ typedef int log_bid; /* the sequence identifier for frontend objects */ #define OBJ_SID 1 -gdk_export logger *logger_create(int debug, char *fn, logger_settings *log_settings, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, int readonly); +gdk_export logger *logger_create(int debug, char *fn, char *logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, int readonly); gdk_export void logger_destroy(logger *lg); gdk_export int logger_exit(logger *lg); gdk_export int logger_restart(logger *lg); 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,19 +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_settings *log_settings = (struct logger_settings *) GDKmalloc(sizeof(struct logger_settings)); - - log_settings->logdir = *dirname; - /* Get and pass on the shared WAL directory location, if set */ - log_settings->shared_logdir = GDKgetenv("gdk_shared_logdir"); - /* Get and pass on the shared WAL drift threshold, if set. - * -1 by default, meaning it should be ignored, since it is not set */ - log_settings->shared_drift_threshold = GDKgetenv_int("gdk_shared_drift_threshold", -1); - /* log is not readonly by default */ - log_settings->create_readonly = 0; - - l = logger_create(*debug, *fn, log_settings, *version, NULL, NULL, 0); + logger *l = logger_create(*debug, *fn, *dirname, *version, NULL, NULL, 0); if (l) { *(logger**)L = l; 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 @@ -51,13 +51,6 @@ mvc_init(int debug, store_type store, in * -1 by default, meaning it should be ignored, since it is not set */ log_settings->shared_drift_threshold = GDKgetenv_int("gdk_shared_drift_threshold", -1); - /* log is not readonly by default */ - log_settings->create_readonly = 0; - /* check if all parameters for a shared log are set */ - if (ro && log_settings->shared_logdir != NULL && log_settings->shared_drift_threshold >= 0) { - log_settings->create_readonly = 1; - } - mvc_debug = debug&4; if (mvc_debug) { fprintf(stderr, "#mvc_init logdir %s\n", log_settings->logdir); 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 @@ -275,11 +275,11 @@ bl_postversion( void *lg) } static int -bl_create(int debug, logger_settings *log_settings, int cat_version, int readonly_logger) +bl_create(int debug, char *logdir, int cat_version, int readonly_logger) { if (bat_logger) return LOG_ERR; - bat_logger = logger_create(debug, "sql", log_settings, cat_version, bl_preversion, bl_postversion, readonly_logger); + bat_logger = logger_create(debug, "sql", logdir, cat_version, bl_preversion, bl_postversion, readonly_logger); if (bat_logger) return LOG_OK; return LOG_ERR; diff --git a/sql/storage/restrict/restrict_logger.c b/sql/storage/restrict/restrict_logger.c --- a/sql/storage/restrict/restrict_logger.c +++ b/sql/storage/restrict/restrict_logger.c @@ -23,11 +23,11 @@ logger *restrict_logger = NULL; static int -bl_create(int debug, logger_settings *log_settings, int catalog_version) +bl_create(int debug, char *logdir, int catalog_version) { if (restrict_logger) return LOG_ERR; - restrict_logger = logger_create(debug, "sql", log_settings, catalog_version, NULL, NULL, 0); + restrict_logger = logger_create(debug, "sql", logdir, catalog_version, NULL, NULL, 0); if (restrict_logger) return LOG_OK; return LOG_ERR; 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 @@ -247,7 +247,7 @@ typedef struct store_functions { extern store_functions store_funcs; -typedef int (*logger_create_fptr) (int debug, logger_settings *log_settings, int catalog_version, int readonly_logger); +typedef int (*logger_create_fptr) (int debug, char *logdir, int catalog_version, int readonly_logger); typedef void (*logger_destroy_fptr) (void); typedef int (*logger_restart_fptr) (void); @@ -289,8 +289,7 @@ extern res_table *res_tables_remove(res_ extern void res_tables_destroy(res_table *results); extern res_table *res_tables_find(res_table *results, int res_id); -extern int - store_init(int debug, store_type store, int readonly, int singleuser, logger_settings *log_settings, backend_stack stk); +extern int store_init(int debug, store_type store, int readonly, int singleuser, logger_settings *log_settings, backend_stack stk); extern void store_exit(void); extern void store_apply_deltas(void); diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -1316,13 +1316,17 @@ store_init(int debug, store_type store, } active_store_type = store; if (!logger_funcs.create || - logger_funcs.create(debug, log_settings, CATALOG_VERSION*v, 0) == LOG_ERR) { + logger_funcs.create(debug, log_settings->logdir, CATALOG_VERSION*v, 0) == LOG_ERR) { MT_lock_unset(&bs_lock, "store_init"); return -1; } - /* check if we need to create a read-only log as well */ - if (log_settings->create_readonly) { - if (!logger_funcs.create || logger_funcs.create(debug, log_settings, CATALOG_VERSION*v, 1) == LOG_ERR) { + /* check if all parameters for a shared log are set */ + if (readonly && log_settings->shared_logdir != NULL && log_settings->shared_drift_threshold >= 0) { + /* create a read-only logger for the shared directory */ +#ifdef STORE_DEBUG + fprintf(stderr, "#store_init creating read-only logger\n"); +#endif + if (!logger_funcs.create || logger_funcs.create(debug, log_settings->shared_logdir, CATALOG_VERSION*v, 1) == LOG_ERR) { MT_lock_unset(&bs_lock, "store_init"); return -1; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list