Changeset: 697c79aa0596 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=697c79aa0596
Modified Files:
        clients/Tests/exports.stable.out
        gdk/gdk.h
        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/bat/bat_logger.h
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: default
Log Message:

Removed support for shared log directories.
This code was experimental, not tested, and the ideas behind it were flawed.


diffs (truncated from 981 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -418,9 +418,8 @@ gdk_return log_tend(logger *lg);
 gdk_return log_tstart(logger *lg);
 gdk_return logger_add_bat(logger *lg, BAT *b, const char *name, char tpe, oid 
id) __attribute__((__warn_unused_result__));
 lng logger_changes(logger *lg);
-gdk_return logger_cleanup(logger *lg, int keep_persisted_log_files);
-logger *logger_create(int debug, const char *fn, const char *logdir, int 
version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, int 
keep_persisted_log_files);
-logger *logger_create_shared(int debug, const char *fn, const char *logdir, 
const char *slave_logdir, int version, preversionfix_fptr prefuncp, 
postversionfix_fptr postfuncp);
+gdk_return logger_cleanup(logger *lg);
+logger *logger_create(int debug, const char *fn, const char *logdir, int 
version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp);
 gdk_return logger_del_bat(logger *lg, log_bid bid) 
__attribute__((__warn_unused_result__));
 void logger_destroy(logger *lg);
 gdk_return logger_exit(logger *lg);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1312,7 +1312,6 @@ gdk_export int BATgetaccess(BAT *b);
 #define PERSISTENT             0
 #define TRANSIENT              1
 #define LOG_DIR                        2
-#define SHARED_LOG_DIR         3
 
 #define BAT_WRITE              0       /* all kinds of access allowed */
 #define BAT_READ               1       /* only read-access allowed */
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -940,50 +940,6 @@ tr_commit(logger *lg, trans *tr)
 #define access(file, mode)     _access(file, mode)
 #endif
 
-/* Update the last transaction id written in the catalog file.
- * Only used by the shared logger. */
-static gdk_return
-logger_update_catalog_file(logger *lg, const char *dir, const char *filename, 
int role)
-{
-       FILE *fp;
-       int bak_exists;
-       int farmid = BBPselectfarm(role, 0, offheap);
-
-       bak_exists = 0;
-       /* check if an older file exists and move bak it up */
-       if (access(filename, 0) != -1) {
-               bak_exists = 1;
-               if (GDKmove(farmid, dir, filename, NULL, dir, filename, "bak") 
!= GDK_SUCCEED) {
-                       fprintf(stderr, "!ERROR: logger_update_catalog_file: 
rename %s to %s.bak in %s failed\n", filename, filename, dir);
-                       return GDK_FAIL;
-               }
-       }
-
-       if ((fp = GDKfileopen(farmid, dir, filename, NULL, "w")) != NULL) {
-               if (fprintf(fp, "%06d\n\n", lg->version) < 0 ||
-                   fprintf(fp, LLFMT "\n", lg->id) < 0) {
-                       fprintf(stderr, "!ERROR: logger_update_catalog_file: 
write to %s failed\n", filename);
-                       fclose(fp);
-                       return GDK_FAIL;
-               }
-
-               if (fclose(fp) < 0) {
-                       fprintf(stderr, "!ERROR: logger_update_catalog_file: 
write/flush to %s failed\n", filename);
-                       return GDK_FAIL;
-               }
-
-               /* cleanup the bak file, if it exists*/
-               if (bak_exists) {
-                       GDKunlink(farmid, dir, filename, "bak");
-               }
-       } else {
-               fprintf(stderr, "!ERROR: logger_update_catalog_file: could not 
create %s\n", filename);
-               GDKerror("logger_update_catalog_file: could not open %s\n", 
filename);
-               return GDK_FAIL;
-       }
-       return GDK_SUCCEED;
-}
-
 static gdk_return
 logger_open(logger *lg)
 {
@@ -1258,7 +1214,7 @@ logger_readlogs(logger *lg, FILE *fp, ch
                        fprintf(stderr, "#logger_readlogs last logger id 
written in %s is " LLFMT "\n", filename, lid);
                }
 
-               if (!lg->shared && lid >= lg->id) {
+               if (lid >= lg->id) {
                        bool filemissing = false;
 
                        lg->id = lid;
@@ -1272,18 +1228,7 @@ logger_readlogs(logger *lg, FILE *fp, ch
                        bool filemissing = false;
                        while (lid >= lg->id && res == GDK_SUCCEED) {
                                snprintf(log_filename, sizeof(log_filename), 
"%s." LLFMT, filename, lg->id);
-                               if ((res = logger_readlog(lg, log_filename, 
&filemissing)) != GDK_SUCCEED && lg->shared && lg->id > 1) {
-                                       /* The only special case is if
-                                        * the file is missing
-                                        * altogether and the logger
-                                        * is a shared one, then we
-                                        * have missing transactions
-                                        * and we should abort.  Yeah,
-                                        * and we also ignore the 1st
-                                        * files it most likely never
-                                        * exists. */
-                                       fprintf(stderr, "#logger_readlogs 
missing shared logger file %s. Aborting\n", log_filename);
-                               }
+                               res = logger_readlog(lg, log_filename, 
&filemissing);
                                /* Increment the id only at the end,
                                 * since we want to re-read the last
                                 * file.  That is because last time we
@@ -1295,11 +1240,6 @@ logger_readlogs(logger *lg, FILE *fp, ch
                        if (lid < lg->id) {
                                lg->id = lid;
                        }
-                       if (lg->shared) {
-                               /* if this is a shared logger, write the id in
-                                * the shared file */
-                               logger_update_catalog_file(lg, lg->local_dir, 
LOGFILE_SHARED, lg->local_dbfarm_role);
-                       }
                }
        }
        return res;
@@ -1579,8 +1519,7 @@ bm_subcommit(logger *lg, BAT *list_bid, 
  * Returns the role of the dbfarm containing the logdir.
  */
 static int
-logger_set_logdir_path(char *filename, const char *fn,
-                      const char *logdir, bool shared)
+logger_set_logdir_path(char *filename, const char *fn, const char *logdir)
 {
        int role = PERSISTENT; /* default role is persistent, i.e. the default 
dbfarm */
 
@@ -1603,7 +1542,7 @@ logger_set_logdir_path(char *filename, c
                         * other than the default dbfarm, or at least
                         * it appears so to (multi)dbfarm aware
                         * functions */
-                       role = shared ? SHARED_LOG_DIR : LOG_DIR;
+                       role = LOG_DIR;
                        BBPaddfarm(logdir_parent_path, 1 << role);
                } else {
                        fprintf(stderr, "logger_set_logdir_path: logdir path is 
not correct (%s).\n"
@@ -1678,9 +1617,9 @@ logger_load(int debug, const char *fn, c
                goto error;
        }
 
-       /* this is intentional - even if catalog_bid is 0, but the logger is 
shared,
-        * force it to find the persistent catalog */
-       if (catalog_bid == 0 && !lg->shared) {
+       /* this is intentional - if catalog_bid is 0, force it to find
+        * the persistent catalog */
+       if (catalog_bid == 0) {
                /* catalog does not exist, so the log file also
                 * shouldn't exist */
                if (fp != NULL) {
@@ -1919,8 +1858,7 @@ logger_load(int debug, const char *fn, c
                goto error;
        }
        snprintf(bak, sizeof(bak), "%s_freed", fn);
-       /* do not rename it if this is a shared logger */
-       if (!lg->shared && BBPrename(lg->freed->batCacheid, bak) < 0) {
+       if (BBPrename(lg->freed->batCacheid, bak) < 0) {
                goto error;
        }
        snapshots_bid = logger_find_bat(lg, "snapshots_bid", 0, 0);
@@ -2087,8 +2025,7 @@ logger_load(int debug, const char *fn, c
                 * not what we expect, the conversion was apparently
                 * done already, and so we can delete the file. */
 
-               /* Do not do conversion if logger is shared/read-only */
-               if (!lg->shared) {
+               {
                        FILE *fp1;
                        fpos_t off;
                        int curid;
@@ -2164,7 +2101,7 @@ logger_load(int debug, const char *fn, c
                fclose(fp);
                fp = NULL;
 #ifdef GDKLIBRARY_NIL_NAN
-               if (lg->convert_nil_nan && !lg->shared) {
+               if (lg->convert_nil_nan) {
                        /* we converted, remove versioned file and
                         * reset conversion flag */
                        GDKunlink(0, NULL, cvfile, NULL);
@@ -2205,11 +2142,10 @@ logger_load(int debug, const char *fn, c
 /* Initialize a new logger
  * It will load any data in the logdir and persist it in the BATs*/
 static logger *
-logger_new(int debug, const char *fn, const char *logdir, int version, 
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, bool shared, const 
char *local_logdir)
+logger_new(int debug, const char *fn, const char *logdir, int version, 
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp)
 {
        logger *lg = GDKmalloc(sizeof(struct logger));
        char filename[FILENAME_MAX];
-       char shared_log_filename[FILENAME_MAX];
 
        if (lg == NULL) {
                fprintf(stderr, "!ERROR: logger_new: allocating logger 
structure failed\n");
@@ -2217,8 +2153,6 @@ logger_new(int debug, const char *fn, co
        }
 
        lg->debug = debug;
-       lg->shared = shared;
-       lg->local_dbfarm_role = 0; /* only used if lg->shared */
 
        lg->changes = 0;
        lg->version = version;
@@ -2230,7 +2164,7 @@ logger_new(int debug, const char *fn, co
        lg->convert_nil_nan = false;
 #endif
 
-       lg->dbfarm_role = logger_set_logdir_path(filename, fn, logdir, shared);;
+       lg->dbfarm_role = logger_set_logdir_path(filename, fn, logdir);
        lg->fn = GDKstrdup(fn);
        lg->dir = GDKstrdup(filename);
        lg->bufsize = 64*1024;
@@ -2248,49 +2182,6 @@ logger_new(int debug, const char *fn, co
        }
        lg->local_dir = NULL;
 
-       if (shared) {
-               /* set the local logdir as well
-                * here we pass 0 for the shared flag, since we want these 
file(s) to be stored in the default logdir */
-               lg->local_dbfarm_role = logger_set_logdir_path(filename, fn, 
local_logdir, 0);
-               if (lg->local_dbfarm_role < 0 ||
-                   (lg->local_dir = GDKstrdup(filename)) == NULL) {
-                       fprintf(stderr, "!ERROR: logger_new: strdup failed\n");
-                       GDKfree(lg->fn);
-                       GDKfree(lg->dir);
-                       GDKfree(lg->buf);
-                       GDKfree(lg);
-                       return NULL;
-               }
-               if (lg->debug & 1) {
-                       fprintf(stderr, "#logger_new local_dir set to %s\n", 
lg->local_dir);
-               }
-
-               /* get last shared logger id from the local log dir,
-                * but first check if the file exists */
-               snprintf(shared_log_filename, sizeof(shared_log_filename), 
"%s%s", lg->local_dir, LOGFILE_SHARED);
-               if (access(shared_log_filename, 0) != -1) {
-                       lng res = logger_read_last_transaction_id(lg, 
lg->local_dir, LOGFILE_SHARED, lg->local_dbfarm_role);
-                       if (res < 0) {
-                               fprintf(stderr, "!ERROR: logger_new: failed to 
read previous shared logger id form %s\n", LOGFILE_SHARED);
-                               GDKfree(lg->fn);
-                               GDKfree(lg->dir);
-                               GDKfree(lg->local_dir);
-                               GDKfree(lg->buf);
-                               GDKfree(lg);
-                               return NULL;
-                       }
-
-                       lg->id = res;
-                       if (lg->debug & 1) {
-                               fprintf(stderr, "#logger_new last shared 
transactions is read form %s is " LLFMT "\n", shared_log_filename, lg->id);
-                       }
-               } else {
-                       if (lg->debug & 1) {
-                               fprintf(stderr, "#logger_new no previous %s 
found\n", LOGFILE_SHARED);
-                       }
-               }
-       }
-
        lg->prefuncp = prefuncp;
        lg->postfuncp = postfuncp;
        lg->log = NULL;
@@ -2313,7 +2204,7 @@ logger_new(int debug, const char *fn, co
        return NULL;
 }
 
-/* Reload (shared) logger
+/* Reload logger
  * It will load any data in the logdir and persist it in the BATs */
 gdk_return
 logger_reload(logger *lg)
@@ -2330,10 +2221,10 @@ logger_reload(logger *lg)
 
 /* Create a new logger */
 logger *
-logger_create(int debug, const char *fn, const char *logdir, int version, 
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, int 
keep_persisted_log_files)
+logger_create(int debug, const char *fn, const char *logdir, int version, 
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp)
 {
        logger *lg;
-       lg = logger_new(debug, fn, logdir, version, prefuncp, postfuncp, false, 
NULL);
+       lg = logger_new(debug, fn, logdir, version, prefuncp, postfuncp);
        if (lg == NULL)
                return NULL;
        if (lg->debug & 1) {
@@ -2354,27 +2245,13 @@ logger_create(int debug, const char *fn,
        fflush(stdout);
        if (lg->changes &&
            (logger_restart(lg) != GDK_SUCCEED ||
-            logger_cleanup(lg, keep_persisted_log_files) != GDK_SUCCEED)) {
+            logger_cleanup(lg) != GDK_SUCCEED)) {
                logger_destroy(lg);
                return NULL;
        }
        return lg;
 }
 
-/* Create a new shared logger, that is for slaves reading the master
- * log directory.  Assumed to be read-only */
-logger *
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to