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

adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 3e217f5f4db HDDS-7544. Cache replica set in ContainerEntry (#8990)
3e217f5f4db is described below

commit 3e217f5f4db36b3c03e119db2bae3ec8c366b533
Author: Neo Chien <[email protected]>
AuthorDate: Wed Dec 10 23:40:08 2025 +0800

    HDDS-7544. Cache replica set in ContainerEntry (#8990)
---
 .../hdds/scm/container/states/ContainerEntry.java       | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerEntry.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerEntry.java
index c1a53c819bf..2dacd2db6f0 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerEntry.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerEntry.java
@@ -17,10 +17,12 @@
 
 package org.apache.hadoop.hdds.scm.container.states;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Function;
 import org.apache.hadoop.hdds.protocol.DatanodeID;
 import org.apache.hadoop.hdds.scm.container.ContainerInfo;
 import org.apache.hadoop.hdds.scm.container.ContainerReplica;
@@ -31,7 +33,8 @@
  */
 public class ContainerEntry {
   private final ContainerInfo info;
-  private final Map<DatanodeID, ContainerReplica> replicas = new HashMap<>();
+  private final Map<DatanodeID, ContainerReplica> replicasMap = new 
HashMap<>();
+  private Set<ContainerReplica> replicas = Collections.emptySet();
 
   ContainerEntry(ContainerInfo info) {
     this.info = info;
@@ -42,14 +45,20 @@ public ContainerInfo getInfo() {
   }
 
   public Set<ContainerReplica> getReplicas() {
-    return new HashSet<>(replicas.values());
+    return replicas;
   }
 
   public ContainerReplica put(ContainerReplica r) {
-    return replicas.put(r.getDatanodeDetails().getID(), r);
+    return copyAndUpdate(map -> map.put(r.getDatanodeDetails().getID(), r));
   }
 
   public ContainerReplica removeReplica(DatanodeID datanodeID) {
-    return replicas.remove(datanodeID);
+    return copyAndUpdate(map -> map.remove(datanodeID));
+  }
+
+  private <T> T copyAndUpdate(Function<Map<DatanodeID, ContainerReplica>, T> 
update) {
+    T result = update.apply(replicasMap);
+    replicas = Collections.unmodifiableSet(new 
HashSet<>(replicasMap.values()));
+    return result;
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to