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