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