Changeset: 44761c87698a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/44761c87698a
Modified Files:
gdk/gdk_logger.c
Branch: Jul2021
Log Message:
make sure we (sub)commit the bats when using sql_debug=128
diffs (214 lines):
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -777,7 +777,6 @@ la_apply(logger *lg, logaction *c)
case LOG_CREATE:
if (!lg->flushing)
ret = la_bat_create(lg, c);
- lg->cnt++;
break;
case LOG_DESTROY:
if (!lg->flushing)
@@ -934,38 +933,44 @@ logger_create_types_file(logger *lg, con
static gdk_return
logger_open_output(logger *lg)
{
- char id[32];
- char *filename;
+ logged_range *new_range =
(logged_range*)GDKmalloc(sizeof(logged_range));
- if (LOG_DISABLED(lg)) {
- lg->end = 0;
- if (lg->id) /* go back to last used id */
- lg->id--;
- return GDK_SUCCEED;
- }
- if (snprintf(id, sizeof(id), LLFMT, lg->id) >= (int) sizeof(id)) {
- TRC_CRITICAL(GDK, "filename is too large\n");
- return GDK_FAIL;
- }
- if (!(filename = GDKfilepath(BBPselectfarm(PERSISTENT, 0, offheap),
lg->dir, LOGFILE, id))) {
+ if (!new_range) {
TRC_CRITICAL(GDK, "allocation failure\n");
return GDK_FAIL;
}
- lg->output_log = open_wstream(filename);
- if (lg->output_log) {
- short byteorder = 1234;
- mnstr_write(lg->output_log, &byteorder, sizeof(byteorder), 1);
- }
- lg->end = 0;
+ if (LOG_DISABLED(lg)) {
+ lg->end = 0;
+ } else {
+ char id[32];
+ char *filename;
- logged_range *new_range =
(logged_range*)GDKmalloc(sizeof(logged_range));
+ if (snprintf(id, sizeof(id), LLFMT, lg->id) >= (int)
sizeof(id)) {
+ TRC_CRITICAL(GDK, "filename is too large\n");
+ GDKfree(new_range);
+ return GDK_FAIL;
+ }
+ if (!(filename = GDKfilepath(BBPselectfarm(PERSISTENT, 0,
offheap), lg->dir, LOGFILE, id))) {
+ TRC_CRITICAL(GDK, "allocation failure\n");
+ GDKfree(new_range);
+ return GDK_FAIL;
+ }
- if (lg->output_log == NULL || mnstr_errnr(lg->output_log) ||
!new_range) {
- TRC_CRITICAL(GDK, "creating %s failed: %s\n", filename,
mnstr_peek_error(NULL));
- GDKfree(new_range);
+ lg->output_log = open_wstream(filename);
+ if (lg->output_log) {
+ short byteorder = 1234;
+ mnstr_write(lg->output_log, &byteorder,
sizeof(byteorder), 1);
+ }
+ lg->end = 0;
+
+ if (lg->output_log == NULL || mnstr_errnr(lg->output_log)) {
+ TRC_CRITICAL(GDK, "creating %s failed: %s\n", filename,
mnstr_peek_error(NULL));
+ GDKfree(new_range);
+ GDKfree(filename);
+ return GDK_FAIL;
+ }
GDKfree(filename);
- return GDK_FAIL;
}
new_range->id = lg->id;
new_range->first_tid = lg->tid;
@@ -977,7 +982,6 @@ logger_open_output(logger *lg)
lg->current = new_range;
if (!lg->pending)
lg->pending = new_range;
- GDKfree(filename);
return GDK_SUCCEED;
}
@@ -1403,7 +1407,6 @@ bm_subcommit(logger *lg)
n[i++] = col;
}
/* now commit catalog, so it's also up to date on disk */
- assert(!LOG_DISABLED(lg) || BATcount(catalog_bid) == lg->cnt);
sizes[i] = lg->cnt;
n[i++] = catalog_bid->batCacheid;
sizes[i] = lg->cnt;
@@ -2100,14 +2103,6 @@ logger_cleanup_range(logger *lg)
gdk_return
logger_activate(logger *lg)
{
- if (LOG_DISABLED(lg)) {
- if (lg->saved_id+1 == lg->id) {
- lg->saved_id++;
- lg->saved_tid = lg->tid;
- logger_cleanup_range(lg);
- }
- return GDK_SUCCEED;
- }
if (lg->end > 0 && lg->saved_id+1 == lg->id) {
lg->id++;
logger_close_output(lg);
@@ -2127,6 +2122,9 @@ logger_flush(logger *lg, ulng ts)
lg->saved_tid = lg->tid;
if (lid)
logger_cleanup_range(lg);
+ if (logger_commit(lg) != GDK_SUCCEED) {
+ TRC_ERROR(GDK, "failed to commit");
+ }
return GDK_SUCCEED;
}
if (lg->saved_id >= lid)
@@ -2285,6 +2283,8 @@ internal_log_bat(logger *lg, BAT *b, log
if (LOG_DISABLED(lg) || !nr) {
/* logging is switched off */
+ if (LOG_DISABLED(lg))
+ lg->end += nr;
if (nr)
return la_bat_update_count(lg, id, offset+cnt);
return GDK_SUCCEED;
@@ -2371,7 +2371,7 @@ log_bat_persists(logger *lg, BAT *b, log
return GDK_FAIL;
}
} else {
- lg->cnt++;
+ lg->end++;
}
if (lg->debug & 1)
fprintf(stderr, "#persists id (%d) bat (%d)\n", id,
b->batCacheid);
@@ -2397,7 +2397,7 @@ log_bat_transient(logger *lg, log_id id)
return GDK_FAIL;
}
} else {
- lg->cnt--;
+ lg->end++;
}
if (lg->debug & 1)
fprintf(stderr, "#Logged destroyed bat (%d) %d\n", id,
@@ -2440,6 +2440,7 @@ log_delta(logger *lg, BAT *uid, BAT *uva
assert(nr);
if (LOG_DISABLED(lg)) {
+ lg->end += nr;
/* logging is switched off */
logger_unlock(lg);
return GDK_SUCCEED;
@@ -2489,9 +2490,10 @@ log_bat_clear(logger *lg, int id)
{
logformat l;
- if (LOG_DISABLED(lg))
+ if (LOG_DISABLED(lg)) {
+ lg->end++;
return la_bat_update_count(lg, id, 0);
- // return GDK_SUCCEED;
+ }
l.flag = LOG_CLEAR;
l.id = id;
@@ -2551,8 +2553,10 @@ log_tend(logger *lg)
return logger_commit(lg);
}
- if (LOG_DISABLED(lg))
+ if (LOG_DISABLED(lg)) {
+ lg->end++;
return GDK_SUCCEED;
+ }
if (res != GDK_SUCCEED ||
log_write_format(lg, &l) != GDK_SUCCEED ||
@@ -2684,6 +2688,7 @@ logger_add_bat(logger *lg, BAT *b, log_i
BUNappend(lg->catalog_cnt, &cnt, false) != GDK_SUCCEED ||
BUNappend(lg->catalog_lid, &lid, false) != GDK_SUCCEED)
return GDK_FAIL;
+ lg->cnt++;
BBPretain(bid);
return GDK_SUCCEED;
}
@@ -2705,7 +2710,11 @@ logger_del_bat(logger *lg, log_bid bid)
assert(lg->catalog_lid->hseqbase == 0);
if (BUNreplace(lg->catalog_lid, p, &lid, false) != GDK_SUCCEED)
return GDK_FAIL;
- return BUNappend(lg->dcatalog, &pos, false);
+ if (BUNappend(lg->dcatalog, &pos, false) == GDK_SUCCEED) {
+ lg->cnt--;
+ return GDK_SUCCEED;
+ }
+ return GDK_FAIL;
}
log_bid
@@ -2738,8 +2747,10 @@ log_tstart(logger *lg, ulng commit_ts, b
lg->current->last_ts = commit_ts;
}
- if (LOG_DISABLED(lg))
+ if (LOG_DISABLED(lg)) {
+ lg->end++;
return GDK_SUCCEED;
+ }
l.flag = LOG_START;
l.id = ++lg->tid;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list