Changeset: 3c9e754b45c2 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3c9e754b45c2 Modified Files: gdk/gdk_logger.c gdk/gdk_logger.h Branch: transaction-replication Log Message:
Pull logger format upgrade in a separate function diffs (228 lines): diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -1038,6 +1038,99 @@ logger_fatal(const char *format, const c GDKexit(1); } +static void +logger_upgrade_format(char *fn, logger *lg, bat *bid, char *bak) { + /* split catalog -> catalog_bid, catalog_nme */ + BAT* b = BATdescriptor(*bid); + BAT* v; + if (b == 0) { + logger_fatal("Logger_new: inconsistent database, '%s' does not exist", bak, 0, 0); + } + + lg->catalog_bid = logbat_new(TYPE_int, BATSIZE); + lg->catalog_nme = logbat_new(TYPE_str, BATSIZE); + v = BATmark(b, 0); + BATappend(lg->catalog_bid, BATmirror(v), FALSE); + BBPunfix(v->batCacheid); + v = BATmark(BATmirror(b), 0); + BATappend(lg->catalog_nme, BATmirror(v), FALSE); + BBPunfix(v->batCacheid); + /* Make persistent */ + *bid = lg->catalog_bid->batCacheid; + BBPincref(*bid, TRUE); + BATmode(lg->catalog_bid, PERSISTENT); + snprintf(bak, BUFSIZ, "%s_catalog_bid", fn); + BBPrename(lg->catalog_bid->batCacheid, bak); + /* Make persistent */ + *bid = lg->catalog_nme->batCacheid; + BBPincref(*bid, TRUE); + BATmode(lg->catalog_nme, PERSISTENT); + snprintf(bak, BUFSIZ, "%s_catalog_nme", fn); + BBPrename(lg->catalog_nme->batCacheid, bak); + logbat_destroy(b); + /* split snapshots -> snapshots_bid, snapshots_tid */ + *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); + } + + lg->snapshots_bid = logbat_new(TYPE_int, 1); + v = BATmark(b, 0); + BATappend(lg->snapshots_bid, BATmirror(v), FALSE); + BBPunfix(v->batCacheid); + BATmode(lg->snapshots_bid, PERSISTENT); + snprintf(bak, BUFSIZ, "%s_snapshots_bid", fn); + BBPrename(lg->snapshots_bid->batCacheid, bak); + logger_add_bat(lg, lg->snapshots_bid, "snapshots_bid"); + lg->snapshots_tid = logbat_new(TYPE_int, 1); + v = BATmark(BATmirror(b), 0); + BATappend(lg->snapshots_tid, BATmirror(v), FALSE); + BBPunfix(v->batCacheid); + BATmode(lg->snapshots_tid, PERSISTENT); + snprintf(bak, BUFSIZ, "%s_snapshots_tid", fn); + BBPrename(lg->snapshots_tid->batCacheid, bak); + logger_add_bat(lg, lg->snapshots_tid, "snapshots_tid"); + logbat_destroy(b); + /* split seqs -> seqs_id, seqs_val */ + *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); + } + + lg->seqs_id = logbat_new(TYPE_int, 1); + v = BATmark(b, 0); + BATappend(lg->seqs_id, BATmirror(v), FALSE); + BBPunfix(v->batCacheid); + BATmode(lg->seqs_id, PERSISTENT); + snprintf(bak, BUFSIZ, "%s_seqs_id", fn); + BBPrename(lg->seqs_id->batCacheid, bak); + logger_add_bat(lg, lg->seqs_id, "seqs_id"); + lg->seqs_val = logbat_new(TYPE_lng, 1); + v = BATmark(BATmirror(b), 0); + BATappend(lg->seqs_val, BATmirror(v), FALSE); + BBPunfix(v->batCacheid); + BATmode(lg->seqs_val, PERSISTENT); + snprintf(bak, BUFSIZ, "%s_seqs_val", fn); + BBPrename(lg->seqs_val->batCacheid, bak); + logger_add_bat(lg, lg->seqs_val, "seqs_val"); + logbat_destroy(b); + bm_subcommit(lg->catalog_bid, lg->catalog_nme, lg->catalog_bid, lg->catalog_nme, NULL, lg->debug); + logbat_destroy(lg->catalog_bid); + logbat_destroy(lg->catalog_nme); + logbat_destroy(lg->snapshots_bid); + logbat_destroy(lg->snapshots_tid); + logbat_destroy(lg->seqs_id); + logbat_destroy(lg->seqs_val); + lg->catalog_bid = NULL; + lg->catalog_nme = NULL; + lg->snapshots_bid = NULL; + lg->snapshots_tid = NULL; + lg->seqs_id = NULL; + lg->seqs_val = NULL; +} + static logger * logger_new(int debug, char *fn, logger_settings *log_settings, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp) { @@ -1110,105 +1203,9 @@ logger_new(int debug, char *fn, logger_s snprintf(bak, BUFSIZ, "%s_catalog", fn); bid = BBPindex(bak); - /* upgrade from old logger format */ if (bid) { - /* split catalog -> catalog_bid, catalog_nme */ - BAT *b = BATdescriptor(bid); - BAT *v; - - if (b == 0) - logger_fatal("Logger_new: inconsistent database, '%s' does not exist",bak,0,0); - lg->catalog_bid = logbat_new(TYPE_int, BATSIZE); - lg->catalog_nme = logbat_new(TYPE_str, BATSIZE); - - v = BATmark(b, 0); - BATappend(lg->catalog_bid, BATmirror(v), FALSE); - BBPunfix(v->batCacheid); - v = BATmark(BATmirror(b), 0); - BATappend(lg->catalog_nme, BATmirror(v), FALSE); - BBPunfix(v->batCacheid); - - /* Make persistent */ - bid = lg->catalog_bid->batCacheid; - BBPincref(bid, TRUE); - BATmode(lg->catalog_bid, PERSISTENT); - snprintf(bak, BUFSIZ, "%s_catalog_bid", fn); - BBPrename(lg->catalog_bid->batCacheid, bak); - - /* Make persistent */ - bid = lg->catalog_nme->batCacheid; - BBPincref(bid, TRUE); - BATmode(lg->catalog_nme, PERSISTENT); - snprintf(bak, BUFSIZ, "%s_catalog_nme", fn); - BBPrename(lg->catalog_nme->batCacheid, bak); - - logbat_destroy(b); - - /* split snapshots -> snapshots_bid, snapshots_tid */ - 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); - - lg->snapshots_bid = logbat_new(TYPE_int, 1); - v = BATmark(b, 0); - BATappend(lg->snapshots_bid, BATmirror(v), FALSE); - BBPunfix(v->batCacheid); - BATmode(lg->snapshots_bid, PERSISTENT); - snprintf(bak, BUFSIZ, "%s_snapshots_bid", fn); - BBPrename(lg->snapshots_bid->batCacheid, bak); - logger_add_bat(lg, lg->snapshots_bid, "snapshots_bid"); - - lg->snapshots_tid = logbat_new(TYPE_int, 1); - v = BATmark(BATmirror(b), 0); - BATappend(lg->snapshots_tid, BATmirror(v), FALSE); - BBPunfix(v->batCacheid); - BATmode(lg->snapshots_tid, PERSISTENT); - snprintf(bak, BUFSIZ, "%s_snapshots_tid", fn); - BBPrename(lg->snapshots_tid->batCacheid, bak); - logger_add_bat(lg, lg->snapshots_tid, "snapshots_tid"); - - logbat_destroy(b); - - /* split seqs -> seqs_id, seqs_val */ - 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); - - lg->seqs_id = logbat_new(TYPE_int, 1); - v = BATmark(b, 0); - BATappend(lg->seqs_id, BATmirror(v), FALSE); - BBPunfix(v->batCacheid); - BATmode(lg->seqs_id, PERSISTENT); - snprintf(bak, BUFSIZ, "%s_seqs_id", fn); - BBPrename(lg->seqs_id->batCacheid, bak); - logger_add_bat(lg, lg->seqs_id, "seqs_id"); - - lg->seqs_val = logbat_new(TYPE_lng, 1); - v = BATmark(BATmirror(b), 0); - BATappend(lg->seqs_val, BATmirror(v), FALSE); - BBPunfix(v->batCacheid); - BATmode(lg->seqs_val, PERSISTENT); - snprintf(bak, BUFSIZ, "%s_seqs_val", fn); - BBPrename(lg->seqs_val->batCacheid, bak); - logger_add_bat(lg, lg->seqs_val, "seqs_val"); - - logbat_destroy(b); - - bm_subcommit(lg->catalog_bid, lg->catalog_nme, lg->catalog_bid, lg->catalog_nme, NULL, lg->debug); - logbat_destroy(lg->catalog_bid); - logbat_destroy(lg->catalog_nme); - logbat_destroy(lg->snapshots_bid); - logbat_destroy(lg->snapshots_tid); - logbat_destroy(lg->seqs_id); - logbat_destroy(lg->seqs_val); - lg->catalog_bid = NULL; - lg->catalog_nme = NULL; - lg->snapshots_bid = NULL; - lg->snapshots_tid = NULL; - lg->seqs_id = NULL; - lg->seqs_val = NULL; + /* upgrade from old logger format */ + logger_upgrade_format(fn, lg, &bid, &bak[0]); } snprintf(bak, BUFSIZ, "%s_catalog_bid", fn); @@ -2182,4 +2179,3 @@ logger_find_bat(logger *lg, char *name) res = *(log_bid *) Tloc(lg->catalog_bid, p); return res; } - diff --git a/gdk/gdk_logger.h b/gdk/gdk_logger.h --- a/gdk/gdk_logger.h +++ b/gdk/gdk_logger.h @@ -80,7 +80,7 @@ typedef struct logger { /* Holds logger settings * if shared_logdir and shared_drift_threshold are set, - * as well as if readonly = 1, the instance presumed to be in slave mode*/ + * as well as if readonly = 1, the instance is assumed to be in slave mode*/ typedef struct logger_settings { char *logdir; /* server (the regular) write-ahead log directory */ char *shared_logdir; /* shared write-ahead log directory */ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list