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);
}
/**