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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list