Changeset: a7d47be1a358 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a7d47be1a358
Modified Files:
gdk/gdk_logger.c
Branch: Jan2022
Log Message:
Merge with Jul2021 branch.
diffs (112 lines):
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -2246,19 +2246,26 @@ logger_create(int debug, const char *fn,
static ulng
logger_next_logfile(logger *lg, ulng ts)
{
+ int m = (GDKdebug & FORCEMITOMASK)?1000:10;
if (!lg->pending || !lg->pending->next)
return 0;
- if (lg->pending->last_ts <= ts)
- return lg->pending->id;
+ if (lg->pending != lg->current && lg->pending->last_ts <= ts) {
+ logged_range *p = lg->pending;
+ for(int i = 1; i<m && p->next && p->next != lg->current &&
p->last_ts <= ts; i++)
+ p = p->next;
+ return p->id;
+ }
return 0;
}
static void
-logger_cleanup_range(logger *lg)
+logger_cleanup_range(logger *lg, ulng id)
{
- logged_range *p = lg->pending;
- if (p) {
- lg->pending = p->next;
+ while (lg->pending && lg->pending->id <= id) {
+ logged_range *p;
+ p = lg->pending;
+ if (p)
+ lg->pending = p->next;
GDKfree(p);
}
}
@@ -2279,28 +2286,30 @@ logger_activate(logger *lg)
gdk_return
logger_flush(logger *lg, ulng ts)
{
- ulng lid = logger_next_logfile(lg, ts);
+ ulng lid = logger_next_logfile(lg, ts), olid = lg->saved_id;
if (LOG_DISABLED(lg)) {
lg->saved_id = lid;
lg->saved_tid = lg->tid;
if (lid)
- logger_cleanup_range(lg);
+ logger_cleanup_range(lg, lg->saved_id);
if (logger_commit(lg) != GDK_SUCCEED)
TRC_ERROR(GDK, "failed to commit");
return GDK_SUCCEED;
}
if (lg->saved_id >= lid)
return GDK_SUCCEED;
- if (lg->saved_id+1 >= lg->id) /* logger should first release the file */
+ ulng lgid = lg->id;
+ if (lg->saved_id+1 >= lgid) /* logger should first release the file */
return GDK_SUCCEED;
log_return res = LOG_OK;
- while(lg->saved_id < lid && res == LOG_OK) {
- if (lg->saved_id >= lg->id)
- break;
+ ulng cid = olid;
+ if (lid > lgid)
+ lid = lgid;
+ while(cid < lid && res == LOG_OK) {
if (!lg->input_log) {
char *filename;
char id[32];
- if (snprintf(id, sizeof(id), LLFMT, lg->saved_id+1) >=
(int) sizeof(id)) {
+ if (snprintf(id, sizeof(id), LLFMT, cid+1) >= (int)
sizeof(id)) {
TRC_CRITICAL(GDK, "log_id filename is too
large\n");
return GDK_FAIL;
}
@@ -2329,22 +2338,25 @@ logger_flush(logger *lg, ulng ts)
logger_close_input(lg);
res = LOG_OK;
}
+ cid++;
+ }
+ if (lid > olid && res == LOG_OK) {
+ lg->saved_id = lid;
+ if (logger_commit(lg) != GDK_SUCCEED) {
+ TRC_ERROR(GDK, "failed to commit");
+ res = LOG_ERR;
+ lg->saved_id = olid; /* reset !! */
+ }
if (res != LOG_ERR) {
- lg->saved_id++;
- if (logger_commit(lg) != GDK_SUCCEED) {
- TRC_ERROR(GDK, "failed to commit");
- res = LOG_ERR;
- }
-
- /* remove old log file */
- if (res != LOG_ERR) {
- if (logger_cleanup(lg, lg->saved_id) !=
GDK_SUCCEED)
- res = LOG_ERR;
+ while(olid <= lid) {
+ /* Try to cleanup, remove old log file,
continue on failure! */
+ (void)logger_cleanup(lg, olid);
+ olid++;
}
}
+ if (res == LOG_OK)
+ logger_cleanup_range(lg, lg->saved_id);
}
- if (lid && res == LOG_OK)
- logger_cleanup_range(lg);
return res == LOG_ERR ? GDK_FAIL : GDK_SUCCEED;
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]