From 88cc0ec02bf1c42946458a59eb4a5fa9c82008be Mon Sep 17 00:00:00 2001 From: Ivan Andika Date: Fri, 19 Jun 2026 11:26:38 +0800 Subject: [PATCH 1/6] Try to use non random UUID for pipeline --- .../apache/hadoop/hdds/scm/pipeline/PipelineID.java | 5 +++++ .../java/org/apache/hadoop/ozone/util/UUIDUtil.java | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineID.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineID.java index d7ea21d024eb..29d2d6757353 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineID.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineID.java @@ -24,6 +24,7 @@ import org.apache.hadoop.hdds.utils.db.Codec; import org.apache.hadoop.hdds.utils.db.DelegatedCodec; import org.apache.hadoop.hdds.utils.db.UuidCodec; +import org.apache.hadoop.ozone.util.UUIDUtil; import org.apache.ratis.util.MemoizedSupplier; /** @@ -52,6 +53,10 @@ public static PipelineID randomId() { return new PipelineID(UUID.randomUUID()); } + public static PipelineID insecureRandomId() { + return new PipelineID(new UUID(UUIDUtil.insecureRandomUUIDBytes())); + } + public static PipelineID valueOf(UUID id) { return new PipelineID(id); } diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/UUIDUtil.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/UUIDUtil.java index 6644b8a4a25b..4448cbad1054 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/UUIDUtil.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/UUIDUtil.java @@ -18,12 +18,14 @@ package org.apache.hadoop.ozone.util; import java.security.SecureRandom; +import java.util.Random; /** * Helper methods to deal with random UUIDs. */ public final class UUIDUtil { private static final ThreadLocal GENERATOR = ThreadLocal.withInitial(SecureRandom::new); + private static final ThreadLocal INSECURE_GENERATOR = ThreadLocal.withInitial(Random::new); public static byte[] randomUUIDBytes() { final byte[] bytes = new byte[16]; @@ -36,6 +38,17 @@ public static byte[] randomUUIDBytes() { return bytes; } + public static byte[] insecureRandomUUIDBytes() { + final byte[] bytes = new byte[16]; + INSECURE_GENERATOR.get().nextBytes(bytes); + // See RFC 4122 section 4.4 + bytes[6] &= 0x0f; + bytes[6] |= 0x40; + bytes[8] &= 0x3f; + bytes[8] |= 0x80; + return bytes; + } + private UUIDUtil() { } } From 484c49d0ab860b1c32733458af3af1384629a978 Mon Sep 17 00:00:00 2001 From: Ivan Andika Date: Fri, 19 Jun 2026 13:32:35 +0800 Subject: [PATCH 2/6] HDDS-15602. PipelineId randomId does not need to use secure random --- .../apache/hadoop/hdds/scm/pipeline/PipelineID.java | 5 ++++- .../hadoop/hdds/scm/pipeline/ECPipelineProvider.java | 8 +++++++- .../hdds/scm/pipeline/RatisPipelineProvider.java | 12 ++++++++---- .../hdds/scm/pipeline/SimplePipelineProvider.java | 12 ++++++++---- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineID.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineID.java index 29d2d6757353..9f7824ac45df 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineID.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineID.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hdds.scm.pipeline; import com.fasterxml.jackson.annotation.JsonIgnore; +import java.nio.ByteBuffer; import java.util.UUID; import java.util.function.Supplier; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; @@ -54,7 +55,9 @@ public static PipelineID randomId() { } public static PipelineID insecureRandomId() { - return new PipelineID(new UUID(UUIDUtil.insecureRandomUUIDBytes())); + byte[] bytes = UUIDUtil.insecureRandomUUIDBytes(); + ByteBuffer buf = ByteBuffer.wrap(bytes); + return new PipelineID(new UUID(buf.getLong(), buf.getLong())); } public static PipelineID valueOf(UUID id) { diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/ECPipelineProvider.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/ECPipelineProvider.java index f9b94bd8d0da..03c24685323d 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/ECPipelineProvider.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/ECPipelineProvider.java @@ -130,7 +130,13 @@ public Pipeline createForRead( dns.sort(Comparator.comparing(nodeStatusMap::get, CREATE_FOR_READ_COMPARATOR)); - return createPipelineInternal(replicationConfig, dns, map); + return Pipeline.newBuilder() + .setId(PipelineID.insecureRandomId()) + .setState(Pipeline.PipelineState.ALLOCATED) + .setReplicationConfig(replicationConfig) + .setNodes(dns) + .setReplicaIndexes(map) + .build(); } private Pipeline createPipelineInternal(ECReplicationConfig repConfig, diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java index 8fe6934f1eda..a08b3b0c81b9 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java @@ -225,10 +225,14 @@ public Pipeline create(RatisReplicationConfig replicationConfig, public Pipeline createForRead( RatisReplicationConfig replicationConfig, Set replicas) { - return create(replicationConfig, replicas - .stream() - .map(ContainerReplica::getDatanodeDetails) - .collect(Collectors.toList())); + return Pipeline.newBuilder() + .setId(PipelineID.insecureRandomId()) + .setState(PipelineState.ALLOCATED) + .setReplicationConfig(replicationConfig) + .setNodes(replicas.stream() + .map(ContainerReplica::getDatanodeDetails) + .collect(Collectors.toList())) + .build(); } private List filterPipelineEngagement() { diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java index a7cfd4bd5974..1748cd3b0c10 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java @@ -84,10 +84,14 @@ public Pipeline create(StandaloneReplicationConfig replicationConfig, @Override public Pipeline createForRead(StandaloneReplicationConfig replicationConfig, Set replicas) { - return create(replicationConfig, replicas - .stream() - .map(ContainerReplica::getDatanodeDetails) - .collect(Collectors.toList())); + return Pipeline.newBuilder() + .setId(PipelineID.insecureRandomId()) + .setState(PipelineState.OPEN) + .setReplicationConfig(replicationConfig) + .setNodes(replicas.stream() + .map(ContainerReplica::getDatanodeDetails) + .collect(Collectors.toList())) + .build(); } @Override From d0265e0499bbb92eb3850f02842421996d9ed0ee Mon Sep 17 00:00:00 2001 From: Ivan Andika Date: Fri, 19 Jun 2026 13:55:41 +0800 Subject: [PATCH 3/6] Add comment --- .../org/apache/hadoop/hdds/scm/pipeline/PipelineID.java | 7 +++++++ .../hadoop/hdds/scm/pipeline/ECPipelineProvider.java | 2 ++ .../hadoop/hdds/scm/pipeline/RatisPipelineProvider.java | 2 ++ .../hadoop/hdds/scm/pipeline/SimplePipelineProvider.java | 2 ++ 4 files changed, 13 insertions(+) diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineID.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineID.java index 9f7824ac45df..bb2aa7cc6262 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineID.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineID.java @@ -54,6 +54,13 @@ public static PipelineID randomId() { return new PipelineID(UUID.randomUUID()); } + /** + * Generates a random PipelineID using {@link java.util.Random} instead of + * {@link java.security.SecureRandom}. This avoids contention on the shared + * {@code SecureRandom} instance and is suitable for non-sensitive, + * throwaway IDs such as read pipelines, where predictability of the next + * ID has no security impact. + */ public static PipelineID insecureRandomId() { byte[] bytes = UUIDUtil.insecureRandomUUIDBytes(); ByteBuffer buf = ByteBuffer.wrap(bytes); diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/ECPipelineProvider.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/ECPipelineProvider.java index 03c24685323d..3a60c16d288f 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/ECPipelineProvider.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/ECPipelineProvider.java @@ -130,6 +130,8 @@ public Pipeline createForRead( dns.sort(Comparator.comparing(nodeStatusMap::get, CREATE_FOR_READ_COMPARATOR)); + // Use insecureRandomId for throwaway read pipeline IDs to avoid + // contention on the shared SecureRandom instance. return Pipeline.newBuilder() .setId(PipelineID.insecureRandomId()) .setState(Pipeline.PipelineState.ALLOCATED) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java index a08b3b0c81b9..a121065b2094 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java @@ -225,6 +225,8 @@ public Pipeline create(RatisReplicationConfig replicationConfig, public Pipeline createForRead( RatisReplicationConfig replicationConfig, Set replicas) { + // Use insecureRandomId for throwaway read pipeline IDs to avoid + // contention on the shared SecureRandom instance. return Pipeline.newBuilder() .setId(PipelineID.insecureRandomId()) .setState(PipelineState.ALLOCATED) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java index 1748cd3b0c10..83137344bae1 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java @@ -84,6 +84,8 @@ public Pipeline create(StandaloneReplicationConfig replicationConfig, @Override public Pipeline createForRead(StandaloneReplicationConfig replicationConfig, Set replicas) { + // Use insecureRandomId for throwaway read pipeline IDs to avoid + // contention on the shared SecureRandom instance. return Pipeline.newBuilder() .setId(PipelineID.insecureRandomId()) .setState(PipelineState.OPEN) From 26bc0eaaba133ff619515e2f25b22408290c6def Mon Sep 17 00:00:00 2001 From: Ivan Andika Date: Mon, 22 Jun 2026 22:07:06 +0800 Subject: [PATCH 4/6] Apply suggestions --- .../apache/hadoop/ozone/util/UUIDUtil.java | 16 ++++++------ hadoop-hdds/server-scm/pom.xml | 6 +++++ .../hdds/scm/container/ContainerReplica.java | 9 +++++++ .../hdds/scm/pipeline/ECPipelineProvider.java | 21 ++++------------ .../hdds/scm/pipeline/PipelineProvider.java | 7 ++++++ .../scm/pipeline/RatisPipelineProvider.java | 22 +++------------- .../scm/pipeline/SimplePipelineProvider.java | 25 +++++++------------ 7 files changed, 47 insertions(+), 59 deletions(-) diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/UUIDUtil.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/UUIDUtil.java index 4448cbad1054..8f4da0cfc46a 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/UUIDUtil.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/UUIDUtil.java @@ -19,6 +19,7 @@ import java.security.SecureRandom; import java.util.Random; +import java.util.function.Consumer; /** * Helper methods to deal with random UUIDs. @@ -28,19 +29,16 @@ public final class UUIDUtil { private static final ThreadLocal INSECURE_GENERATOR = ThreadLocal.withInitial(Random::new); public static byte[] randomUUIDBytes() { - final byte[] bytes = new byte[16]; - GENERATOR.get().nextBytes(bytes); - // See RFC 4122 section 4.4 - bytes[6] &= 0x0f; - bytes[6] |= 0x40; - bytes[8] &= 0x3f; - bytes[8] |= 0x80; - return bytes; + return getUUIDBytes(GENERATOR.get()::nextBytes); } public static byte[] insecureRandomUUIDBytes() { + return getUUIDBytes(INSECURE_GENERATOR.get()::nextBytes); + } + + private static byte[] getUUIDBytes(Consumer generator) { final byte[] bytes = new byte[16]; - INSECURE_GENERATOR.get().nextBytes(bytes); + generator.accept(bytes); // See RFC 4122 section 4.4 bytes[6] &= 0x0f; bytes[6] |= 0x40; diff --git a/hadoop-hdds/server-scm/pom.xml b/hadoop-hdds/server-scm/pom.xml index 8c5293d9efa3..8cc24a9948e4 100644 --- a/hadoop-hdds/server-scm/pom.xml +++ b/hadoop-hdds/server-scm/pom.xml @@ -226,6 +226,12 @@ hdds-test-utils test + + com.sun.xml.bind + jaxb-impl + 4.0.4 + compile + diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerReplica.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerReplica.java index 5c9bd57cd881..d26cc4a35633 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerReplica.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerReplica.java @@ -17,7 +17,10 @@ package org.apache.hadoop.hdds.scm.container; +import java.util.List; import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; import org.apache.commons.lang3.builder.CompareToBuilder; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -165,6 +168,12 @@ public int compareTo(ContainerReplica that) { .build(); } + public static List toDatanodeDetailsList(Set replicas) { + return replicas.stream() + .map(ContainerReplica::getDatanodeDetails) + .collect(Collectors.toList()); + } + /** * Returns a new Builder to construct ContainerReplica. * diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/ECPipelineProvider.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/ECPipelineProvider.java index 3a60c16d288f..1560c9890c5b 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/ECPipelineProvider.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/ECPipelineProvider.java @@ -103,7 +103,10 @@ protected Pipeline create(ECReplicationConfig replicationConfig, ecIndex++; } - return createPipelineInternal(replicationConfig, nodes, dnIndexes); + return newPipelineBuilder(replicationConfig, nodes) + .setId(PipelineID.randomId()) + .setReplicaIndexes(dnIndexes) + .build(); } @Override @@ -132,26 +135,12 @@ public Pipeline createForRead( // Use insecureRandomId for throwaway read pipeline IDs to avoid // contention on the shared SecureRandom instance. - return Pipeline.newBuilder() + return newPipelineBuilder(replicationConfig, dns) .setId(PipelineID.insecureRandomId()) - .setState(Pipeline.PipelineState.ALLOCATED) - .setReplicationConfig(replicationConfig) - .setNodes(dns) .setReplicaIndexes(map) .build(); } - private Pipeline createPipelineInternal(ECReplicationConfig repConfig, - List dns, Map indexes) { - return Pipeline.newBuilder() - .setId(PipelineID.randomId()) - .setState(Pipeline.PipelineState.ALLOCATED) - .setReplicationConfig(repConfig) - .setNodes(dns) - .setReplicaIndexes(indexes) - .build(); - } - @Override protected void close(Pipeline pipeline) throws IOException { } diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineProvider.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineProvider.java index b1b2d7349066..0b8506f58c27 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineProvider.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineProvider.java @@ -139,4 +139,11 @@ List pickAllNodesNotUsed( } return dns; } + + protected Pipeline.Builder newPipelineBuilder(ReplicationConfig replicationConfig, List nodes) { + return Pipeline.newBuilder() + .setNodes(nodes) + .setReplicationConfig(replicationConfig) + .setState(Pipeline.PipelineState.ALLOCATED); + } } diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java index a121065b2094..5b3d3b3850b6 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import org.apache.hadoop.hdds.client.RatisReplicationConfig; import org.apache.hadoop.hdds.conf.ConfigurationSource; import org.apache.hadoop.hdds.conf.StorageUnit; @@ -182,13 +181,8 @@ public synchronized Pipeline create(RatisReplicationConfig replicationConfig, DatanodeDetails suggestedLeader = leaderChoosePolicy.chooseLeader(dns); - Pipeline pipeline = Pipeline.newBuilder() - .setId(PipelineID.randomId()) - .setState(PipelineState.ALLOCATED) - .setReplicationConfig(RatisReplicationConfig.getInstance(factor)) - .setNodes(dns) - .setSuggestedLeaderId( - suggestedLeader != null ? suggestedLeader.getID() : null) + Pipeline pipeline = newPipelineBuilder(RatisReplicationConfig.getInstance(factor), dns) + .setSuggestedLeaderId(suggestedLeader != null ? suggestedLeader.getID() : null) .build(); // Send command to datanodes to create pipeline @@ -213,11 +207,8 @@ public synchronized Pipeline create(RatisReplicationConfig replicationConfig, @Override public Pipeline create(RatisReplicationConfig replicationConfig, List nodes) { - return Pipeline.newBuilder() + return newPipelineBuilder(replicationConfig, nodes) .setId(PipelineID.randomId()) - .setState(PipelineState.ALLOCATED) - .setReplicationConfig(replicationConfig) - .setNodes(nodes) .build(); } @@ -227,13 +218,8 @@ public Pipeline createForRead( Set replicas) { // Use insecureRandomId for throwaway read pipeline IDs to avoid // contention on the shared SecureRandom instance. - return Pipeline.newBuilder() + return newPipelineBuilder(replicationConfig, ContainerReplica.toDatanodeDetailsList(replicas)) .setId(PipelineID.insecureRandomId()) - .setState(PipelineState.ALLOCATED) - .setReplicationConfig(replicationConfig) - .setNodes(replicas.stream() - .map(ContainerReplica::getDatanodeDetails) - .collect(Collectors.toList())) .build(); } diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java index 83137344bae1..50ed2b015b91 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/SimplePipelineProvider.java @@ -21,7 +21,7 @@ import java.util.Collections; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; +import org.apache.hadoop.hdds.client.ReplicationConfig; import org.apache.hadoop.hdds.client.StandaloneReplicationConfig; import org.apache.hadoop.hdds.protocol.DatanodeDetails; import org.apache.hadoop.hdds.scm.container.ContainerReplica; @@ -61,23 +61,16 @@ public Pipeline create(StandaloneReplicationConfig replicationConfig, } Collections.shuffle(dns); - return Pipeline.newBuilder() + return newPipelineBuilder(replicationConfig, dns.subList(0, replicationConfig.getReplicationFactor().getNumber())) .setId(PipelineID.randomId()) - .setState(PipelineState.OPEN) - .setReplicationConfig(replicationConfig) - .setNodes(dns.subList(0, - replicationConfig.getReplicationFactor().getNumber())) .build(); } @Override public Pipeline create(StandaloneReplicationConfig replicationConfig, List nodes) { - return Pipeline.newBuilder() + return newPipelineBuilder(replicationConfig, nodes) .setId(PipelineID.randomId()) - .setState(PipelineState.OPEN) - .setReplicationConfig(replicationConfig) - .setNodes(nodes) .build(); } @@ -86,13 +79,8 @@ public Pipeline createForRead(StandaloneReplicationConfig replicationConfig, Set replicas) { // Use insecureRandomId for throwaway read pipeline IDs to avoid // contention on the shared SecureRandom instance. - return Pipeline.newBuilder() + return newPipelineBuilder(replicationConfig, ContainerReplica.toDatanodeDetailsList(replicas)) .setId(PipelineID.insecureRandomId()) - .setState(PipelineState.OPEN) - .setReplicationConfig(replicationConfig) - .setNodes(replicas.stream() - .map(ContainerReplica::getDatanodeDetails) - .collect(Collectors.toList())) .build(); } @@ -101,4 +89,9 @@ public void close(Pipeline pipeline) throws IOException { } + @Override + protected Pipeline.Builder newPipelineBuilder(ReplicationConfig replicationConfig, List nodes) { + return super.newPipelineBuilder(replicationConfig, nodes) + .setState(PipelineState.OPEN); + } } From 9ef9977cb86f32e44030ba44f2e39055ed146978 Mon Sep 17 00:00:00 2001 From: Ivan Andika Date: Mon, 22 Jun 2026 22:09:44 +0800 Subject: [PATCH 5/6] Remove wrongly added dep --- hadoop-hdds/server-scm/pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/hadoop-hdds/server-scm/pom.xml b/hadoop-hdds/server-scm/pom.xml index 8cc24a9948e4..8c5293d9efa3 100644 --- a/hadoop-hdds/server-scm/pom.xml +++ b/hadoop-hdds/server-scm/pom.xml @@ -226,12 +226,6 @@ hdds-test-utils test - - com.sun.xml.bind - jaxb-impl - 4.0.4 - compile - From dcc2d764a21608759061bc02d7104729ada089fd Mon Sep 17 00:00:00 2001 From: "Doroszlai, Attila" Date: Mon, 22 Jun 2026 19:39:19 +0200 Subject: [PATCH 6/6] add missing pipeline ID --- .../apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java index 5b3d3b3850b6..30eb83ab735f 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/RatisPipelineProvider.java @@ -182,6 +182,7 @@ public synchronized Pipeline create(RatisReplicationConfig replicationConfig, DatanodeDetails suggestedLeader = leaderChoosePolicy.chooseLeader(dns); Pipeline pipeline = newPipelineBuilder(RatisReplicationConfig.getInstance(factor), dns) + .setId(PipelineID.randomId()) .setSuggestedLeaderId(suggestedLeader != null ? suggestedLeader.getID() : null) .build();