diff --git a/src/server/cluster/cluster_config.cc b/src/server/cluster/cluster_config.cc index bda2ef831..b651a04ca 100644 --- a/src/server/cluster/cluster_config.cc +++ b/src/server/cluster/cluster_config.cc @@ -351,7 +351,6 @@ bool ClusterConfig::IsMySlot(std::string_view key) const { ClusterNodeInfo ClusterConfig::GetMasterNodeForSlot(SlotId id) const { CHECK_LE(id, kMaxSlotNum) << "Requesting a non-existing slot id " << id; - for (const auto& shard : config_) { if (shard.slot_ranges.Contains(id)) { if (shard.master.id == my_id_) { @@ -359,7 +358,11 @@ ClusterNodeInfo ClusterConfig::GetMasterNodeForSlot(SlotId id) const { // migrated for (const auto& m : shard.migrations) { if (m.slot_ranges.Contains(id)) { - return m.node_info; + for (const auto& shard : config_) { + if (shard.master.id == m.node_info.id) { + return shard.master; + } + } } } } diff --git a/tests/dragonfly/cluster_test.py b/tests/dragonfly/cluster_test.py index 313b4200d..f4c625249 100644 --- a/tests/dragonfly/cluster_test.py +++ b/tests/dragonfly/cluster_test.py @@ -2753,6 +2753,10 @@ async def test_migration_timeout_on_sync(df_factory: DflyInstanceFactory, df_see await wait_for_status(nodes[0].admin_client, nodes[1].id, "FINISHED", 300) await wait_for_status(nodes[1].admin_client, nodes[0].id, "FINISHED") + with pytest.raises(aioredis.ResponseError) as e_info: + await nodes[0].client.get("x") + assert f"MOVED 16287 127.0.0.1:{instances[1].port}" == str(e_info.value) + nodes[0].migrations = [] nodes[0].slots = [] nodes[1].slots = [(0, 16383)]