From 39c1827fa73544edd4d4afd54c55a6d6cc8844c0 Mon Sep 17 00:00:00 2001 From: Vladislav Date: Mon, 30 Oct 2023 17:22:35 +0300 Subject: [PATCH] fix(transaction): Reset reverse index in multi-tx (#2086) * fix(transaction): Reset reverse index in multi-tx Signed-off-by: Vladislav Oleshko --------- Signed-off-by: Vladislav Oleshko --- src/server/multi_test.cc | 8 ++++++++ src/server/transaction.cc | 7 +++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/server/multi_test.cc b/src/server/multi_test.cc index 405d03353..75b6dc28e 100644 --- a/src/server/multi_test.cc +++ b/src/server/multi_test.cc @@ -777,6 +777,14 @@ TEST_F(MultiTest, TestSquashing) { done.store(true); f1.Join(); + + // Test some more unusual commands + Run({"multi"}); + Run({"mget", "x1", "x2", "x3"}); + Run({"mget", "x4"}); + Run({"mget", "x5", "x6", "x7", "x8"}); + Run({"ft.search", "i1", "*"}); + Run({"exec"}); } TEST_F(MultiTest, MultiLeavesTxQueue) { diff --git a/src/server/transaction.cc b/src/server/transaction.cc index 795de10ba..52f95664d 100644 --- a/src/server/transaction.cc +++ b/src/server/transaction.cc @@ -294,7 +294,7 @@ void Transaction::InitByKeys(KeyIndex key_index) { // Validation. Check reverse mapping was built correctly. if (needs_reverse_mapping) { for (size_t i = 0; i < args_.size(); ++i) { - DCHECK_EQ(args_[i], ArgS(args, reverse_index_[i])); + DCHECK_EQ(args_[i], ArgS(args, reverse_index_[i])) << args; } } @@ -393,7 +393,10 @@ void Transaction::MultiSwitchCmd(const CommandId* cid) { unique_shard_id_ = 0; unique_shard_cnt_ = 0; + args_.clear(); + reverse_index_.clear(); + cid_ = cid; cb_ptr_ = nullptr; @@ -1414,7 +1417,7 @@ void Transaction::CancelBlocking() { } OpResult DetermineKeys(const CommandId* cid, CmdArgList args) { - if (cid->opt_mask() & CO::GLOBAL_TRANS) + if (cid->opt_mask() & (CO::GLOBAL_TRANS | CO::NO_KEY_TRANSACTIONAL)) return KeyIndex::Empty(); KeyIndex key_index;