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

merged with jul2021


diffs (71 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1248,7 +1248,6 @@ append_col(sql_trans *tr, sql_column *c,
        sql_delta *delta, *odelta = ATOMIC_PTR_GET(&c->data);
        int in_transaction = segments_in_transaction(tr, c->t);
 
-       assert((BUN)offset < (BUN_NONE-10));
        if ((delta = bind_col_data(tr, c, NULL)) == NULL)
                return LOG_ERR;
 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3390,18 +3390,18 @@ sql_trans_commit(sql_trans *tr)
 {
        int ok = LOG_OK;
        sqlstore *store = tr->store;
+
        store_lock(store);
-       ulng commit_ts = tr->parent ? tr->parent->tid : store_timestamp(store);
        ulng oldest = store_oldest(store);
 
        if (tr->predicates && !sql_trans_valid(tr))
                        return LOG_ERR;
 
-       /* write phase */
-       TRC_DEBUG(SQL_STORE, "Forwarding changes (" ULLFMT ", " ULLFMT ") -> " 
ULLFMT "\n", tr->tid, tr->ts, commit_ts);
        store_pending_changes(store, oldest);
        oldest = store_oldest_pending(store);
+       store_unlock(store);
        if (tr->changes) {
+               ulng commit_ts = 0;
                int min_changes = GDKdebug & FORCEMITOMASK ? 5 : 100000;
                int flush = (tr->logchanges > min_changes && !store->changes);
                /* log changes should only be done if there is something to log 
*/
@@ -3417,10 +3417,16 @@ sql_trans_commit(sql_trans *tr)
                        if (ok == LOG_OK && store->prev_oid != store->obj_id)
                                ok = store->logger_api.log_sequence(store, 
OBJ_SID, store->obj_id);
                        store->prev_oid = store->obj_id;
+                       store_lock(store);
+                       commit_ts = tr->parent ? tr->parent->tid : 
store_timestamp(store);
                        if (ok == LOG_OK && !flush)
                                ok = store->logger_api.log_tend(store, 
commit_ts);
+               } else {
+                       store_lock(store);
+                       commit_ts = tr->parent ? tr->parent->tid : 
store_timestamp(store);
                }
                tr->logchanges = 0;
+               TRC_DEBUG(SQL_STORE, "Forwarding changes (" ULLFMT ", " ULLFMT 
") -> " ULLFMT "\n", tr->tid, tr->ts, commit_ts);
                /* apply committed changes */
                if (ATOMIC_GET(&store->nr_active) == 1) {
                        oldest = commit_ts;
@@ -3454,6 +3460,8 @@ sql_trans_commit(sql_trans *tr)
                }
                list_destroy(tr->changes);
                tr->changes = NULL;
+               tr->ts = commit_ts;
+               store_unlock(store);
        }
        /* drop local temp tables with commit action CA_DROP, after cleanup */
        if (cs_size(&tr->localtmps)) {
@@ -3471,8 +3479,6 @@ sql_trans_commit(sql_trans *tr)
                tr->localtmps.dset = NULL;
        }
        tr->localtmps.nelm = NULL;
-       tr->ts = commit_ts;
-       store_unlock(store);
        return (ok==LOG_OK)?SQL_OK:SQL_ERR;
 }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to