You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2024/09/13 10:45:28 UTC

(ignite-3) branch main updated: IGNITE-23205 Fix ScaleCubeTopologyService.getById performance (#4386)

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 <pt...@apache.org>
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);
     }
 
     /**