mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2025-05-10 18:05:44 +02:00
fix: Don't remove non-concluding tx from queue on ooo runs (#1427)
* fix: Don't remove non-concluding tx from queue on ooo runs --------- Signed-off-by: Vladislav Oleshko <vlad@dragonflydb.io>
This commit is contained in:
parent
7ec5bd912c
commit
6d4d740d6e
4 changed files with 61 additions and 16 deletions
|
@ -423,7 +423,7 @@ string Transaction::DebugId() const {
|
|||
}
|
||||
|
||||
// Runs in the dbslice thread. Returns true if transaction needs to be kept in the queue.
|
||||
bool Transaction::RunInShard(EngineShard* shard) {
|
||||
bool Transaction::RunInShard(EngineShard* shard, bool txq_ooo) {
|
||||
DCHECK_GT(run_count_.load(memory_order_relaxed), 0u);
|
||||
CHECK(cb_ptr_) << DebugId();
|
||||
DCHECK_GT(txid_, 0u);
|
||||
|
@ -491,9 +491,11 @@ bool Transaction::RunInShard(EngineShard* shard) {
|
|||
// at least the coordinator thread owns the reference.
|
||||
DCHECK_GE(GetUseCount(), 1u);
|
||||
|
||||
// we remove tx from tx-queue upon first invocation.
|
||||
// if it needs to run again it runs via a dedicated continuation_trans_ state in EngineShard.
|
||||
if (sd.pq_pos != TxQueue::kEnd) {
|
||||
// If we're the head of tx queue (txq_ooo is false), we remove ourselves upon first invocation
|
||||
// and successive hops are run by continuation_trans_ in engine shard.
|
||||
// Otherwise we can remove ourselves only when we're concluding (so no more hops will follow).
|
||||
bool remove_txq = is_concluding || !txq_ooo;
|
||||
if (remove_txq && sd.pq_pos != TxQueue::kEnd) {
|
||||
shard->txq()->Remove(sd.pq_pos);
|
||||
sd.pq_pos = TxQueue::kEnd;
|
||||
}
|
||||
|
@ -1152,6 +1154,7 @@ OpStatus Transaction::WatchInShard(ArgSlice keys, EngineShard* shard) {
|
|||
bc->AddWatched(keys, this);
|
||||
|
||||
sd.local_mask |= SUSPENDED_Q;
|
||||
sd.local_mask &= ~OUT_OF_ORDER;
|
||||
DVLOG(2) << "AddWatched " << DebugId() << " local_mask:" << sd.local_mask
|
||||
<< ", first_key:" << keys.front();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue