This is an automated email from the ASF dual-hosted git repository.

ptupitsyn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 799662a6a6 IGNITE-23205 Fix ScaleCubeTopologyService.getById 
performance (#4386)
799662a6a6 is described below

commit 799662a6a63c7cb67112679f56b822b7c7ab1579
Author: Pavel Tupitsyn <[email protected]>
AuthorDate: Fri Sep 13 13:45:23 2024 +0300

    IGNITE-23205 Fix ScaleCubeTopologyService.getById performance (#4386)
    
    Replace stream-based brute force node lookup with a map in 
ScaleCubeTopologyService.getById.
---
 .../internal/network/scalecube/ScaleCubeTopologyService.java   | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git 
a/modules/network/src/main/java/org/apache/ignite/internal/network/scalecube/ScaleCubeTopologyService.java
 
b/modules/network/src/main/java/org/apache/ignite/internal/network/scalecube/ScaleCubeTopologyService.java
index 29c926ca6b..9f22816f68 100644
--- 
a/modules/network/src/main/java/org/apache/ignite/internal/network/scalecube/ScaleCubeTopologyService.java
+++ 
b/modules/network/src/main/java/org/apache/ignite/internal/network/scalecube/ScaleCubeTopologyService.java
@@ -59,6 +59,9 @@ final class ScaleCubeTopologyService extends 
AbstractTopologyService {
     /** Topology members map from the consistent id to the cluster node. */
     private final ConcurrentMap<String, ClusterNode> consistentIdToMemberMap = 
new ConcurrentHashMap<>();
 
+    /** Topology members map from the id to the cluster node. */
+    private final ConcurrentMap<String, ClusterNode> idToMemberMap = new 
ConcurrentHashMap<>();
+
     /**
      * Sets the ScaleCube's {@link Cluster}. Needed for cyclic dependency 
injection.
      *
@@ -80,6 +83,7 @@ final class ScaleCubeTopologyService extends 
AbstractTopologyService {
         if (event.isAdded()) {
             members.put(member.address(), member);
             consistentIdToMemberMap.put(member.name(), member);
+            idToMemberMap.put(member.id(), member);
 
             LOG.info("Node joined [node={}]", member);
 
@@ -87,6 +91,7 @@ final class ScaleCubeTopologyService extends 
AbstractTopologyService {
         } else if (event.isUpdated()) {
             members.put(member.address(), member);
             consistentIdToMemberMap.put(member.name(), member);
+            idToMemberMap.put(member.id(), member);
         } else if (event.isRemoved() || event.isLeaving()) {
             // We treat LEAVING as 'node left' because the node will not be 
back and we don't want to wait for the suspicion timeout.
 
@@ -112,6 +117,8 @@ final class ScaleCubeTopologyService extends 
AbstractTopologyService {
                 }
             });
 
+            idToMemberMap.remove(member.id());
+
             fireDisappearedEvent(member);
         }
 
@@ -129,6 +136,7 @@ final class ScaleCubeTopologyService extends 
AbstractTopologyService {
         ClusterNode node = fromMember(cluster.member(), metadata);
         members.put(node.address(), node);
         consistentIdToMemberMap.put(node.name(), node);
+        idToMemberMap.put(node.id(), node);
     }
 
     /**
@@ -185,7 +193,7 @@ final class ScaleCubeTopologyService extends 
AbstractTopologyService {
     /** {@inheritDoc} */
     @Override
     public @Nullable ClusterNode getById(String id) {
-        return consistentIdToMemberMap.values().stream().filter(member -> 
member.id().equals(id)).findFirst().orElse(null);
+        return idToMemberMap.get(id);
     }
 
     /**

Reply via email to