diff --git a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECBlockOutputStreamEntry.java b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECBlockOutputStreamEntry.java index 8a8b32faaa7b..26d11f3d642b 100644 --- a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECBlockOutputStreamEntry.java +++ b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECBlockOutputStreamEntry.java @@ -91,16 +91,17 @@ public class ECBlockOutputStreamEntry extends BlockOutputStreamEntry { @Override void checkStream() throws IOException { if (!isInitialized()) { - blockOutputStreams = + final ECBlockOutputStream[] streams = new ECBlockOutputStream[replicationConfig.getRequiredNodes()]; for (int i = currentStreamIdx; i < replicationConfig .getRequiredNodes(); i++) { List nodes = getPipeline().getNodes(); - blockOutputStreams[i] = + streams[i] = new ECBlockOutputStream(getBlockID(), getXceiverClientManager(), createSingleECBlockPipeline(getPipeline(), nodes.get(i), i + 1), getBufferPool(), getConf(), getToken(), getClientMetrics()); } + blockOutputStreams = streams; } } diff --git a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/MockXceiverClientFactory.java b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/MockXceiverClientFactory.java index 8c5fa762912b..02964da89746 100644 --- a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/MockXceiverClientFactory.java +++ b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/MockXceiverClientFactory.java @@ -25,12 +25,11 @@ import java.io.IOException; import java.util.Collection; import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; /** * Factory to create the mock datanode clients. @@ -39,9 +38,9 @@ public class MockXceiverClientFactory implements XceiverClientFactory { private final Map storage = - new HashMap<>(); + new ConcurrentHashMap<>(); private final Map> pendingDNFailures = - new HashMap<>(); + new ConcurrentHashMap<>(); public void setFailedStorages(List failedStorages) { mockStorageFailure(failedStorages, @@ -50,10 +49,9 @@ public void setFailedStorages(List failedStorages) { public void mockStorageFailure(Collection datanodes, IOException reason) { - if (!pendingDNFailures.containsKey(reason)) { - pendingDNFailures.put(reason, new HashSet<>()); - } - pendingDNFailures.get(reason).addAll(datanodes); + pendingDNFailures + .computeIfAbsent(reason, k -> ConcurrentHashMap.newKeySet()) + .addAll(datanodes); mockStorageFailure(reason); }