From 53377119761964c3b398eb63d7b6d994d46503a1 Mon Sep 17 00:00:00 2001 From: adiholden Date: Fri, 7 Feb 2025 11:09:29 +0200 Subject: [PATCH] fix server: fix deadlock blmove does not conclude on error (#4561) * fix deadlock: fix blmove does not conclude on error --------- Signed-off-by: adi_holden --- src/server/engine_shard.cc | 2 +- src/server/list_family.cc | 1 + src/server/transaction.cc | 6 ++++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/server/engine_shard.cc b/src/server/engine_shard.cc index e1e9f04ec..6d4db3e0b 100644 --- a/src/server/engine_shard.cc +++ b/src/server/engine_shard.cc @@ -872,7 +872,7 @@ EngineShard::TxQueueInfo EngineShard::AnalyzeTxQueue() const { { auto value = queue->At(cur); Transaction* trx = std::get(value); - info.head.debug_id_info = trx->DebugId(); + info.head.debug_id_info = trx->DebugId(sid); } do { diff --git a/src/server/list_family.cc b/src/server/list_family.cc index 33858c0f8..beed2866f 100644 --- a/src/server/list_family.cc +++ b/src/server/list_family.cc @@ -1050,6 +1050,7 @@ OpResult BPopPusher::RunPair(time_point tp, Transaction* tx, ConnectionC if (op_res.status() == OpStatus::KEY_NOTFOUND) { op_res = OpStatus::TIMED_OUT; } + tx->Conclude(); return op_res; } diff --git a/src/server/transaction.cc b/src/server/transaction.cc index ca3d15172..54f243055 100644 --- a/src/server/transaction.cc +++ b/src/server/transaction.cc @@ -58,7 +58,7 @@ void AnalyzeTxQueue(const EngineShard* shard, const TxQueue* txq) { ", poll_executions:", shard->stats().poll_execution_total); const Transaction* cont_tx = shard->GetContTx(); if (cont_tx) { - absl::StrAppend(&msg, " continuation_tx: ", cont_tx->DebugId(), " ", + absl::StrAppend(&msg, " continuation_tx: ", cont_tx->DebugId(shard->shard_id()), " ", cont_tx->DEBUG_IsArmedInShard(shard->shard_id()) ? " armed" : ""); } absl::StrAppend(&msg, "\nTxQueue head debug info ", info.head.debug_id_info); @@ -558,7 +558,9 @@ string Transaction::DebugId(std::optional sid) const { absl::StrAppend(&res, " {id=", trans_id(this)); if (sid) { absl::StrAppend(&res, ",mask[", *sid, "]=", int(shard_data_[SidToId(*sid)].local_mask), - ",txqpos[]=", shard_data_[SidToId(*sid)].pq_pos); + ",is_armed=", DEBUG_IsArmedInShard(*sid), + ",txqpos[]=", shard_data_[SidToId(*sid)].pq_pos, + ",fail_state_print=", DEBUG_PrintFailState(*sid)); } absl::StrAppend(&res, "}"); return res;