Changeset: bbd505e1da96 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/bbd505e1da96
Modified Files:
        gdk/gdk_logger.c
Branch: Jun2023
Log Message:

rotate/flush on log_activate if possible


diffs (61 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -2356,17 +2356,37 @@ log_cleanup_range(logger *lg, ulng id)
        }
 }
 
+static void
+do_rotate(logger *lg) {
+       logged_range* next      = lg->current->next;
+       if (next) {
+               assert(ATOMIC_GET(&next->refcount) == 1);
+               ulng end = ATOMIC_GET(&lg->current->end);
+               ATOMIC_SET(&next->pend, end);
+               ATOMIC_SET(&next->end, end);
+               assert(ATOMIC_GET(&lg->current->refcount) > 0);
+               lg->current = lg->current->next;
+       }
+}
+
 gdk_return
 log_activate(logger *lg)
 {
+       bool flush = false;
        gdk_return res = GDK_SUCCEED;
        rotation_lock(lg);
        if (!lg->current->next && lg->current->drops > 100000 && ((ulng) 
ATOMIC_GET(&lg->current->end) - (ulng) ATOMIC_GET(&lg->current->pend)) > 0 && 
lg->saved_id+1 == lg->id) {
                lg->id++;
                /* start new file */
                res = log_open_output(lg);
+               if(ATOMIC_GET(&lg->current->refcount) == 1) {
+                       flush = true;
+                       do_rotate(lg);
+               }
        }
        rotation_unlock(lg);
+       if (flush)
+               (void) do_flush_range_cleanup(lg);
        return res;
 }
 
@@ -2933,19 +2953,6 @@ log_tdone(logger* lg, logged_range *rang
                ATOMIC_SET(&range->last_ts, commit_ts);
 }
 
-static void
-do_rotate(logger *lg) {
-       logged_range* next      = lg->current->next;
-       if (next) {
-               assert(ATOMIC_GET(&next->refcount) == 1);
-               ulng end = ATOMIC_GET(&lg->current->end);
-               ATOMIC_SET(&next->pend, end);
-               ATOMIC_SET(&next->end, end);
-               assert(ATOMIC_GET(&lg->current->refcount) > 0);
-               lg->current = lg->current->next;
-       }
-}
-
 gdk_return
 log_tflush(logger* lg, ulng writer_end, ulng commit_ts) {
 
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to