Changeset: dba9b15a8bf0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/dba9b15a8bf0
Modified Files:
gdk/gdk_logger.c
Branch: Sep2022
Log Message:
merged with Jan2022
diffs (121 lines):
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -2273,25 +2273,30 @@ log_create(int debug, const char *fn, co
static ulng
log_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
-log_cleanup_range(logger *lg)
+log_cleanup_range(logger *lg, ulng id)
{
- if (lg->pending) {
+ log_lock(lg);
+ while (lg->pending && lg->pending->id <= id) {
logged_range *p;
- log_lock(lg);
p = lg->pending;
if (p)
lg->pending = p->next;
- log_unlock(lg);
GDKfree(p);
}
+ log_unlock(lg);
}
gdk_return
@@ -2317,12 +2322,12 @@ log_activate(logger *lg)
gdk_return
log_flush(logger *lg, ulng ts)
{
- ulng lid = log_next_logfile(lg, ts);
+ ulng lid = log_next_logfile(lg, ts), olid = lg->saved_id;
if (LOG_DISABLED(lg)) {
lg->saved_id = lid;
lg->saved_tid = lg->tid;
if (lid)
- log_cleanup_range(lg);
+ log_cleanup_range(lg, lg->saved_id);
if (log_commit(lg) != GDK_SUCCEED)
TRC_ERROR(GDK, "failed to commit");
return GDK_SUCCEED;
@@ -2335,13 +2340,14 @@ log_flush(logger *lg, ulng ts)
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 >= lgid)
- 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;
}
@@ -2370,22 +2376,25 @@ log_flush(logger *lg, ulng ts)
log_close_input(lg);
res = LOG_OK;
}
+ cid++;
+ }
+ if (lid > olid && res == LOG_OK) {
+ lg->saved_id = lid;
+ if (log_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 (log_commit(lg) != GDK_SUCCEED) {
- TRC_ERROR(GDK, "failed to commit");
- res = LOG_ERR;
- }
-
- /* remove old log file */
- if (res != LOG_ERR) {
- if (log_cleanup(lg, lg->saved_id) !=
GDK_SUCCEED)
- res = LOG_ERR;
+ while(olid <= lid) {
+ /* Try to cleanup, remove old log file,
continue on failure! */
+ (void)log_cleanup(lg, olid);
+ olid++;
}
}
+ if (res == LOG_OK)
+ log_cleanup_range(lg, lg->saved_id);
}
- if (lid && res == LOG_OK)
- log_cleanup_range(lg);
return res == LOG_ERR ? GDK_FAIL : GDK_SUCCEED;
}
@@ -3163,7 +3172,7 @@ log_tstart(logger *lg, bool flushnow, ul
}
lg->request_rotation = false;
if (flushnow) {
- while (lg->saved_id+1 < lg->id) {
+ if (lg->saved_id+1 < lg->id) {
log_unlock(lg);
MT_lock_unset(&lg->rotation_lock);
if (log_flush(lg, (1ULL<<63)) != GDK_SUCCEED)
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]