Changeset: 9a27d4b4a1df for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9a27d4b4a1df
Modified Files:
        sql/storage/store.c
Branch: Jul2021
Log Message:

improved oldest transaction/pending change timestamp administration
improved detection of cleaned changes


diffs (83 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1981,7 +1981,7 @@ store_exit(sqlstore *store)
                        MT_lock_set(&store->flush);
                }
                MT_lock_set(&store->commit);
-               if (store->changes) {
+               if (!list_empty(store->changes)) {
                        ulng oldest = store_timestamp(store)+1;
                        for(node *n=store->changes->h; n; n = n->next) {
                                sql_change *c = n->data;
@@ -2050,7 +2050,7 @@ store_resume_log(sqlstore *store)
 static void
 store_pending_changes(sqlstore *store, ulng oldest)
 {
-       ulng oldest_changes = TRANSACTION_ID_BASE;
+       ulng oldest_changes = store_get_timestamp(store);
        if (!list_empty(store->changes)) { /* lets first cleanup old stuff */
                for(node *n=store->changes->h; n; ) {
                        node *next = n->next;
@@ -2066,11 +2066,8 @@ store_pending_changes(sqlstore *store, u
                        }
                        n = next;
                }
-               if (oldest_changes < TRANSACTION_ID_BASE)
-                       store->oldest_pending = oldest_changes;
-       } else {
-               store->oldest_pending = store_get_timestamp(store);
-       }
+       }
+       store->oldest_pending = oldest_changes;
 }
 
 void
@@ -3254,7 +3251,7 @@ sql_trans_rollback(sql_trans *tr)
                        n = next;
                }
        }
-       if (tr->changes) {
+       if (!list_empty(tr->changes)) {
                /* revert the change list */
                list *nl = SA_LIST(tr->sa, (fdestroy) NULL);
                for(node *n=tr->changes->h; n; n = n->next)
@@ -3425,7 +3422,7 @@ sql_trans_commit(sql_trans *tr)
        int ok = LOG_OK;
        sqlstore *store = tr->store;
 
-       if (tr->changes) {
+       if (!list_empty(tr->changes)) {
                MT_lock_set(&store->commit);
                store_lock(store);
                ulng oldest = store_oldest(store);
@@ -3437,7 +3434,7 @@ sql_trans_commit(sql_trans *tr)
                /* log changes should only be done if there is something to log 
*/
                if (!tr->parent && tr->logchanges > 0) {
                        int min_changes = GDKdebug & FORCEMITOMASK ? 5 : 100000;
-                       flush = (tr->logchanges > min_changes && 
!store->changes);
+                       flush = (tr->logchanges > min_changes && 
list_empty(store->changes));
                        if (flush)
                                MT_lock_set(&store->flush);
                        ok = store->logger_api.log_tstart(store, flush);
@@ -6325,17 +6322,15 @@ sql_trans_end(sql_session *s, int commit
        store_lock(store);
        list_remove_data(store->active, NULL, s);
        (void) ATOMIC_DEC(&store->nr_active);
+       ulng oldest = store_get_timestamp(store);
        if (store->active && store->active->h) {
-               ulng oldest = TRANSACTION_ID_BASE;
                for(node *n = store->active->h; n; n = n->next) {
                        sql_session *s = n->data;
                        if (s->tr->ts < oldest)
                                oldest = s->tr->ts;
                }
-               store->oldest = oldest;
-       } else {
-               store->oldest = store_get_timestamp(store);
-       }
+       }
+       store->oldest = oldest;
        assert(list_length(store->active) == (int) 
ATOMIC_GET(&store->nr_active));
        store_unlock(store);
        return ok;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to