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

Reply via email to