From 7deda4d5e9e33a979c97159c8dbdc1b544274d58 Mon Sep 17 00:00:00 2001 From: yiwangdr <80064917+yiwangdr@users.noreply.github.com> Date: Tue, 16 Apr 2024 19:23:25 -0700 Subject: [PATCH] enhance: speed up GetByCollectionAndNode (#32232) Related to https://github.com/milvus-io/milvus/issues/32165 Avoid iterating through all replicas/collections if possible. Iteration is expensive when there are large number of replicas/collections. Signed-off-by: yiwangdr --- internal/querycoordv2/meta/replica_manager.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/internal/querycoordv2/meta/replica_manager.go b/internal/querycoordv2/meta/replica_manager.go index dbe2911579..39d77ddff1 100644 --- a/internal/querycoordv2/meta/replica_manager.go +++ b/internal/querycoordv2/meta/replica_manager.go @@ -241,9 +241,12 @@ func (m *ReplicaManager) GetByCollectionAndNode(collectionID, nodeID typeutil.Un m.rwmutex.RLock() defer m.rwmutex.RUnlock() - for _, replica := range m.replicas { - if replica.GetCollectionID() == collectionID && replica.Contains(nodeID) { - return replica + if m.collIDToReplicaIDs[collectionID] != nil { + for replicaID := range m.collIDToReplicaIDs[collectionID] { + replica := m.replicas[replicaID] + if replica.Contains(nodeID) { + return replica + } } }