Changeset: e2fbfa61ce3f for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e2fbfa61ce3f Modified Files: gdk/gdk_logger.c sql/test/leaks/Tests/check0_bam.stable.out.int128 sql/test/leaks/Tests/check1_bam.stable.out sql/test/leaks/Tests/check1_bam.stable.out.int128 sql/test/leaks/Tests/check2_bam.stable.out sql/test/leaks/Tests/check2_bam.stable.out.int128 sql/test/leaks/Tests/check3_bam.stable.out sql/test/leaks/Tests/check3_bam.stable.out.int128 sql/test/leaks/Tests/check4_bam.stable.out sql/test/leaks/Tests/check4_bam.stable.out.int128 sql/test/leaks/Tests/check5_bam.stable.out sql/test/leaks/Tests/check5_bam.stable.out.int128 sql/test/leaks/Tests/drop3_bam.stable.out.int128 sql/test/leaks/Tests/temp1_bam.stable.out.int128 sql/test/leaks/Tests/temp2_bam.stable.out.int128 sql/test/leaks/Tests/temp3_bam.stable.out.int128 Branch: default Log Message:
store the sequence numbers only in the log, ie don't keep persistent bats for this. diffs (truncated from 702 to 300 lines): diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -797,6 +797,8 @@ tr_abort(logger *lg, trans *tr) return tr_destroy(tr); } +static int log_sequence_nrs(logger *lg); + static int logger_open(logger *lg) { @@ -806,11 +808,11 @@ logger_open(logger *lg) lg->log = open_wstream(filename); lg->end = 0; - if (lg->log == NULL || mnstr_errnr(lg->log)) { + + if (lg->log == NULL || mnstr_errnr(lg->log) || log_sequence_nrs(lg) != LOG_OK) { fprintf(stderr, "!ERROR: logger_open: creating %s failed\n", filename); return LOG_ERR; } - return LOG_OK; } @@ -1120,7 +1122,7 @@ logger_new(int debug, const char *fn, co FILE *fp; char filename[BUFSIZ]; char bak[BUFSIZ]; - log_bid seqs_id = 0; + log_bid snapshots_bid = 0; bat catalog_bid, catalog_nme, bid; /* if the path is absolute, it means someone is still calling @@ -1294,22 +1296,12 @@ logger_new(int debug, const char *fn, co BBPincref(bid, TRUE); } } - seqs_id = logger_find_bat(lg, "seqs_id"); - if (seqs_id == 0) { - lg->seqs_id = logbat_new(TYPE_int, 1, PERSISTENT); - snprintf(bak, BUFSIZ, "%s_seqs_id", fn); - if (BBPrename(lg->seqs_id->batCacheid, bak) < 0) - logger_fatal("Logger_new: BBPrename to %s failed", - bak, 0, 0); - logger_add_bat(lg, lg->seqs_id, "seqs_id"); + snapshots_bid = logger_find_bat(lg, "snapshots_bid"); + if (snapshots_bid == 0) { + lg->seqs_id = BATnew(TYPE_void, TYPE_int, 1, TRANSIENT); + lg->seqs_val = BATnew(TYPE_void, TYPE_lng, 1, TRANSIENT); - lg->seqs_val = logbat_new(TYPE_lng, 1, PERSISTENT); - snprintf(bak, BUFSIZ, "%s_seqs_val", fn); - if (BBPrename(lg->seqs_val->batCacheid, bak) < 0) - logger_fatal("Logger_new: BBPrename to %s failed", - bak, 0, 0); - logger_add_bat(lg, lg->seqs_val, "seqs_val"); - + /* create LOG_SID sequence number */ if (BUNappend(lg->seqs_id, &id, FALSE) == GDK_FAIL || BUNappend(lg->seqs_val, &lg->id, FALSE) == GDK_FAIL) logger_fatal("Logger_new: failed to append value to " @@ -1332,25 +1324,23 @@ logger_new(int debug, const char *fn, co if (bm_subcommit(lg->catalog_bid, lg->catalog_nme, lg->catalog_bid, lg->catalog_nme, NULL, lg->debug) < 0) logger_fatal("Logger_new: commit failed", 0, 0, 0); } else { + bat seqs_id = logger_find_bat(lg, "seqs_id"); bat seqs_val = logger_find_bat(lg, "seqs_val"); - bat snapshots_bid = logger_find_bat(lg, "snapshots_bid"); bat snapshots_tid = logger_find_bat(lg, "snapshots_tid"); - lg->seqs_id = BATdescriptor(seqs_id); - if (lg->seqs_id == 0) - logger_fatal("Logger_new: inconsistent database, seqs_id does not exist", 0, 0, 0); - lg->seqs_val = BATdescriptor(seqs_val); - if (lg->seqs_val == 0) - logger_fatal("Logger_new: inconsistent database, seqs_val does not exist", 0, 0, 0); - if (BATcount(lg->seqs_id)) { - BUN p = logbat_find_int(lg->seqs_id, id); - lg->id = *(lng *) Tloc(lg->seqs_val, p); + if (seqs_id) { + BAT *o_id = BATdescriptor(seqs_id); + BAT *o_val = BATdescriptor(seqs_val); + + lg->seqs_id = BATcopy(o_id, TYPE_void, TYPE_int, 1, TRANSIENT); + lg->seqs_val = BATcopy(o_val, TYPE_void, TYPE_lng, 1, TRANSIENT); + BBPunfix(o_id->batCacheid); + BBPunfix(o_val->batCacheid); } else { - if (BUNappend(lg->seqs_id, &id, FALSE) == GDK_FAIL || - BUNappend(lg->seqs_val, &lg->id, FALSE) == GDK_FAIL) - logger_fatal("Logger_new: failed to append " - "value to sequences bat", 0, 0, 0); + lg->seqs_id = BATnew(TYPE_void, TYPE_int, 1, TRANSIENT); + lg->seqs_val = BATnew(TYPE_void, TYPE_lng, 1, TRANSIENT); } + lg->snapshots_bid = BATdescriptor(snapshots_bid); if (lg->snapshots_bid == 0) logger_fatal("Logger_new: inconsistent database, snapshots_bid does not exist", 0, 0, 0); @@ -2074,17 +2064,52 @@ log_abort(logger *lg) return LOG_OK; } +static int +log_sequence_(logger *lg, int seq, lng val) +{ + logformat l; + + l.flag = LOG_SEQ; + l.tid = lg->tid; + l.nr = seq; + + if (lg->debug & 1) + fprintf(stderr, "#log_sequence_ (%d," LLFMT ")\n", seq, val); + + if (log_write_format(lg, &l) == LOG_ERR || + !mnstr_writeLng(lg->log, val) || + mnstr_flush(lg->log) || + mnstr_fsync(lg->log) || + pre_allocate(lg) < 0) { + fprintf(stderr, "!ERROR: log_sequence_: write failed\n"); + return LOG_ERR; + } + return LOG_OK; +} + +static int +log_sequence_nrs(logger *lg) +{ + BATiter sii = bat_iterator(lg->seqs_id); + BATiter svi = bat_iterator(lg->seqs_val); + BUN p, q; + int ok = LOG_OK; + + BATloop(lg->seqs_id, p, q) { + const void *id = BUNtail(sii, p); + const void *val = BUNtail(svi, p); + + ok &= log_sequence_(lg, *(int*)id, *(lng*)val); + } + return ok; +} + /* a transaction in it self */ int log_sequence(logger *lg, int seq, lng val) { - logformat l; BUN p; - l.flag = LOG_SEQ; - l.tid = lg->tid; - l.nr = seq; - if (lg->debug & 1) fprintf(stderr, "#log_sequence (%d," LLFMT ")\n", seq, val); @@ -2094,17 +2119,7 @@ log_sequence(logger *lg, int seq, lng va } BUNappend(lg->seqs_id, &seq, FALSE); BUNappend(lg->seqs_val, &val, FALSE); - - if (log_write_format(lg, &l) == LOG_ERR || - !mnstr_writeLng(lg->log, val) || - mnstr_flush(lg->log) || - mnstr_fsync(lg->log) || - pre_allocate(lg) < 0) { - fprintf(stderr, "!ERROR: log_sequence: write failed\n"); - return LOG_ERR; - } - - return LOG_OK; + return log_sequence_(lg, seq, val); } static int diff --git a/sql/test/leaks/Tests/check0_bam.stable.out.int128 b/sql/test/leaks/Tests/check0_bam.stable.out.int128 --- a/sql/test/leaks/Tests/check0_bam.stable.out.int128 +++ b/sql/test/leaks/Tests/check0_bam.stable.out.int128 @@ -66,26 +66,24 @@ Ready. [ "oid", "int", 0 ] [ "oid", "int", 1 ] [ "oid", "int", 1 ] -[ "oid", "int", 2 ] -[ "oid", "int", 206 ] +[ "oid", "int", 204 ] [ "oid", "lng", 1 ] -[ "oid", "lng", 2 ] [ "oid", "str", 1 ] [ "oid", "str", 1 ] [ "oid", "str", 1 ] -[ "oid", "str", 206 ] +[ "oid", "str", 204 ] #select 'transient', count(*) from bbp() as bbp where kind like 'tran%'; % .L1, .L2 # table_name % L1, L2 # name % char, wrd # type % 9, 3 # length -[ "transient", 389 ] +[ "transient", 391 ] #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%'; % .L1, .L2 # table_name % L1, L2 # name % char, wrd # type % 10, 2 # length -[ "persistent", 12 ] +[ "persistent", 10 ] # 16:21:16 > # 16:21:16 > "Done." diff --git a/sql/test/leaks/Tests/check1_bam.stable.out b/sql/test/leaks/Tests/check1_bam.stable.out --- a/sql/test/leaks/Tests/check1_bam.stable.out +++ b/sql/test/leaks/Tests/check1_bam.stable.out @@ -67,7 +67,6 @@ Ready. [ "oid", "int", 1 ] [ "oid", "int", 1 ] [ "oid", "int", 1 ] -[ "oid", "int", 2 ] [ "oid", "int", 3 ] [ "oid", "int", 3 ] [ "oid", "int", 4 ] @@ -130,7 +129,6 @@ Ready. [ "oid", "lng", 0 ] [ "oid", "lng", 0 ] [ "oid", "lng", 1 ] -[ "oid", "lng", 2 ] [ "oid", "oid", 0 ] [ "oid", "oid", 0 ] [ "oid", "oid", 0 ] diff --git a/sql/test/leaks/Tests/check1_bam.stable.out.int128 b/sql/test/leaks/Tests/check1_bam.stable.out.int128 --- a/sql/test/leaks/Tests/check1_bam.stable.out.int128 +++ b/sql/test/leaks/Tests/check1_bam.stable.out.int128 @@ -67,7 +67,6 @@ Ready. [ "oid", "int", 1 ] [ "oid", "int", 1 ] [ "oid", "int", 1 ] -[ "oid", "int", 2 ] [ "oid", "int", 3 ] [ "oid", "int", 3 ] [ "oid", "int", 4 ] @@ -96,7 +95,7 @@ Ready. [ "oid", "int", 46 ] [ "oid", "int", 46 ] [ "oid", "int", 46 ] -[ "oid", "int", 206 ] +[ "oid", "int", 204 ] [ "oid", "int", 229 ] [ "oid", "int", 229 ] [ "oid", "int", 329 ] @@ -130,7 +129,6 @@ Ready. [ "oid", "lng", 0 ] [ "oid", "lng", 0 ] [ "oid", "lng", 1 ] -[ "oid", "lng", 2 ] [ "oid", "oid", 0 ] [ "oid", "oid", 0 ] [ "oid", "oid", 0 ] @@ -231,7 +229,7 @@ Ready. [ "oid", "str", 45 ] [ "oid", "str", 46 ] [ "oid", "str", 46 ] -[ "oid", "str", 206 ] +[ "oid", "str", 204 ] [ "oid", "str", 329 ] [ "oid", "str", 329 ] [ "oid", "str", 329 ] @@ -252,13 +250,13 @@ Ready. % L1, L2 # name % char, wrd # type % 9, 3 # length -[ "transient", 188 ] +[ "transient", 190 ] #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%'; % .L1, .L2 # table_name % L1, L2 # name % char, wrd # type % 10, 3 # length -[ "persistent", 214 ] +[ "persistent", 212 ] # 16:21:16 > # 16:21:16 > "Done." diff --git a/sql/test/leaks/Tests/check2_bam.stable.out b/sql/test/leaks/Tests/check2_bam.stable.out --- a/sql/test/leaks/Tests/check2_bam.stable.out +++ b/sql/test/leaks/Tests/check2_bam.stable.out @@ -67,7 +67,6 @@ Ready. [ "oid", "int", 1 ] [ "oid", "int", 1 ] [ "oid", "int", 1 ] -[ "oid", "int", 2 ] [ "oid", "int", 3 ] [ "oid", "int", 3 ] [ "oid", "int", 4 ] @@ -130,7 +129,6 @@ Ready. [ "oid", "lng", 0 ] [ "oid", "lng", 0 ] [ "oid", "lng", 1 ] -[ "oid", "lng", 2 ] _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list