Changeset: d063f4bde9ac for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d063f4bde9ac
Modified Files:
sql/storage/store.c
Branch: Jul2021
Log Message:
Make sure always the dependencies older than the oldest uncommitted transaction
get cleaned. Cleanup
diffs (85 lines):
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2228,8 +2228,14 @@ store_pending_changes(sqlstore *store, u
n = next;
}
}
- id_hash_clear_older(store->dependencies, oldest);
- id_hash_clear_older(store->depchanges, oldest);
+ if (ATOMIC_GET(&store->nr_active) < 2) { /* one or no transaction
running */
+ dep_hash_clear(store->dependencies);
+ dep_hash_clear(store->depchanges);
+ } else {
+ ulng stoldest = store_oldest(store);
+ id_hash_clear_older(store->dependencies, stoldest);
+ id_hash_clear_older(store->depchanges, stoldest);
+ }
store->oldest_pending = oldest_changes;
}
@@ -2249,9 +2255,6 @@ store_manager(sqlstore *store)
store_lock(store);
if (ATOMIC_GET(&store->nr_active) == 0) {
ulng oldest = store_timestamp(store)+1;
-
- dep_hash_clear(store->dependencies);
- dep_hash_clear(store->depchanges);
store_pending_changes(store, oldest);
}
store_unlock(store);
@@ -3401,10 +3404,6 @@ sql_trans_rollback(sql_trans *tr)
c->commit(tr, c, 0 /* ie rollback */, oldest);
c->ts = commit_ts;
}
- if (ATOMIC_GET(&store->nr_active) == 1 && !tr->parent) {
- dep_hash_clear(store->dependencies);
- dep_hash_clear(store->depchanges);
- }
store_pending_changes(store, oldest);
for(node *n=nl->h; n; n = n->next) {
sql_change *c = n->data;
@@ -3425,10 +3424,6 @@ sql_trans_rollback(sql_trans *tr)
} else if (ATOMIC_GET(&store->nr_active) == 1) { /* just me cleanup */
MT_lock_set(&store->commit);
store_lock(store);
- if (ATOMIC_GET(&store->nr_active) == 1 && !tr->parent) {
- dep_hash_clear(store->dependencies);
- dep_hash_clear(store->depchanges);
- }
ulng oldest = store_timestamp(store);
store_pending_changes(store, oldest);
store_unlock(store);
@@ -3731,11 +3726,8 @@ sql_trans_commit(sql_trans *tr)
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 && !tr->parent) {
- dep_hash_clear(store->dependencies);
- dep_hash_clear(store->depchanges);
+ if (ATOMIC_GET(&store->nr_active) == 1 && !tr->parent)
oldest = commit_ts;
- }
store_pending_changes(store, oldest);
for(node *n=tr->changes->h; n && ok == LOG_OK; n = n->next) {
sql_change *c = n->data;
@@ -3756,7 +3748,7 @@ sql_trans_commit(sql_trans *tr)
MT_lock_unset(&store->flush);
}
/* propagate transaction dependencies to the storage only if
other transactions are running */
- if (ok == LOG_OK && !tr->parent &&
(!list_empty(tr->dependencies) || !list_empty(tr->depchanges)) &&
ATOMIC_GET(&store->nr_active) > 1) {
+ if (ok == LOG_OK && !tr->parent &&
ATOMIC_GET(&store->nr_active) > 1) {
if (!list_empty(tr->dependencies)) {
for (node *n = tr->dependencies->h; n && ok ==
LOG_OK; n = n->next) {
sql_dependency_change *lchange =
(sql_dependency_change*) n->data;
@@ -3792,10 +3784,6 @@ sql_trans_commit(sql_trans *tr)
} else if (ATOMIC_GET(&store->nr_active) == 1) { /* just me cleanup */
MT_lock_set(&store->commit);
store_lock(store);
- if (ATOMIC_GET(&store->nr_active) == 1 && !tr->parent) {
- dep_hash_clear(store->dependencies);
- dep_hash_clear(store->depchanges);
- }
ulng oldest = store_timestamp(store);
store_pending_changes(store, oldest);
store_unlock(store);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list