[Tarantool-patches] [PATCH 4/8] replication: make sync transactions wait quorum
Vladislav Shpilevoy
v.shpilevoy at tarantool.org
Thu Jun 11 17:57:13 MSK 2020
I added a new commmit with a small fix on top of
this one:
====================
limbo: remove entry from limbo before txn completion
[TO BE SQUASHED INTO THE PREVIOUS COMMIT]
- txn_limbo_wait_complete() didn't remove the limbo entry from
the limbo when the transaction appears to be completed right
away. As a result, the limbo entry stayed in the limbo, and
after the transaction termination turned into garbage, because
was allocated on its region;
- txn_limbo_ack() had the same problem - completed transaction
should be removed from limbo.
diff --git a/src/box/txn_limbo.c b/src/box/txn_limbo.c
index 3b9aa6d40..f38639676 100644
--- a/src/box/txn_limbo.c
+++ b/src/box/txn_limbo.c
@@ -123,8 +123,10 @@ txn_limbo_wait_complete(struct txn_limbo *limbo, struct txn_limbo_entry *entry)
assert(entry->lsn > 0);
assert(!txn_has_flag(txn, TXN_IS_DONE));
assert(txn_has_flag(txn, TXN_WAIT_ACK));
- if (txn_limbo_check_complete(limbo, entry))
+ if (txn_limbo_check_complete(limbo, entry)) {
+ txn_limbo_remove(limbo, entry);
return;
+ }
bool cancellable = fiber_set_cancellable(false);
while (!txn_limbo_entry_is_complete(entry))
fiber_yield();
@@ -144,8 +146,8 @@ txn_limbo_ack(struct txn_limbo *limbo, uint32_t replica_id, int64_t lsn)
assert(limbo->instance_id != REPLICA_ID_NIL);
int64_t prev_lsn = vclock_get(&limbo->vclock, replica_id);
vclock_follow(&limbo->vclock, replica_id, lsn);
- struct txn_limbo_entry *e;
- rlist_foreach_entry(e, &limbo->queue, in_queue) {
+ struct txn_limbo_entry *e, *tmp;
+ rlist_foreach_entry_safe(e, &limbo->queue, in_queue, tmp) {
if (e->lsn <= prev_lsn)
continue;
if (e->lsn > lsn)
@@ -158,6 +160,7 @@ txn_limbo_ack(struct txn_limbo *limbo, uint32_t replica_id, int64_t lsn)
// appliers will be supposed to wait for
// 'confirm' message.
e->is_commit = true;
+ rlist_del_entry(e, in_queue);
fiber_wakeup(e->txn->fiber);
}
assert(e->ack_count <= VCLOCK_MAX);
More information about the Tarantool-patches
mailing list