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]