diff --git a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/checksum/ECFileChecksumHelper.java b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/checksum/ECFileChecksumHelper.java index ab1473e9e89a..0476bcc30aeb 100644 --- a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/checksum/ECFileChecksumHelper.java +++ b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/checksum/ECFileChecksumHelper.java @@ -161,25 +161,22 @@ private List getChunkInfos(OmKeyLocationInfo Pipeline pipeline = keyLocationInfo.getPipeline(); - List nodes = pipeline.getNodes(); - List newNodes = new ArrayList<>(); + List nodes = new ArrayList<>(); ECReplicationConfig repConfig = (ECReplicationConfig) pipeline.getReplicationConfig(); - int totalNodes = repConfig.getRequiredNodes(); - int parity = repConfig.getParity(); - // Filtering the nodes that has the checksumBytes - for (int i = 0; i < nodes.size(); i++) { - if (i > 0 && i < totalNodes - parity) { - continue; + for (DatanodeDetails dn : pipeline.getNodes()) { + int replicaIndex = pipeline.getReplicaIndex(dn); + if (replicaIndex == 1 || replicaIndex > repConfig.getData()) { + // The stripe checksum we need to calculate checksums is only stored on + // replica_index = 1 and all the parity nodes. + nodes.add(dn); } - newNodes.add(nodes.get(i)); } - pipeline = Pipeline.newBuilder(pipeline) .setReplicationConfig(StandaloneReplicationConfig .getInstance(HddsProtos.ReplicationFactor.THREE)) - .setNodes(newNodes) + .setNodes(nodes) .build(); boolean success = false;