This is an automated email from the ASF dual-hosted git repository.
devmadhuu pushed a commit to branch HDDS-11233
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/HDDS-11233 by this push:
new 6cc86ff1498 HDDS-15249. SCM Pipeline Support Create And Get With
StorageTier (#10815)
6cc86ff1498 is described below
commit 6cc86ff1498e320f869c72fc81ec658c342d3635
Author: Devesh Kumar Singh <[email protected]>
AuthorDate: Mon Jul 27 11:10:04 2026 +0530
HDDS-15249. SCM Pipeline Support Create And Get With StorageTier (#10815)
---
.../org/apache/hadoop/ozone/OzoneConfigKeys.java | 6 ++
.../common/src/main/resources/ozone-default.xml | 14 +++++
.../hadoop/hdds/scm/block/BlockManagerImpl.java | 14 ++++-
.../hdds/scm/container/ContainerManagerImpl.java | 4 +-
.../ha/invoker/PipelineStateManagerInvoker.java | 67 ++++++++++++++++------
.../scm/pipeline/BackgroundPipelineCreator.java | 5 +-
.../hadoop/hdds/scm/pipeline/PipelineFactory.java | 5 +-
.../hadoop/hdds/scm/pipeline/PipelineManager.java | 15 ++++-
.../hdds/scm/pipeline/PipelineManagerImpl.java | 26 ++++++---
.../hdds/scm/pipeline/PipelineStateManager.java | 15 ++++-
.../scm/pipeline/PipelineStateManagerImpl.java | 29 +++++++++-
.../hadoop/hdds/scm/pipeline/PipelineStateMap.java | 63 +++++++++++++++++++-
.../hdds/scm/pipeline/RatisPipelineProvider.java | 14 +++--
.../scm/pipeline/WritableContainerFactory.java | 14 +++--
.../scm/pipeline/WritableContainerProvider.java | 6 +-
.../scm/pipeline/WritableECContainerProvider.java | 9 ++-
.../pipeline/WritableRatisContainerProvider.java | 48 ++++++++++------
.../hdds/scm/server/SCMClientProtocolServer.java | 5 +-
.../hadoop/hdds/scm/block/TestBlockManager.java | 17 +++---
.../scm/container/TestContainerManagerImpl.java | 7 ++-
.../scm/container/TestContainerReportHandler.java | 7 ++-
.../scm/container/TestContainerStateManager.java | 3 +-
.../TestIncrementalContainerReportHandler.java | 3 +-
.../hdds/scm/node/TestContainerPlacement.java | 3 +-
.../hadoop/hdds/scm/node/TestSCMNodeManager.java | 5 +-
.../hdds/scm/pipeline/MockPipelineManager.java | 20 +++++--
.../hdds/scm/pipeline/TestPipelineManagerImpl.java | 50 +++++++++-------
.../scm/pipeline/TestRatisPipelineProvider.java | 19 ++++--
.../pipeline/TestWritableECContainerProvider.java | 59 ++++++++++---------
.../TestWritableRatisContainerProvider.java | 35 +++++++----
.../safemode/TestHealthyPipelineSafeModeRule.java | 21 +++----
.../TestOneReplicaPipelineSafeModeRule.java | 3 +-
.../hdds/scm/safemode/TestSCMSafeModeManager.java | 9 +--
.../hdds/scm/cli/ContainerOperationClient.java | 1 +
.../hadoop/ozone/recon/TestReconAsPassiveScm.java | 4 +-
.../org/apache/hadoop/fs/ozone/TestSafeMode.java | 4 +-
.../hdds/scm/pipeline/TestMultiRaftSetup.java | 5 +-
.../TestRatisPipelineCreateAndDestroy.java | 3 +-
.../hdds/scm/storage/TestContainerCommandsEC.java | 5 +-
.../hadoop/hdds/upgrade/TestHDDSUpgrade.java | 3 +-
40 files changed, 458 insertions(+), 187 deletions(-)
diff --git
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
index cfcedc2bc06..2f4b76b5b44 100644
---
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
@@ -22,6 +22,7 @@
import org.apache.hadoop.hdds.annotation.InterfaceStability;
import org.apache.hadoop.hdds.client.ReplicationFactor;
import org.apache.hadoop.hdds.client.ReplicationType;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.scm.ScmConfigKeys;
import org.apache.hadoop.http.HttpConfig;
import org.apache.ratis.util.TimeDuration;
@@ -712,6 +713,11 @@ public final class OzoneConfigKeys {
"ozone.client.elastic.byte.buffer.pool.max.size";
public static final String
OZONE_CLIENT_ELASTIC_BYTE_BUFFER_POOL_MAX_SIZE_DEFAULT = "16GB";
+ public static final String OZONE_DEFAULT_STORAGE_TIER_KEY =
+ "ozone.default.storageTier";
+ public static final String OZONE_DEFAULT_STORAGE_TIER_DEFAULT =
+ StorageTier.DISK.toString();
+
/**
* There is no need to instantiate this class.
*/
diff --git a/hadoop-hdds/common/src/main/resources/ozone-default.xml
b/hadoop-hdds/common/src/main/resources/ozone-default.xml
index 8cbafc61f09..d0e2d30e7e3 100644
--- a/hadoop-hdds/common/src/main/resources/ozone-default.xml
+++ b/hadoop-hdds/common/src/main/resources/ozone-default.xml
@@ -4286,6 +4286,20 @@
</description>
</property>
+ <property>
+ <name>ozone.default.storageTier</name>
+ <value>DISK</value>
+ <tag>OZONE, MANAGEMENT</tag>
+ <description>
+ Default StorageTier used for pipeline creation and block allocation
+ when a client does not specify a StorageTier (StoragePolicy).
+ For old-version clients that do not carry a StoragePolicy the
+ StorageTier is null; this value is used as the fallback so their
+ write path is unchanged. Supported values are DISK, SSD, ARCHIVE,
+ RAM_DISK.
+ </description>
+ </property>
+
<property>
<name>ozone.client.ec.grpc.retries.enabled</name>
<value>true</value>
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/BlockManagerImpl.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/BlockManagerImpl.java
index 6b0136abf66..c0dc683af91 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/BlockManagerImpl.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/BlockManagerImpl.java
@@ -30,6 +30,7 @@
import org.apache.hadoop.hdds.client.BlockID;
import org.apache.hadoop.hdds.client.ContainerBlockID;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
import org.apache.hadoop.hdds.conf.StorageUnit;
import org.apache.hadoop.hdds.scm.ScmConfig;
@@ -160,8 +161,19 @@ public AllocatedBlock allocateBlock(final long size,
INVALID_BLOCK_SIZE);
}
+ // TODO: Implement pass storageTier(StoragePolicy) from API.
+ // For the old version client, it will not have a "default StoragePolicy",
+ // so its StorageTier will be null, we use the "default StorageTier" to
+ // write data for them. The value of the "default StorageTier" can be set
+ // via configuration, and the default is StorageTier.DISK.
+ //
+ // By default, if the Datanode Volume StorageType is not explicitly
+ // configured, it will be of type StorageType.DISK and therefore belong
+ // to a StorageTier.DISK tier, so for old clients the write process is
+ // unchanged if the Datanode Volume configuration is not changed.
+ StorageTier storageTier = StorageTier.getDefaultTier();
ContainerInfo containerInfo = writableContainerFactory.getContainer(
- size, replicationConfig, owner, excludeList);
+ size, replicationConfig, owner, excludeList, storageTier);
if (containerInfo != null) {
return newBlock(containerInfo);
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerManagerImpl.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerManagerImpl.java
index 15a566f6421..f9d68e5428f 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerManagerImpl.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerManagerImpl.java
@@ -33,6 +33,7 @@
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hdds.client.ECReplicationConfig;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos.ContainerInfoProto;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos.LifeCycleEvent;
@@ -194,7 +195,8 @@ public ContainerInfo allocateContainer(
if (pipelines.isEmpty()) {
try {
- pipeline = pipelineManager.createPipeline(replicationConfig);
+ pipeline = pipelineManager.createPipeline(replicationConfig,
+ StorageTier.getDefaultTier());
if (replicationConfig.getReplicationType() ==
HddsProtos.ReplicationType.EC) {
pipelineManager.openPipeline(pipeline.getId());
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/PipelineStateManagerInvoker.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/PipelineStateManagerInvoker.java
index 4b756078186..3a3ea16e0ee 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/PipelineStateManagerInvoker.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/invoker/PipelineStateManagerInvoker.java
@@ -22,6 +22,7 @@
import java.util.List;
import java.util.NavigableSet;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.scm.container.ContainerID;
import org.apache.hadoop.hdds.scm.ha.SCMRatisResponse;
@@ -135,10 +136,20 @@ public List<Pipeline> getPipelines(ReplicationConfig
arg0, Pipeline.PipelineStat
return invoker.getImpl().getPipelines(arg0, arg1);
}
+ @Override
+ public List<Pipeline> getPipelines(ReplicationConfig arg0, StorageTier
arg1) {
+ return invoker.getImpl().getPipelines(arg0, arg1);
+ }
+
+ @Override
+ public List<Pipeline> getPipelines(ReplicationConfig arg0,
Pipeline.PipelineState arg1, StorageTier arg2) {
+ return invoker.getImpl().getPipelines(arg0, arg1, arg2);
+ }
+
@Override
public List<Pipeline> getPipelines(ReplicationConfig arg0,
Pipeline.PipelineState arg1, Collection arg2,
- Collection arg3) {
- return invoker.getImpl().getPipelines(arg0, arg1, arg2, arg3);
+ Collection arg3, StorageTier arg4) {
+ return invoker.getImpl().getPipelines(arg0, arg1, arg2, arg3, arg4);
}
@Override
@@ -238,39 +249,57 @@ public Message invokeLocal(String methodName, Object[] p)
throws Exception {
returnValue = getImpl().getPipelines(arg11, arg12);
break;
}
- if (p.length == 4 && (p[0] == null ||
ReplicationConfig.class.isInstance(p[0])) && (p[1] == null ||
- Pipeline.PipelineState.class.isInstance(p[1])) && (p[2] == null ||
Collection.class.isInstance(p[2])) && (p[3]
- == null || Collection.class.isInstance(p[3]))) {
+ if (p.length == 2 && (p[0] == null ||
ReplicationConfig.class.isInstance(p[0])) && (p[1] == null ||
+ StorageTier.class.isInstance(p[1]))) {
final ReplicationConfig arg13 = (ReplicationConfig) p[0];
- final Pipeline.PipelineState arg14 = (Pipeline.PipelineState) p[1];
- final Collection arg15 = (Collection) p[2];
- final Collection arg16 = (Collection) p[3];
+ final StorageTier arg14 = (StorageTier) p[1];
+ returnType = List.class;
+ returnValue = getImpl().getPipelines(arg13, arg14);
+ break;
+ }
+ if (p.length == 3 && (p[0] == null ||
ReplicationConfig.class.isInstance(p[0])) && (p[1] == null ||
+ Pipeline.PipelineState.class.isInstance(p[1])) && (p[2] == null ||
StorageTier.class.isInstance(p[2]))) {
+ final ReplicationConfig arg15 = (ReplicationConfig) p[0];
+ final Pipeline.PipelineState arg16 = (Pipeline.PipelineState) p[1];
+ final StorageTier arg17 = (StorageTier) p[2];
+ returnType = List.class;
+ returnValue = getImpl().getPipelines(arg15, arg16, arg17);
+ break;
+ }
+ if (p.length == 5 && (p[0] == null ||
ReplicationConfig.class.isInstance(p[0])) && (p[1] == null ||
+ Pipeline.PipelineState.class.isInstance(p[1])) && (p[2] == null ||
Collection.class.isInstance(p[2])) && (p[3]
+ == null || Collection.class.isInstance(p[3])) && (p[4] == null ||
StorageTier.class.isInstance(p[4]))) {
+ final ReplicationConfig arg18 = (ReplicationConfig) p[0];
+ final Pipeline.PipelineState arg19 = (Pipeline.PipelineState) p[1];
+ final Collection arg20 = (Collection) p[2];
+ final Collection arg21 = (Collection) p[3];
+ final StorageTier arg22 = (StorageTier) p[4];
returnType = List.class;
- returnValue = getImpl().getPipelines(arg13, arg14, arg15, arg16);
+ returnValue = getImpl().getPipelines(arg18, arg19, arg20, arg21,
arg22);
break;
}
throw new IllegalArgumentException("Method not found: " + methodName + "
in PipelineStateManager");
case "reinitialize":
- final Table arg17 = p.length > 0 ? (Table) p[0] : null;
- getImpl().reinitialize(arg17);
+ final Table arg23 = p.length > 0 ? (Table) p[0] : null;
+ getImpl().reinitialize(arg23);
return Message.EMPTY;
case "removeContainerFromPipeline":
- final PipelineID arg18 = p.length > 0 ? (PipelineID) p[0] : null;
- final ContainerID arg19 = p.length > 1 ? (ContainerID) p[1] : null;
- getImpl().removeContainerFromPipeline(arg18, arg19);
+ final PipelineID arg24 = p.length > 0 ? (PipelineID) p[0] : null;
+ final ContainerID arg25 = p.length > 1 ? (ContainerID) p[1] : null;
+ getImpl().removeContainerFromPipeline(arg24, arg25);
return Message.EMPTY;
case "removePipeline":
- final HddsProtos.PipelineID arg20 = p.length > 0 ?
(HddsProtos.PipelineID) p[0] : null;
- getImpl().removePipeline(arg20);
+ final HddsProtos.PipelineID arg26 = p.length > 0 ?
(HddsProtos.PipelineID) p[0] : null;
+ getImpl().removePipeline(arg26);
return Message.EMPTY;
case "updatePipelineState":
- final HddsProtos.PipelineID arg21 = p.length > 0 ?
(HddsProtos.PipelineID) p[0] : null;
- final HddsProtos.PipelineState arg22 = p.length > 1 ?
(HddsProtos.PipelineState) p[1] : null;
- getImpl().updatePipelineState(arg21, arg22);
+ final HddsProtos.PipelineID arg27 = p.length > 0 ?
(HddsProtos.PipelineID) p[0] : null;
+ final HddsProtos.PipelineState arg28 = p.length > 1 ?
(HddsProtos.PipelineState) p[1] : null;
+ getImpl().updatePipelineState(arg27, arg28);
return Message.EMPTY;
default:
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/BackgroundPipelineCreator.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/BackgroundPipelineCreator.java
index 0aefbedbd43..593e723d6da 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/BackgroundPipelineCreator.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/BackgroundPipelineCreator.java
@@ -39,6 +39,7 @@
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
import org.apache.hadoop.hdds.client.ReplicationConfig;
import org.apache.hadoop.hdds.client.StandaloneReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationFactor;
@@ -242,7 +243,9 @@ private void createPipelines() throws RuntimeException {
(ReplicationConfig) it.next();
try {
- Pipeline pipeline = pipelineManager.createPipeline(replicationConfig);
+ // Only create default StorageTier Pipeline
+ Pipeline pipeline = pipelineManager.createPipeline(replicationConfig,
+ StorageTier.getDefaultTier());
LOG.info("Created new pipeline {}", pipeline);
} catch (IOException ioe) {
it.remove();
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineFactory.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineFactory.java
index 2268309012b..672798c6783 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineFactory.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineFactory.java
@@ -81,11 +81,10 @@ void setProvider(
public Pipeline create(
ReplicationConfig replicationConfig, List<DatanodeDetails> excludedNodes,
- List<DatanodeDetails> favoredNodes)
+ List<DatanodeDetails> favoredNodes, StorageTier storageTier)
throws IOException {
- // TODO StoragePolicy replace this StorageTier with the passed StorageTier
Pipeline pipeline = providers.get(replicationConfig.getReplicationType())
- .create(replicationConfig, excludedNodes, favoredNodes,
StorageTier.getDefaultTier());
+ .create(replicationConfig, excludedNodes, favoredNodes, storageTier);
checkPipeline(pipeline);
return pipeline;
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineManager.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineManager.java
index db8e23c9bf0..18211bf1598 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineManager.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineManager.java
@@ -37,12 +37,14 @@
*/
public interface PipelineManager extends Closeable, PipelineManagerMXBean {
- Pipeline createPipeline(ReplicationConfig replicationConfig)
+ Pipeline createPipeline(ReplicationConfig replicationConfig,
+ StorageTier storageTier)
throws IOException;
Pipeline createPipeline(ReplicationConfig replicationConfig,
List<DatanodeDetails> excludedNodes,
- List<DatanodeDetails> favoredNodes)
+ List<DatanodeDetails> favoredNodes,
+ StorageTier storageTier)
throws IOException;
Pipeline buildECPipeline(ReplicationConfig replicationConfig,
@@ -75,11 +77,18 @@ List<Pipeline> getPipelines(
ReplicationConfig replicationConfig, Pipeline.PipelineState state
);
+ List<Pipeline> getPipelines(
+ ReplicationConfig replicationConfig,
+ Pipeline.PipelineState state,
+ StorageTier storageTier
+ );
+
List<Pipeline> getPipelines(
ReplicationConfig replicationConfig,
Pipeline.PipelineState state,
Collection<DatanodeDetails> excludeDns,
- Collection<PipelineID> excludePipelines
+ Collection<PipelineID> excludePipelines,
+ StorageTier storageTier
);
/**
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineManagerImpl.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineManagerImpl.java
index c616edfcd3b..4f3618751ec 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineManagerImpl.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineManagerImpl.java
@@ -214,9 +214,10 @@ public Pipeline buildECPipeline(ReplicationConfig
replicationConfig,
if (replicationConfig.getReplicationType() != ReplicationType.EC) {
throw new IllegalArgumentException("Replication type must be EC");
}
+ // TODO StoragePolicy Support EC
checkIfPipelineCreationIsAllowed(replicationConfig);
return pipelineFactory.create(replicationConfig, excludedNodes,
- favoredNodes);
+ favoredNodes, StorageTier.getDefaultTier());
}
/**
@@ -238,15 +239,17 @@ public void addEcPipeline(Pipeline pipeline)
}
@Override
- public Pipeline createPipeline(ReplicationConfig replicationConfig)
+ public Pipeline createPipeline(ReplicationConfig replicationConfig,
+ StorageTier storageTier)
throws IOException {
return createPipeline(replicationConfig, Collections.emptyList(),
- Collections.emptyList());
+ Collections.emptyList(), storageTier);
}
@Override
public Pipeline createPipeline(ReplicationConfig replicationConfig,
- List<DatanodeDetails> excludedNodes, List<DatanodeDetails> favoredNodes)
+ List<DatanodeDetails> excludedNodes, List<DatanodeDetails> favoredNodes,
+ StorageTier storageTier)
throws IOException {
checkIfPipelineCreationIsAllowed(replicationConfig);
@@ -255,8 +258,10 @@ public Pipeline createPipeline(ReplicationConfig
replicationConfig,
try {
try {
pipeline = pipelineFactory.create(replicationConfig,
- excludedNodes, favoredNodes);
+ excludedNodes, favoredNodes, storageTier);
} catch (IOException e) {
+ LOG.debug("Failed to create pipeline with replicationConfig {} " +
+ "storageTier {}.", replicationConfig, storageTier, e);
metrics.incNumPipelineCreationFailed();
throw e;
}
@@ -364,13 +369,20 @@ public List<Pipeline> getPipelines(ReplicationConfig
config,
return stateManager.getPipelines(config, state);
}
+ @Override
+ public List<Pipeline> getPipelines(ReplicationConfig config,
+ Pipeline.PipelineState state, StorageTier storageTier) {
+ return stateManager.getPipelines(config, state, storageTier);
+ }
+
@Override
public List<Pipeline> getPipelines(
ReplicationConfig replicationConfig,
Pipeline.PipelineState state, Collection<DatanodeDetails> excludeDns,
- Collection<PipelineID> excludePipelines) {
+ Collection<PipelineID> excludePipelines, StorageTier storageTier) {
return stateManager
- .getPipelines(replicationConfig, state, excludeDns, excludePipelines);
+ .getPipelines(replicationConfig, state, excludeDns, excludePipelines,
+ storageTier);
}
/**
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateManager.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateManager.java
index 7160782142e..d268df4f6aa 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateManager.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateManager.java
@@ -22,6 +22,7 @@
import java.util.List;
import java.util.NavigableSet;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.protocol.proto.SCMRatisProtocol.RequestType;
@@ -88,11 +89,23 @@ List<Pipeline> getPipelines(
Pipeline.PipelineState state
);
+ List<Pipeline> getPipelines(
+ ReplicationConfig replicationConfig,
+ StorageTier storageTier
+ );
+
+ List<Pipeline> getPipelines(
+ ReplicationConfig replicationConfig,
+ Pipeline.PipelineState state,
+ StorageTier storageTier
+ );
+
List<Pipeline> getPipelines(
ReplicationConfig replicationConfig,
Pipeline.PipelineState state,
Collection<DatanodeDetails> excludeDns,
- Collection<PipelineID> excludePipelines
+ Collection<PipelineID> excludePipelines,
+ StorageTier storageTier
);
int getPipelineCount(
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateManagerImpl.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateManagerImpl.java
index 88cc37b0b5e..46d91d60547 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateManagerImpl.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateManagerImpl.java
@@ -25,6 +25,7 @@
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.scm.container.ContainerID;
@@ -167,15 +168,39 @@ public List<Pipeline> getPipelines(
}
}
+ @Override
+ public List<Pipeline> getPipelines(
+ ReplicationConfig replicationConfig, StorageTier storageTier) {
+ lock.readLock().lock();
+ try {
+ return pipelineStateMap.getPipelines(replicationConfig, storageTier);
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
+ @Override
+ public List<Pipeline> getPipelines(
+ ReplicationConfig replicationConfig,
+ Pipeline.PipelineState state, StorageTier storageTier) {
+ lock.readLock().lock();
+ try {
+ return pipelineStateMap.getPipelines(replicationConfig, state,
storageTier);
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
@Override
public List<Pipeline> getPipelines(
ReplicationConfig replicationConfig,
Pipeline.PipelineState state, Collection<DatanodeDetails> excludeDns,
- Collection<PipelineID> excludePipelines) {
+ Collection<PipelineID> excludePipelines, StorageTier storageTier) {
lock.readLock().lock();
try {
return pipelineStateMap
- .getPipelines(replicationConfig, state, excludeDns,
excludePipelines);
+ .getPipelines(replicationConfig, state, excludeDns, excludePipelines,
+ storageTier);
} finally {
lock.readLock().unlock();
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateMap.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateMap.java
index 14fc9239149..38c00ada778 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateMap.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/PipelineStateMap.java
@@ -32,7 +32,9 @@
import java.util.Objects;
import java.util.Set;
import java.util.TreeSet;
+import java.util.stream.Collectors;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.scm.container.ContainerID;
import org.apache.hadoop.hdds.scm.pipeline.Pipeline.PipelineState;
@@ -210,6 +212,55 @@ List<Pipeline> getPipelines(ReplicationConfig
replicationConfig,
return pipelines;
}
+ /**
+ * Get list of pipelines corresponding to specified replication type
+ * and storageTier.
+ *
+ * @param replicationConfig - ReplicationConfig
+ * @param storageTier - Required storageTier
+ * @return List of pipelines with specified replication type and storageTier
+ */
+ List<Pipeline> getPipelines(ReplicationConfig replicationConfig,
+ StorageTier storageTier) {
+ Objects.requireNonNull(replicationConfig, "ReplicationConfig cannot be
null");
+ Objects.requireNonNull(storageTier, "Pipeline storageTier cannot be null");
+ return getPipelines(replicationConfig).stream()
+ .filter(pipeline -> matchesStorageTier(pipeline, storageTier))
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * Get list of pipeline corresponding to specified replication type,
+ * replication factor, pipeline state and storageTier.
+ *
+ * @param replicationConfig - ReplicationConfig
+ * @param state - Required PipelineState
+ * @param storageTier - Required storageTier
+ * @return List of pipelines with specified replication type,
+ * replication factor, pipeline state and storageTier
+ */
+ List<Pipeline> getPipelines(ReplicationConfig replicationConfig,
+ PipelineState state, StorageTier storageTier) {
+ Objects.requireNonNull(replicationConfig, "ReplicationConfig cannot be
null");
+ Objects.requireNonNull(state, "Pipeline state cannot be null");
+ Objects.requireNonNull(storageTier, "Pipeline storageTier cannot be null");
+ return getPipelines(replicationConfig, state).stream()
+ .filter(pipeline -> matchesStorageTier(pipeline, storageTier))
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * A pipeline with no supportedStorageTier (e.g. one created by an older
+ * SCM before this field was introduced, or restored from a legacy DB
+ * snapshot) is treated as matching any tier. This preserves backward
+ * compatibility during rolling upgrade: legacy pipelines remain usable
+ * until they are scrubbed and replaced by tier-tagged ones.
+ */
+ static boolean matchesStorageTier(Pipeline pipeline, StorageTier
storageTier) {
+ final StorageTier pipelineTier = pipeline.getSupportedStorageTier();
+ return pipelineTier == null || Objects.equals(pipelineTier, storageTier);
+ }
+
/**
* Get a count of pipelines with the given replicationConfig and state.
* This method is most efficient when getting a count for OPEN pipeline
@@ -247,23 +298,27 @@ int getPipelineCount(ReplicationConfig replicationConfig,
* @param state - Required PipelineState
* @param excludeDns dns to exclude
* @param excludePipelines pipelines to exclude
+ * @param storageTier - Required storageTier
* @return List of pipelines with specified replication type,
* replication factor and pipeline state
*/
List<Pipeline> getPipelines(ReplicationConfig replicationConfig,
PipelineState state, Collection<DatanodeDetails> excludeDns,
- Collection<PipelineID> excludePipelines) {
+ Collection<PipelineID> excludePipelines, StorageTier storageTier) {
Objects.requireNonNull(replicationConfig, "ReplicationConfig cannot be
null");
Objects.requireNonNull(state, "Pipeline state cannot be null");
Objects.requireNonNull(excludeDns, "Datanode exclude list cannot be null");
Objects.requireNonNull(excludePipelines, "Pipeline exclude list cannot be
null");
+ Objects.requireNonNull(storageTier, "Pipeline storageTier cannot be null");
List<Pipeline> pipelines = null;
if (state == PipelineState.OPEN) {
pipelines = new ArrayList<>(query2OpenPipelines.getOrDefault(
replicationConfig, Collections.emptyList()));
if (excludeDns.isEmpty() && excludePipelines.isEmpty()) {
- return pipelines;
+ return pipelines.stream()
+ .filter(pipeline -> matchesStorageTier(pipeline, storageTier))
+ .collect(Collectors.toList());
}
} else {
pipelines = new ArrayList<>(pipelineMap.values());
@@ -272,6 +327,10 @@ List<Pipeline> getPipelines(ReplicationConfig
replicationConfig,
Iterator<Pipeline> iter = pipelines.iterator();
while (iter.hasNext()) {
Pipeline pipeline = iter.next();
+ if (!matchesStorageTier(pipeline, storageTier)) {
+ iter.remove();
+ continue;
+ }
if (!pipeline.getReplicationConfig().equals(replicationConfig) ||
pipeline.getPipelineState() != state ||
excludePipelines.contains(pipeline.getId())) {
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 5d5ad3111ce..0c062f7bf30 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
@@ -104,15 +104,18 @@ public RatisPipelineProvider(NodeManager nodeManager,
}
}
- private boolean exceedPipelineNumberLimit(RatisReplicationConfig
replicationConfig) {
+ private boolean exceedPipelineNumberLimit(
+ RatisReplicationConfig replicationConfig, StorageTier storageTier) {
// Apply limits only for replication factor THREE
if (replicationConfig.getReplicationFactor() != ReplicationFactor.THREE) {
return false;
}
PipelineStateManager pipelineStateManager = getPipelineStateManager();
- int totalActivePipelines =
pipelineStateManager.getPipelines(replicationConfig).size();
- int closedPipelines = pipelineStateManager.getPipelines(replicationConfig,
PipelineState.CLOSED).size();
+ int totalActivePipelines = pipelineStateManager
+ .getPipelines(replicationConfig, storageTier).size();
+ int closedPipelines = pipelineStateManager
+ .getPipelines(replicationConfig, PipelineState.CLOSED,
storageTier).size();
int openPipelines = totalActivePipelines - closedPipelines;
// Check per-datanode pipeline limit
if (datanodePipelineLimit > 0) {
@@ -125,7 +128,8 @@ private boolean
exceedPipelineNumberLimit(RatisReplicationConfig replicationConf
// Check global pipeline limit
if (pipelineNumberLimit > 0) {
int factorOnePipelineCount = pipelineStateManager
-
.getPipelines(RatisReplicationConfig.getInstance(ReplicationFactor.ONE)).size();
+
.getPipelines(RatisReplicationConfig.getInstance(ReplicationFactor.ONE),
+ storageTier).size();
int allowedOpenPipelines = pipelineNumberLimit - factorOnePipelineCount;
return openPipelines >= allowedOpenPipelines;
}
@@ -150,7 +154,7 @@ public synchronized Pipeline create(RatisReplicationConfig
replicationConfig,
public synchronized Pipeline create(RatisReplicationConfig replicationConfig,
List<DatanodeDetails> excludedNodes, List<DatanodeDetails> favoredNodes,
StorageTier storageTier)
throws IOException {
- if (exceedPipelineNumberLimit(replicationConfig)) {
+ if (exceedPipelineNumberLimit(replicationConfig, storageTier)) {
String limitInfo = (datanodePipelineLimit > 0)
? String.format("per datanode: %d", datanodePipelineLimit)
: String.format(": %d", pipelineNumberLimit);
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableContainerFactory.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableContainerFactory.java
index b816bc4de7f..85c0cecb40f 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableContainerFactory.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableContainerFactory.java
@@ -21,9 +21,11 @@
import static
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_CONTAINER_SIZE;
import static
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_CONTAINER_SIZE_DEFAULT;
+import jakarta.annotation.Nonnull;
import java.io.IOException;
import org.apache.hadoop.hdds.client.ECReplicationConfig;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
import org.apache.hadoop.hdds.scm.container.ContainerInfo;
import org.apache.hadoop.hdds.scm.container.common.helpers.ExcludeList;
@@ -62,17 +64,19 @@ public WritableContainerFactory(StorageContainerManager
scm) {
}
public ContainerInfo getContainer(final long size,
- ReplicationConfig repConfig, String owner, ExcludeList excludeList)
+ ReplicationConfig repConfig, String owner, ExcludeList excludeList,
+ @Nonnull StorageTier storageTier)
throws IOException {
switch (repConfig.getReplicationType()) {
case STAND_ALONE:
return standaloneProvider
- .getContainer(size, repConfig, owner, excludeList);
+ .getContainer(size, repConfig, owner, excludeList, storageTier);
case RATIS:
- return ratisProvider.getContainer(size, repConfig, owner, excludeList);
+ return ratisProvider.getContainer(size, repConfig, owner, excludeList,
+ storageTier);
case EC:
- return ecProvider.getContainer(size, (ECReplicationConfig)repConfig,
- owner, excludeList);
+ return ecProvider.getContainer(size, (ECReplicationConfig) repConfig,
+ owner, excludeList, storageTier);
default:
throw new IOException(repConfig.getReplicationType()
+ " is an invalid replication type");
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableContainerProvider.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableContainerProvider.java
index 8eb3d1233f2..8c674377d41 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableContainerProvider.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableContainerProvider.java
@@ -17,8 +17,10 @@
package org.apache.hadoop.hdds.scm.pipeline;
+import jakarta.annotation.Nonnull;
import java.io.IOException;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.scm.container.ContainerInfo;
import org.apache.hadoop.hdds.scm.container.common.helpers.ExcludeList;
@@ -45,12 +47,14 @@ public interface WritableContainerProvider<T extends
ReplicationConfig> {
* @param owner The owner of the container
* @param excludeList A set of datanodes, container and pipelines which
should
* not be considered.
+ * @param storageTier The storageTier of the container
* @return A ContainerInfo which is open and has the capacity to store the
* desired block size.
* @throws IOException
*/
ContainerInfo getContainer(long size, T repConfig,
- String owner, ExcludeList excludeList)
+ String owner, ExcludeList excludeList,
+ @Nonnull StorageTier storageTier)
throws IOException;
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableECContainerProvider.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableECContainerProvider.java
index d7c4b7705f4..9f3578512d5 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableECContainerProvider.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableECContainerProvider.java
@@ -20,6 +20,7 @@
import static org.apache.hadoop.hdds.conf.ConfigTag.SCM;
import static org.apache.hadoop.hdds.scm.node.NodeStatus.inServiceHealthy;
+import jakarta.annotation.Nonnull;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
@@ -27,6 +28,7 @@
import java.util.NavigableSet;
import org.apache.hadoop.hdds.client.ECReplicationConfig;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.Config;
import org.apache.hadoop.hdds.conf.ConfigGroup;
import org.apache.hadoop.hdds.conf.ConfigTag;
@@ -91,8 +93,10 @@ public
WritableECContainerProvider(WritableECContainerProviderConfig config,
*/
@Override
public ContainerInfo getContainer(final long size,
- ECReplicationConfig repConfig, String owner, ExcludeList excludeList)
+ ECReplicationConfig repConfig, String owner, ExcludeList excludeList,
+ @Nonnull StorageTier storageTier)
throws IOException {
+ // TODO StoragePolicy Support EC
int maximumPipelines = getMaximumPipelines(repConfig);
int openPipelineCount;
synchronized (this) {
@@ -201,8 +205,9 @@ private ContainerInfo allocateContainer(ReplicationConfig
repConfig,
excludedNodes = new ArrayList<>(excludeList.getDatanodes());
}
+ // TODO StoragePolicy Support EC
Pipeline newPipeline = pipelineManager.createPipeline(repConfig,
- excludedNodes, Collections.emptyList());
+ excludedNodes, Collections.emptyList(), StorageTier.getDefaultTier());
// the returned ContainerInfo should not be null (due to not enough space
in the Datanodes specifically) because
// this is a new pipeline and pipeline creation checks for sufficient
space in the Datanodes
ContainerInfo container =
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableRatisContainerProvider.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableRatisContainerProvider.java
index a61b3289235..edfddfc2b81 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableRatisContainerProvider.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/WritableRatisContainerProvider.java
@@ -17,11 +17,13 @@
package org.apache.hadoop.hdds.scm.pipeline;
+import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.scm.PipelineChoosePolicy;
import org.apache.hadoop.hdds.scm.PipelineRequestInformation;
import org.apache.hadoop.hdds.scm.container.ContainerInfo;
@@ -55,7 +57,8 @@ public WritableRatisContainerProvider(
@Override
public ContainerInfo getContainer(final long size,
- ReplicationConfig repConfig, String owner, ExcludeList excludeList)
+ ReplicationConfig repConfig, String owner, ExcludeList excludeList,
+ @Nonnull StorageTier storageTier)
throws IOException {
/*
Here is the high level logic.
@@ -80,7 +83,7 @@ public ContainerInfo getContainer(final long size,
PipelineRequestInformation.Builder.getBuilder().setSize(size).build();
ContainerInfo containerInfo =
- getContainer(repConfig, owner, excludeList, req);
+ getContainer(repConfig, owner, excludeList, req, storageTier);
if (containerInfo != null) {
return containerInfo;
}
@@ -88,19 +91,19 @@ public ContainerInfo getContainer(final long size,
try {
// TODO: #CLUTIL Remove creation logic when all replication types
// and factors are handled by pipeline creator
- Pipeline pipeline = pipelineManager.createPipeline(repConfig);
+ Pipeline pipeline = pipelineManager.createPipeline(repConfig,
storageTier);
// wait until pipeline is ready
pipelineManager.waitPipelineReady(pipeline.getId(), 0);
} catch (SCMException se) {
- LOG.warn("Pipeline creation failed for repConfig {} " +
+ LOG.warn("Pipeline creation failed for repConfig: {} storageTier: {} " +
"Datanodes may be used up. Try to see if any pipeline is in " +
"ALLOCATED state, and then will wait for it to be OPEN",
- repConfig, se);
+ repConfig, storageTier, se);
List<Pipeline> allocatedPipelines = findPipelinesByState(repConfig,
excludeList,
- Pipeline.PipelineState.ALLOCATED);
+ Pipeline.PipelineState.ALLOCATED, storageTier);
if (!allocatedPipelines.isEmpty()) {
List<PipelineID> allocatedPipelineIDs =
allocatedPipelines.stream()
@@ -119,14 +122,14 @@ public ContainerInfo getContainer(final long size,
failureReason = se.getMessage();
}
} catch (IOException e) {
- LOG.warn("Pipeline creation failed for repConfig: {}. "
- + "Retrying get pipelines call once.", repConfig, e);
+ LOG.warn("Pipeline creation failed for repConfig: {} storageTier: {}. "
+ + "Retrying get pipelines call once.", repConfig, storageTier, e);
failureReason = e.getMessage();
}
// If Exception occurred or successful creation of pipeline do one
// final try to fetch pipelines.
- containerInfo = getContainer(repConfig, owner, excludeList, req);
+ containerInfo = getContainer(repConfig, owner, excludeList, req,
storageTier);
if (containerInfo != null) {
return containerInfo;
}
@@ -134,24 +137,27 @@ public ContainerInfo getContainer(final long size,
// we have tried all strategies we know but somehow we are not able
// to get a container for this block. Log that info and throw an exception.
LOG.error(
- "Unable to allocate a block for the size: {}, repConfig: {}",
- size, repConfig);
+ "Unable to allocate a block for the size: {}, repConfig: {},
storageTier: {}.",
+ size, repConfig, storageTier);
throw new IOException(
"Unable to allocate a container to the block of size: " + size
- + ", replicationConfig: " + repConfig + ". " + failureReason);
+ + ", replicationConfig: " + repConfig
+ + " for storageTier: " + storageTier + ". " + failureReason);
}
@Nullable
private ContainerInfo getContainer(ReplicationConfig repConfig, String owner,
- ExcludeList excludeList, PipelineRequestInformation req) {
+ ExcludeList excludeList, PipelineRequestInformation req,
+ @Nonnull StorageTier storageTier) {
// Acquire pipeline manager lock, to avoid any updates to pipeline
// while allocate container happens. This is to avoid scenario like
// mentioned in HDDS-5655.
pipelineManager.acquireReadLock();
try {
List<Pipeline> availablePipelines = findPipelinesByState(repConfig,
- excludeList, Pipeline.PipelineState.OPEN);
- return selectContainer(availablePipelines, req, owner, excludeList);
+ excludeList, Pipeline.PipelineState.OPEN, storageTier);
+ return selectContainer(availablePipelines, req, owner, excludeList,
+ storageTier);
} finally {
pipelineManager.releaseReadLock();
}
@@ -160,27 +166,31 @@ private ContainerInfo getContainer(ReplicationConfig
repConfig, String owner,
private List<Pipeline> findPipelinesByState(
final ReplicationConfig repConfig,
final ExcludeList excludeList,
- final Pipeline.PipelineState pipelineState) {
+ final Pipeline.PipelineState pipelineState,
+ @Nonnull StorageTier storageTier) {
List<Pipeline> pipelines = pipelineManager.getPipelines(repConfig,
pipelineState, excludeList.getDatanodes(),
- excludeList.getPipelineIds());
+ excludeList.getPipelineIds(), storageTier);
if (pipelines.isEmpty() && !excludeList.isEmpty()) {
// if no pipelines can be found, try finding pipeline without
// exclusion
- pipelines = pipelineManager.getPipelines(repConfig, pipelineState);
+ pipelines = pipelineManager.getPipelines(repConfig, pipelineState,
+ storageTier);
}
return pipelines;
}
private @Nullable ContainerInfo selectContainer(
List<Pipeline> availablePipelines, PipelineRequestInformation req,
- String owner, ExcludeList excludeList) {
+ String owner, ExcludeList excludeList,
+ @Nonnull StorageTier storageTier) {
while (!availablePipelines.isEmpty()) {
Pipeline pipeline = pipelineChoosePolicy.choosePipeline(
availablePipelines, req);
// look for OPEN containers that match the criteria.
+ // TODO StoragePolicy replace this StorageType with container actual
StorageType
final ContainerInfo containerInfo =
containerManager.getMatchingContainer(
req.getSize(), owner, pipeline, excludeList.getContainerIds());
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMClientProtocolServer.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMClientProtocolServer.java
index 156eed688d8..85990a10761 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMClientProtocolServer.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMClientProtocolServer.java
@@ -52,6 +52,7 @@
import org.apache.commons.lang3.tuple.Pair;
import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.conf.ReconfigurationHandler;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
@@ -860,8 +861,10 @@ public Pipeline
createReplicationPipeline(HddsProtos.ReplicationType type,
}
try {
getScm().checkAdminAccess(getRemoteUser(), false);
+ // TODO: Support Allocate Pipeline Command with StorageTier
Pipeline result = scm.getPipelineManager().createPipeline(
- ReplicationConfig.fromProtoTypeAndFactor(type, factor));
+ ReplicationConfig.fromProtoTypeAndFactor(type, factor),
+ StorageTier.getDefaultTier());
AUDIT.logWriteSuccess(buildAuditMessageForSuccess(
SCMAction.CREATE_PIPELINE, auditMap));
return result;
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/block/TestBlockManager.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/block/TestBlockManager.java
index 45c947cb00a..6e65dfa127d 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/block/TestBlockManager.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/block/TestBlockManager.java
@@ -44,6 +44,7 @@
import org.apache.hadoop.hdds.HddsConfigKeys;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationFactor;
@@ -194,7 +195,7 @@ public void cleanup() throws Exception {
@Test
public void testAllocateBlock() throws Exception {
- pipelineManager.createPipeline(replicationConfig);
+ pipelineManager.createPipeline(replicationConfig,
StorageTier.getDefaultTier());
HddsTestUtils.openAllRatisPipelines(pipelineManager);
AllocatedBlock block = blockManager.allocateBlock(DEFAULT_BLOCK_SIZE,
replicationConfig, OzoneConsts.OZONE, new ExcludeList());
@@ -205,7 +206,7 @@ public void testAllocateBlock() throws Exception {
public void testAllocateBlockWithExclusion() throws Exception {
try {
while (true) {
- pipelineManager.createPipeline(replicationConfig);
+ pipelineManager.createPipeline(replicationConfig,
StorageTier.getDefaultTier());
}
} catch (IOException e) {
}
@@ -272,7 +273,7 @@ void testBlockDistribution() throws Exception {
for (int i = 0; i < threadCount; i++) {
executors.add(Executors.newSingleThreadExecutor());
}
- pipelineManager.createPipeline(replicationConfig);
+ pipelineManager.createPipeline(replicationConfig,
StorageTier.getDefaultTier());
HddsTestUtils.openAllRatisPipelines(pipelineManager);
Map<Long, List<AllocatedBlock>> allocatedBlockMap =
new ConcurrentHashMap<>();
@@ -328,7 +329,7 @@ void testBlockDistributionWithMultipleDisks() throws
Exception {
for (int i = 0; i < threadCount; i++) {
executors.add(Executors.newSingleThreadExecutor());
}
- pipelineManager.createPipeline(replicationConfig);
+ pipelineManager.createPipeline(replicationConfig,
StorageTier.getDefaultTier());
HddsTestUtils.openAllRatisPipelines(pipelineManager);
Map<Long, List<AllocatedBlock>> allocatedBlockMap =
new ConcurrentHashMap<>();
@@ -388,7 +389,7 @@ void testBlockDistributionWithMultipleRaftLogDisks() throws
Exception {
for (int i = 0; i < threadCount; i++) {
executors.add(Executors.newSingleThreadExecutor());
}
- pipelineManager.createPipeline(replicationConfig);
+ pipelineManager.createPipeline(replicationConfig,
StorageTier.getDefaultTier());
HddsTestUtils.openAllRatisPipelines(pipelineManager);
Map<Long, List<AllocatedBlock>> allocatedBlockMap =
new ConcurrentHashMap<>();
@@ -466,8 +467,8 @@ public void testAllocateBlockSucInSafeMode() throws
Exception {
public void testMultipleBlockAllocation()
throws IOException, TimeoutException, InterruptedException {
- pipelineManager.createPipeline(replicationConfig);
- pipelineManager.createPipeline(replicationConfig);
+ pipelineManager.createPipeline(replicationConfig,
StorageTier.getDefaultTier());
+ pipelineManager.createPipeline(replicationConfig,
StorageTier.getDefaultTier());
HddsTestUtils.openAllRatisPipelines(pipelineManager);
AllocatedBlock allocatedBlock = blockManager
@@ -513,7 +514,7 @@ public void testMultipleBlockAllocationWithClosedContainer()
for (int i = 0;
i < nodeManager.getNodes(NodeStatus.inServiceHealthy()).size()
/ replicationConfig.getRequiredNodes(); i++) {
- pipelineManager.createPipeline(replicationConfig);
+ pipelineManager.createPipeline(replicationConfig,
StorageTier.getDefaultTier());
}
HddsTestUtils.openAllRatisPipelines(pipelineManager);
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerManagerImpl.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerManagerImpl.java
index 68dcc634a5e..003431416e2 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerManagerImpl.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerManagerImpl.java
@@ -40,6 +40,7 @@
import java.util.concurrent.TimeoutException;
import org.apache.hadoop.hdds.client.ECReplicationConfig;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.MockDatanodeDetails;
@@ -105,7 +106,7 @@ void setUp() throws Exception {
doReturn(true).when(pipelineManager).hasEnoughSpace(any(Pipeline.class));
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE));
+ ReplicationFactor.THREE), StorageTier.getDefaultTier());
pendingOpsMock = mock(ContainerReplicaPendingOps.class);
containerManager = new ContainerManagerImpl(conf,
@@ -152,7 +153,7 @@ public void
testGetMatchingContainerReturnsNullWhenNotEnoughSpaceInDatanodes() t
// create an EC pipeline to test for EC containers
ECReplicationConfig ecReplicationConfig = new ECReplicationConfig(3, 2);
- pipelineManager.createPipeline(ecReplicationConfig);
+ pipelineManager.createPipeline(ecReplicationConfig,
StorageTier.getDefaultTier());
pipeline =
pipelineManager.getPipelines(ecReplicationConfig).iterator().next();
container = containerManager.getMatchingContainer(sizeRequired, "test",
pipeline, Collections.emptySet());
assertNull(container);
@@ -182,7 +183,7 @@ public void
testGetMatchingContainerReturnsContainerWhenEnoughSpaceInDatanodes()
// create an EC pipeline to test for EC containers
ECReplicationConfig ecReplicationConfig = new ECReplicationConfig(3, 2);
- spyPipelineManager.createPipeline(ecReplicationConfig);
+ spyPipelineManager.createPipeline(ecReplicationConfig,
StorageTier.getDefaultTier());
pipeline =
spyPipelineManager.getPipelines(ecReplicationConfig).iterator().next();
container = manager.getMatchingContainer(sizeRequired, "test", pipeline,
Collections.emptySet());
assertNotNull(container);
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java
index 92398e8dfcb..af304e2eb39 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java
@@ -52,6 +52,7 @@
import org.apache.hadoop.fs.StorageType;
import org.apache.hadoop.hdds.client.ECReplicationConfig;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.client.StorageTypeUtils;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
@@ -861,7 +862,7 @@ public void
openContainerKeyAndBytesUsedUpdatedToMinimumOfAllReplicas()
NodeStatus.inServiceHealthy()).iterator();
Pipeline pipeline = pipelineManager.createPipeline(
-
RatisReplicationConfig.getInstance(HddsProtos.ReplicationFactor.THREE));
+
RatisReplicationConfig.getInstance(HddsProtos.ReplicationFactor.THREE),
StorageTier.getDefaultTier());
final DatanodeDetails datanodeOne = nodeIterator.next();
final DatanodeDetails datanodeTwo = nodeIterator.next();
@@ -1017,7 +1018,7 @@ public void
openECContainerKeyAndBytesUsedUpdatedToMinimumOfAllReplicas()
final ContainerReportHandler reportHandler = new ContainerReportHandler(
nodeManager, containerManager);
- Pipeline pipeline = pipelineManager.createPipeline(repConfig);
+ Pipeline pipeline = pipelineManager.createPipeline(repConfig,
StorageTier.getDefaultTier());
Map<Integer, DatanodeDetails> dns = new HashMap<>();
final Iterator<DatanodeDetails> nodeIterator = nodeManager.getNodes(
NodeStatus.inServiceHealthy()).iterator();
@@ -1092,7 +1093,7 @@ public void
closedECContainerKeyAndBytesUsedUpdatedToMinimumOfAllReplicas()
final ContainerReportHandler reportHandler = new ContainerReportHandler(
nodeManager, containerManager);
- Pipeline pipeline = pipelineManager.createPipeline(repConfig);
+ Pipeline pipeline = pipelineManager.createPipeline(repConfig,
StorageTier.getDefaultTier());
Map<Integer, DatanodeDetails> dns = new HashMap<>();
final Iterator<DatanodeDetails> nodeIterator = nodeManager.getNodes(
NodeStatus.inServiceHealthy()).iterator();
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerStateManager.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerStateManager.java
index 182a589382a..ea9f8ae2f0a 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerStateManager.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerStateManager.java
@@ -42,6 +42,7 @@
import org.apache.hadoop.hdds.client.ECReplicationConfig;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
import org.apache.hadoop.hdds.client.StandaloneReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.MockDatanodeDetails;
@@ -103,7 +104,7 @@ public void init() throws IOException, TimeoutException,
InvalidStateTransitionE
ReplicationFactor.THREE))
.setNodes(new ArrayList<>()).build();
when(pipelineManager.createPipeline(StandaloneReplicationConfig.getInstance(
- ReplicationFactor.THREE))).thenReturn(pipeline);
+ ReplicationFactor.THREE),
StorageTier.getDefaultTier())).thenReturn(pipeline);
when(pipelineManager.containsPipeline(any(PipelineID.class))).thenReturn(true);
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestIncrementalContainerReportHandler.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestIncrementalContainerReportHandler.java
index 9bb1491c090..b0330c8effd 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestIncrementalContainerReportHandler.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestIncrementalContainerReportHandler.java
@@ -58,6 +58,7 @@
import org.apache.hadoop.hdds.HddsConfigKeys;
import org.apache.hadoop.hdds.client.ECReplicationConfig;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.client.StorageTypeUtils;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
@@ -466,7 +467,7 @@ public void testOpenWithUnhealthyReplica() throws
IOException {
RatisReplicationConfig replicationConfig =
RatisReplicationConfig.getInstance(HddsProtos.ReplicationFactor.THREE);
- Pipeline pipeline = pipelineManager.createPipeline(replicationConfig);
+ Pipeline pipeline = pipelineManager.createPipeline(replicationConfig,
StorageTier.getDefaultTier());
List<DatanodeDetails> nodes = pipeline.getNodes();
final DatanodeDetails datanodeOne = nodes.get(0);
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java
index 4dbe79fc135..e2a57cb924e 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java
@@ -41,6 +41,7 @@
import org.apache.hadoop.hdds.HddsConfigKeys;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.DatanodeID;
@@ -108,7 +109,7 @@ public void setUp() throws Exception {
pipelineManager = new MockPipelineManager(dbStore,
scmhaManager, nodeManager);
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- HddsProtos.ReplicationFactor.THREE));
+ HddsProtos.ReplicationFactor.THREE), StorageTier.getDefaultTier());
}
@AfterEach
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java
index 3515f83083d..139f7d27a8d 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java
@@ -71,6 +71,7 @@
import org.apache.hadoop.hdds.HddsConfigKeys;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.fs.SpaceUsageSource;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
@@ -464,7 +465,7 @@ private void assertPipelineCreationFailsWithNotEnoughNodes(
ReplicationConfig.fromProtoTypeAndFactor(
HddsProtos.ReplicationType.RATIS,
HddsProtos.ReplicationFactor.THREE);
- scm.getPipelineManager().createPipeline(ratisThree);
+ scm.getPipelineManager().createPipeline(ratisThree,
StorageTier.getDefaultTier());
}, "3 nodes should not have been found for a pipeline.");
assertThat(ex.getMessage()).contains("Required 3. Found " +
actualNodeCount);
@@ -477,7 +478,7 @@ private void
assertPipelineCreationFailsWithExceedingLimit(int limit) {
HddsProtos.ReplicationFactor.THREE);
SCMException ex = assertThrows(
SCMException.class,
- () -> scm.getPipelineManager().createPipeline(config),
+ () -> scm.getPipelineManager().createPipeline(config,
StorageTier.getDefaultTier()),
"3 nodes should not have been found for a pipeline.");
assertThat(ex.getMessage())
.contains("Cannot create pipeline for StorageTier DISK as it would
exceed the limit per datanode: " + limit);
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/MockPipelineManager.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/MockPipelineManager.java
index 62fd716656e..b8677ce3e16 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/MockPipelineManager.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/MockPipelineManager.java
@@ -65,15 +65,17 @@ public MockPipelineManager(DBStore dbStore, SCMHAManager
scmhaManager, NodeManag
}
@Override
- public Pipeline createPipeline(ReplicationConfig replicationConfig)
+ public Pipeline createPipeline(ReplicationConfig replicationConfig,
+ StorageTier storageTier)
throws IOException {
return createPipeline(replicationConfig, Collections.emptyList(),
- Collections.emptyList());
+ Collections.emptyList(), storageTier);
}
@Override
public Pipeline createPipeline(ReplicationConfig replicationConfig,
- List<DatanodeDetails> excludedNodes, List<DatanodeDetails> favoredNodes)
+ List<DatanodeDetails> excludedNodes, List<DatanodeDetails> favoredNodes,
+ StorageTier storageTier)
throws IOException {
Pipeline pipeline;
if (replicationConfig.getReplicationType()
@@ -85,7 +87,7 @@ public Pipeline createPipeline(ReplicationConfig
replicationConfig,
ImmutableList.of(MockDatanodeDetails.randomDatanodeDetails(),
MockDatanodeDetails.randomDatanodeDetails(),
MockDatanodeDetails.randomDatanodeDetails()),
- StorageTier.getDefaultTier());
+ storageTier);
}
stateManager.addPipeline(pipeline.getProtobufMessage(
@@ -180,13 +182,19 @@ public List<Pipeline> getPipelines(ReplicationConfig
replicationConfig,
return stateManager.getPipelines(replicationConfig, state);
}
+ @Override
+ public List<Pipeline> getPipelines(ReplicationConfig replicationConfig,
+ final Pipeline.PipelineState state, StorageTier storageTier) {
+ return stateManager.getPipelines(replicationConfig, state, storageTier);
+ }
+
@Override
public List<Pipeline> getPipelines(ReplicationConfig replicationConfig,
final Pipeline.PipelineState state,
final Collection<DatanodeDetails> excludeDns,
- final Collection<PipelineID> excludePipelines) {
+ final Collection<PipelineID> excludePipelines, StorageTier storageTier) {
return stateManager.getPipelines(replicationConfig, state,
- excludeDns, excludePipelines);
+ excludeDns, excludePipelines, storageTier);
}
@Override
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipelineManagerImpl.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipelineManagerImpl.java
index 2e453e5c7d2..327bcd6bed0 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipelineManagerImpl.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipelineManagerImpl.java
@@ -209,12 +209,12 @@ public void testCreatePipeline() throws Exception {
createPipelineManager(true, buffer1);
assertTrue(pipelineManager.getPipelines().isEmpty());
Pipeline pipeline1 = pipelineManager.createPipeline(
- RatisReplicationConfig.getInstance(ReplicationFactor.THREE));
+ RatisReplicationConfig.getInstance(ReplicationFactor.THREE),
StorageTier.getDefaultTier());
assertEquals(1, pipelineManager.getPipelines().size());
assertTrue(pipelineManager.containsPipeline(pipeline1.getId()));
Pipeline pipeline2 = pipelineManager.createPipeline(
- RatisReplicationConfig.getInstance(ReplicationFactor.ONE));
+ RatisReplicationConfig.getInstance(ReplicationFactor.ONE),
StorageTier.getDefaultTier());
assertEquals(2, pipelineManager.getPipelines().size());
assertTrue(pipelineManager.containsPipeline(pipeline2.getId()));
@@ -238,7 +238,7 @@ public void testCreatePipeline() throws Exception {
assertThat(pipelineManager2.getPipelines()).isNotEmpty();
assertEquals(3, pipelineManager.getPipelines().size());
Pipeline pipeline3 = pipelineManager2.createPipeline(
- RatisReplicationConfig.getInstance(ReplicationFactor.THREE));
+ RatisReplicationConfig.getInstance(ReplicationFactor.THREE),
StorageTier.getDefaultTier());
buffer2.close();
assertEquals(4, pipelineManager2.getPipelines().size());
assertTrue(pipelineManager2.containsPipeline(pipeline3.getId()));
@@ -251,7 +251,8 @@ public void testCreatePipelineShouldFailOnFollower() throws
Exception {
try (PipelineManager pipelineManager = createPipelineManager(false)) {
assertTrue(pipelineManager.getPipelines().isEmpty());
assertFailsNotLeader(() -> pipelineManager.createPipeline(
- RatisReplicationConfig.getInstance(ReplicationFactor.THREE)));
+ RatisReplicationConfig.getInstance(ReplicationFactor.THREE),
+ StorageTier.getDefaultTier()));
}
}
@@ -382,7 +383,7 @@ public void testPipelineReport() throws Exception {
serviceManager, new EventQueue(), scmContext);
Pipeline pipeline = pipelineManager
.createPipeline(RatisReplicationConfig
- .getInstance(ReplicationFactor.THREE));
+ .getInstance(ReplicationFactor.THREE),
StorageTier.getDefaultTier());
// pipeline is not healthy until all dns report
List<DatanodeDetails> nodes = pipeline.getNodes();
@@ -436,7 +437,7 @@ localNodeManager, pipelineManager,
mock(ContainerManager.class),
List<DatanodeDetails> nodes =
localNodeManager.getNodes(NodeStatus.inServiceHealthy());
assertEquals(nodeCount, nodes.size());
Pipeline pipeline = pipelineManager.createPipeline(RatisReplicationConfig
- .getInstance(ReplicationFactor.THREE));
+ .getInstance(ReplicationFactor.THREE), StorageTier.DISK);
assertEquals(StorageTier.DISK, pipeline.getSupportedStorageTier());
assertFalse(pipelineManager.getPipeline(pipeline.getId()).isHealthy());
@@ -490,7 +491,7 @@ public void testPipelineCreationFailedMetric() throws
Exception {
for (int i = 0; i < maxPipelineCount; i++) {
Pipeline pipeline = pipelineManager
.createPipeline(RatisReplicationConfig
- .getInstance(ReplicationFactor.THREE));
+ .getInstance(ReplicationFactor.THREE),
StorageTier.getDefaultTier());
assertNotNull(pipeline);
}
@@ -506,7 +507,9 @@ public void testPipelineCreationFailedMetric() throws
Exception {
//This should fail...
SCMException e =
assertThrows(SCMException.class,
- () ->
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(ReplicationFactor.THREE)));
+ () -> pipelineManager.createPipeline(
+ RatisReplicationConfig.getInstance(ReplicationFactor.THREE),
+ StorageTier.getDefaultTier()));
// pipeline creation failed this time.
assertEquals(ResultCodes.FAILED_TO_FIND_SUITABLE_NODE, e.getResult());
@@ -532,7 +535,7 @@ public void testPipelineOpenOnlyWhenLeaderReported() throws
Exception {
Pipeline pipeline = pipelineManager
.createPipeline(RatisReplicationConfig
- .getInstance(ReplicationFactor.THREE));
+ .getInstance(ReplicationFactor.THREE),
StorageTier.getDefaultTier());
// close manager
buffer1.close();
pipelineManager.close();
@@ -580,7 +583,7 @@ public void testScrubPipelines() throws Exception {
PipelineManagerImpl pipelineManager = createPipelineManager(true);
Pipeline allocatedPipeline = pipelineManager
.createPipeline(RatisReplicationConfig
- .getInstance(ReplicationFactor.THREE));
+ .getInstance(ReplicationFactor.THREE),
StorageTier.getDefaultTier());
// At this point, pipeline is not at OPEN stage.
assertEquals(Pipeline.PipelineState.ALLOCATED,
allocatedPipeline.getPipelineState());
@@ -593,7 +596,7 @@ public void testScrubPipelines() throws Exception {
Pipeline closedPipeline = pipelineManager
.createPipeline(RatisReplicationConfig
- .getInstance(ReplicationFactor.THREE));
+ .getInstance(ReplicationFactor.THREE),
StorageTier.getDefaultTier());
pipelineManager.openPipeline(closedPipeline.getId());
pipelineManager.closePipeline(closedPipeline.getId());
@@ -645,7 +648,7 @@ public void testScrubPipelines() throws Exception {
public void testScrubOpenWithUnregisteredNodes() throws Exception {
PipelineManagerImpl pipelineManager = createPipelineManager(true);
Pipeline pipeline = pipelineManager
- .createPipeline(new ECReplicationConfig(3, 2));
+ .createPipeline(new ECReplicationConfig(3, 2),
StorageTier.getDefaultTier());
pipelineManager.openPipeline(pipeline.getId());
// Scrubbing the pipelines should not affect this pipeline
@@ -689,7 +692,8 @@ public void testPipelineNotCreatedUntilSafeModePrecheck()
throws Exception {
PipelineManagerImpl pipelineManager = createPipelineManager(true);
assertThrows(IOException.class,
- () ->
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(ReplicationFactor.THREE)),
+ () ->
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(ReplicationFactor.THREE),
+ StorageTier.getDefaultTier()),
"Pipelines should not have been created");
// No pipeline is created.
assertTrue(pipelineManager.getPipelines().isEmpty());
@@ -698,7 +702,7 @@ public void testPipelineNotCreatedUntilSafeModePrecheck()
throws Exception {
// raised.
Pipeline pipeline = pipelineManager
.createPipeline(RatisReplicationConfig
- .getInstance(ReplicationFactor.ONE));
+ .getInstance(ReplicationFactor.ONE), StorageTier.getDefaultTier());
assertTrue(pipelineManager
.getPipelines(RatisReplicationConfig
.getInstance(ReplicationFactor.ONE))
@@ -747,7 +751,8 @@ public void testAddContainerWithClosedPipelineScmStart()
throws Exception {
SCMDBDefinition.PIPELINES.getTable(dbStore);
Pipeline pipeline = pipelineManager.createPipeline(
RatisReplicationConfig
- .getInstance(HddsProtos.ReplicationFactor.THREE));
+ .getInstance(HddsProtos.ReplicationFactor.THREE),
+ StorageTier.getDefaultTier());
PipelineID pipelineID = pipeline.getId();
pipelineManager.addContainerToPipeline(pipelineID, ContainerID.valueOf(1));
pipelineManager.getStateManager().updatePipelineState(
@@ -770,7 +775,8 @@ public void testAddContainerWithClosedPipeline() throws
Exception {
SCMDBDefinition.PIPELINES.getTable(dbStore);
Pipeline pipeline = pipelineManager.createPipeline(
RatisReplicationConfig
- .getInstance(HddsProtos.ReplicationFactor.THREE));
+ .getInstance(HddsProtos.ReplicationFactor.THREE),
+ StorageTier.getDefaultTier());
PipelineID pipelineID = pipeline.getId();
pipelineManager.addContainerToPipeline(pipelineID, ContainerID.valueOf(1));
pipelineManager.getStateManager().updatePipelineState(
@@ -788,7 +794,8 @@ public void testPipelineCloseFlow() throws IOException {
PipelineManagerImpl pipelineManager = createPipelineManager(true);
Pipeline pipeline = pipelineManager.createPipeline(
RatisReplicationConfig
- .getInstance(HddsProtos.ReplicationFactor.THREE));
+ .getInstance(HddsProtos.ReplicationFactor.THREE),
+ StorageTier.getDefaultTier());
PipelineID pipelineID = pipeline.getId();
ContainerManager containerManager = scm.getContainerManager();
ContainerInfo containerInfo = HddsTestUtils.
@@ -930,12 +937,12 @@ public void testWaitForAllocatedPipeline() throws
IOException {
// Throw on pipeline creates, so no new pipelines can be created
doThrow(SCMException.class).when(pipelineManagerSpy)
- .createPipeline(any(), any(), anyList());
+ .createPipeline(any(), any(), anyList(), any(StorageTier.class));
provider = new WritableRatisContainerProvider(
pipelineManagerSpy, containerManager, pipelineChoosingPolicy);
// Add a single pipeline to manager, (in the allocated state)
- allocatedPipeline = pipelineManager.createPipeline(repConfig);
+ allocatedPipeline = pipelineManager.createPipeline(repConfig,
StorageTier.getDefaultTier());
pipelineManager.getStateManager()
.updatePipelineState(allocatedPipeline.getId()
.getProtobuf(), HddsProtos.PipelineState.PIPELINE_ALLOCATED);
@@ -972,7 +979,7 @@ public void testWaitForAllocatedPipeline() throws
IOException {
ContainerInfo c = provider.getContainer(1, repConfig,
- owner, new ExcludeList());
+ owner, new ExcludeList(), StorageTier.getDefaultTier());
assertEquals(c, container, "Expected container was returned");
// Confirm that waitOnePipelineReady was called on allocated pipelines
@@ -1078,7 +1085,8 @@ private void sendPipelineReport(
private static Pipeline assertAllocate(PipelineManagerImpl pipelineManager) {
Pipeline pipeline = assertDoesNotThrow(
() -> pipelineManager.createPipeline(
- RatisReplicationConfig.getInstance(ReplicationFactor.THREE)));
+ RatisReplicationConfig.getInstance(ReplicationFactor.THREE),
+ StorageTier.getDefaultTier()));
assertEquals(1, pipelineManager.getPipelines().size());
assertTrue(pipelineManager.containsPipeline(pipeline.getId()));
assertEquals(ALLOCATED, pipeline.getPipelineState());
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestRatisPipelineProvider.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestRatisPipelineProvider.java
index 78e0fc4075b..4d1a9b1f649 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestRatisPipelineProvider.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestRatisPipelineProvider.java
@@ -223,10 +223,16 @@ public void
testPipelineEngagementLimitIsStorageTierAware() throws Exception {
}
@Test
- public void testGlobalPipelineNumberLimitIsNotStorageTierAware() throws
Exception {
+ public void testGlobalPipelineNumberLimitIsStorageTierAware() throws
Exception {
OzoneConfiguration pipelineLimitConf = new OzoneConfiguration();
pipelineLimitConf.setInt(OZONE_SCM_RATIS_PIPELINE_LIMIT, 1);
init(0, pipelineLimitConf, StorageTier.DISK);
+ // init(0, ...) sets numPipelinePerDatanode=0 which would cause
+ // filterPipelineEngagement to exclude every datanode. Bump it here
+ // before creating the spy so filterPipelineEngagement sees a positive
+ // limit. The provider's datanodePipelineLimit config is still 0, so
+ // the *global* branch of exceedPipelineNumberLimit is what runs.
+ nodeManager.setNumPipelinePerDatanode(5);
List<DatanodeDetails> diskAndSsdNodes = datanodeList.stream()
.map(TestRatisPipelineProvider::datanodeInfoWithDiskAndSsd)
.collect(Collectors.toList());
@@ -238,6 +244,7 @@ public void
testGlobalPipelineNumberLimitIsNotStorageTierAware() throws Exceptio
RatisPipelineProvider localProvider = new RatisPipelineProvider(
nodeManagerSpy, stateManager, pipelineLimitConf, new EventQueue(),
SCMContext.emptyContext());
+ // Fill the DISK tier up to the global limit.
for (int i = 0; i < 2; i++) {
addPipeline(diskAndSsdNodes.subList(i * 3, i * 3 + 3),
Pipeline.PipelineState.OPEN,
@@ -245,11 +252,11 @@ nodeManagerSpy, stateManager, pipelineLimitConf, new
EventQueue(),
StorageTier.DISK);
}
- SCMException exception = assertThrows(SCMException.class, () ->
- localProvider.create(
- RatisReplicationConfig.getInstance(ReplicationFactor.THREE),
StorageTier.SSD));
-
- assertThat(exception.getMessage()).contains("would exceed the limit");
+ // SSD is a distinct tier, so the global limit should not block creation.
+ Pipeline pipeline = localProvider.create(
+ RatisReplicationConfig.getInstance(ReplicationFactor.THREE),
StorageTier.SSD);
+ assertPipelineProperties(pipeline, ReplicationFactor.THREE,
+ REPLICATION_TYPE, Pipeline.PipelineState.ALLOCATED, StorageTier.SSD);
}
private List<DatanodeDetails> createListOfNodes(int count) {
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestWritableECContainerProvider.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestWritableECContainerProvider.java
index b3c34b44e4c..2ac103e8483 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestWritableECContainerProvider.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestWritableECContainerProvider.java
@@ -52,6 +52,7 @@
import org.apache.hadoop.hdds.HddsConfigKeys;
import org.apache.hadoop.hdds.client.ECReplicationConfig;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.MockDatanodeDetails;
@@ -209,7 +210,7 @@ private Set<ContainerInfo> assertDistinctContainers(int n)
Set<ContainerInfo> allocatedContainers = new HashSet<>();
for (int i = 0; i < n; i++) {
ContainerInfo container =
- provider.getContainer(1, repConfig, OWNER, new ExcludeList());
+ provider.getContainer(1, repConfig, OWNER, new ExcludeList(),
StorageTier.getDefaultTier());
assertThat(allocatedContainers)
.withFailMessage("Provided existing container for request " + i)
.doesNotContain(container);
@@ -222,7 +223,7 @@ private void assertReusesExisting(Set<ContainerInfo>
existing, int n)
throws IOException {
for (int i = 0; i < 3 * n; i++) {
ContainerInfo container =
- provider.getContainer(1, repConfig, OWNER, new ExcludeList());
+ provider.getContainer(1, repConfig, OWNER, new ExcludeList(),
StorageTier.getDefaultTier());
assertThat(existing)
.withFailMessage("Provided new container for request " + i)
.contains(container);
@@ -237,7 +238,7 @@ public void testPiplineLimitIgnoresExcludedPipelines(
Set<ContainerInfo> allocatedContainers = new HashSet<>();
for (int i = 0; i < providerConf.getMinimumPipelines(); i++) {
ContainerInfo container = provider.getContainer(
- 1, repConfig, OWNER, new ExcludeList());
+ 1, repConfig, OWNER, new ExcludeList(),
StorageTier.getDefaultTier());
allocatedContainers.add(container);
}
// We have the min limit of pipelines, but then exclude one. It should use
@@ -248,7 +249,7 @@ public void testPiplineLimitIgnoresExcludedPipelines(
.stream().findFirst().get().getPipelineID();
exclude.addPipeline(excludedID);
- ContainerInfo c = provider.getContainer(1, repConfig, OWNER, exclude);
+ ContainerInfo c = provider.getContainer(1, repConfig, OWNER, exclude,
StorageTier.getDefaultTier());
assertNotEquals(excludedID, c.getPipelineID());
assertThat(allocatedContainers).contains(c);
}
@@ -263,7 +264,7 @@ public void testNewPipelineNotCreatedIfAllPipelinesExcluded(
Set<ContainerInfo> allocatedContainers = new HashSet<>();
for (int i = 0; i < providerConf.getMinimumPipelines(); i++) {
ContainerInfo container = provider.getContainer(
- 1, repConfig, OWNER, new ExcludeList());
+ 1, repConfig, OWNER, new ExcludeList(),
StorageTier.getDefaultTier());
allocatedContainers.add(container);
}
// We have the min limit of pipelines, but then exclude them all
@@ -272,7 +273,7 @@ public void testNewPipelineNotCreatedIfAllPipelinesExcluded(
exclude.addPipeline(c.getPipelineID());
}
assertThrows(IOException.class, () -> provider.getContainer(
- 1, repConfig, OWNER, exclude));
+ 1, repConfig, OWNER, exclude, StorageTier.getDefaultTier()));
}
@ParameterizedTest
@@ -283,7 +284,7 @@ void
newPipelineCreatedIfSoftLimitReached(PipelineChoosePolicy policy)
providerConf.setMinimumPipelines(1);
provider = createSubject(policy);
ContainerInfo container = provider.getContainer(
- 1, repConfig, OWNER, new ExcludeList());
+ 1, repConfig, OWNER, new ExcludeList(), StorageTier.getDefaultTier());
ExcludeList exclude = new ExcludeList();
exclude.addPipeline(container.getPipelineID());
@@ -291,7 +292,7 @@ void
newPipelineCreatedIfSoftLimitReached(PipelineChoosePolicy policy)
pipelineManager.getPipeline(container.getPipelineID()).getFirstNode());
ContainerInfo newContainer = provider.getContainer(
- 1, repConfig, OWNER, exclude);
+ 1, repConfig, OWNER, exclude, StorageTier.getDefaultTier());
assertNotSame(container, newContainer);
}
@@ -305,7 +306,7 @@ public void
testNewPipelineNotCreatedIfAllContainersExcluded(
Set<ContainerInfo> allocatedContainers = new HashSet<>();
for (int i = 0; i < providerConf.getMinimumPipelines(); i++) {
ContainerInfo container = provider.getContainer(
- 1, repConfig, OWNER, new ExcludeList());
+ 1, repConfig, OWNER, new ExcludeList(),
StorageTier.getDefaultTier());
allocatedContainers.add(container);
}
// We have the min limit of pipelines, but then exclude all the associated
@@ -315,7 +316,7 @@ public void
testNewPipelineNotCreatedIfAllContainersExcluded(
exclude.addConatinerId(c.containerID());
}
assertThrows(IOException.class, () -> provider.getContainer(
- 1, repConfig, OWNER, exclude));
+ 1, repConfig, OWNER, exclude, StorageTier.getDefaultTier()));
}
@ParameterizedTest
@@ -327,14 +328,15 @@ public void testUnableToCreateAnyPipelinesThrowsException(
@Override
public Pipeline createPipeline(ReplicationConfig repConf,
List<DatanodeDetails> excludedNodes,
- List<DatanodeDetails> favoredNodes) throws IOException {
+ List<DatanodeDetails> favoredNodes,
+ StorageTier storageTier) throws IOException {
throw new IOException("Cannot create pipelines");
}
};
provider = createSubject(policy);
IOException ioException = assertThrows(IOException.class,
- () -> provider.getContainer(1, repConfig, OWNER, new ExcludeList()));
+ () -> provider.getContainer(1, repConfig, OWNER, new ExcludeList(),
StorageTier.getDefaultTier()));
assertThat(ioException.getMessage())
.contains("Cannot create pipelines");
}
@@ -351,25 +353,26 @@ public void
testExistingPipelineReturnedWhenNewCannotBeCreated(
@Override
public Pipeline createPipeline(ReplicationConfig repConf,
List<DatanodeDetails> excludedNodes,
- List<DatanodeDetails> favoredNodes)
+ List<DatanodeDetails> favoredNodes,
+ StorageTier storageTier)
throws IOException {
if (throwError) {
throw new RocksDatabaseException("Cannot create pipelines");
}
throwError = true;
- return super.createPipeline(repConfig);
+ return super.createPipeline(repConfig, storageTier);
}
};
provider = createSubject(policy);
IOException ioException = assertThrows(IOException.class,
- () -> provider.getContainer(1, repConfig, OWNER, new ExcludeList()));
+ () -> provider.getContainer(1, repConfig, OWNER, new ExcludeList(),
StorageTier.getDefaultTier()));
assertThat(ioException.getMessage())
.contains("Cannot create pipelines");
for (int i = 0; i < 5; i++) {
ioException = assertThrows(IOException.class,
- () -> provider.getContainer(1, repConfig, OWNER, new ExcludeList()));
+ () -> provider.getContainer(1, repConfig, OWNER, new ExcludeList(),
StorageTier.getDefaultTier()));
assertThat(ioException.getMessage())
.contains("Cannot create pipelines");
}
@@ -392,13 +395,14 @@ public void
testNewContainerAllocatedAndPipelinesClosedIfNoSpaceInExisting(
// We ask for a space of 50 MB, and will actually need 50 MB space.
ContainerInfo newContainer =
provider.getContainer(50 * 1024 * 1024, repConfig, OWNER,
- new ExcludeList());
+ new ExcludeList(), StorageTier.getDefaultTier());
assertNotNull(newContainer);
assertThat(allocatedContainers).contains(newContainer);
// Now get a new container where there is not enough space in the existing
// and ensure a new container gets created.
newContainer = provider.getContainer(
- 128 * 1024 * 1024, repConfig, OWNER, new ExcludeList());
+ 128 * 1024 * 1024, repConfig, OWNER, new ExcludeList(),
+ StorageTier.getDefaultTier());
assertNotNull(newContainer);
assertThat(allocatedContainers).doesNotContain(newContainer);
// The original pipelines should all be closed, triggered by the lack of
@@ -431,7 +435,7 @@ public NavigableSet<ContainerID>
getContainersInPipeline(PipelineID pipelineID)
// Now attempt to get a container - any attempt to use an existing with
// throw PNF and then we must allocate a new one
ContainerInfo newContainer =
- provider.getContainer(1, repConfig, OWNER, new ExcludeList());
+ provider.getContainer(1, repConfig, OWNER, new ExcludeList(),
StorageTier.getDefaultTier());
assertNotNull(newContainer);
assertThat(allocatedContainers).doesNotContain(newContainer);
}
@@ -451,7 +455,7 @@ public void
testContainerNotFoundWhenAttemptingToUseExisting(
}).when(containerManager).getContainer(any(ContainerID.class));
ContainerInfo newContainer =
- provider.getContainer(1, repConfig, OWNER, new ExcludeList());
+ provider.getContainer(1, repConfig, OWNER, new ExcludeList(),
StorageTier.getDefaultTier());
assertNotNull(newContainer);
assertThat(allocatedContainers).doesNotContain(newContainer);
@@ -473,7 +477,7 @@ public void testPipelineOpenButContainerRemovedFromIt(
Set<ContainerInfo> allocatedContainers = new HashSet<>();
for (int i = 0; i < providerConf.getMinimumPipelines(); i++) {
ContainerInfo container = provider.getContainer(
- 1, repConfig, OWNER, new ExcludeList());
+ 1, repConfig, OWNER, new ExcludeList(),
StorageTier.getDefaultTier());
assertThat(allocatedContainers).doesNotContain(container);
allocatedContainers.add(container);
// Remove the container from the pipeline to simulate closing it
@@ -481,7 +485,7 @@ public void testPipelineOpenButContainerRemovedFromIt(
container.getPipelineID(), container.containerID());
}
ContainerInfo newContainer = provider.getContainer(
- 1, repConfig, OWNER, new ExcludeList());
+ 1, repConfig, OWNER, new ExcludeList(), StorageTier.getDefaultTier());
assertThat(allocatedContainers).doesNotContain(newContainer);
for (ContainerInfo c : allocatedContainers) {
Pipeline pipeline = pipelineManager.getPipeline(c.getPipelineID());
@@ -518,7 +522,7 @@ public void
testExcludedOpenPipelineWithClosedContainerIsClosed(
// expecting a new container to be created
ContainerInfo containerInfo = provider.getContainer(1, repConfig, OWNER,
- excludeList);
+ excludeList, StorageTier.getDefaultTier());
assertThat(allocated).doesNotContain(containerInfo);
for (ContainerInfo c : allocated) {
Pipeline pipeline = pipelineManager.getPipeline(c.getPipelineID());
@@ -536,11 +540,12 @@ public void
testExcludedNodesPassedToCreatePipelineIfProvided(
// EmptyList should be passed if there are no nodes excluded.
ContainerInfo container = provider.getContainer(
- 1, repConfig, OWNER, excludeList);
+ 1, repConfig, OWNER, excludeList, StorageTier.getDefaultTier());
assertNotNull(container);
verify(pipelineManagerSpy).createPipeline(repConfig,
- Collections.emptyList(), Collections.emptyList());
+ Collections.emptyList(), Collections.emptyList(),
+ StorageTier.getDefaultTier());
// If nodes are excluded then the excluded nodes should be passed through
to
// the create pipeline call.
@@ -549,10 +554,10 @@ public void
testExcludedNodesPassedToCreatePipelineIfProvided(
new ArrayList<>(excludeList.getDatanodes());
container = provider.getContainer(
- 1, repConfig, OWNER, excludeList);
+ 1, repConfig, OWNER, excludeList, StorageTier.getDefaultTier());
assertNotNull(container);
verify(pipelineManagerSpy).createPipeline(repConfig, excludedNodes,
- Collections.emptyList());
+ Collections.emptyList(), StorageTier.getDefaultTier());
}
private ContainerInfo createContainer(Pipeline pipeline,
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestWritableRatisContainerProvider.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestWritableRatisContainerProvider.java
index a1ba81d0a70..6c43a0d1759 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestWritableRatisContainerProvider.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestWritableRatisContainerProvider.java
@@ -24,6 +24,8 @@
import static org.apache.hadoop.hdds.scm.pipeline.Pipeline.PipelineState.OPEN;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -35,6 +37,7 @@
import java.util.concurrent.atomic.AtomicLong;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.scm.PipelineChoosePolicy;
@@ -78,7 +81,8 @@ void returnsExistingContainer() throws Exception {
existingPipelines(pipeline);
- ContainerInfo container = createSubject().getContainer(CONTAINER_SIZE,
REPLICATION_CONFIG, OWNER, NO_EXCLUSION);
+ ContainerInfo container = createSubject().getContainer(
+ CONTAINER_SIZE, REPLICATION_CONFIG, OWNER, NO_EXCLUSION,
StorageTier.getDefaultTier());
assertSame(existingContainer, container);
verifyPipelineNotCreated();
@@ -92,7 +96,8 @@ void skipsPipelineWithoutContainer() throws Exception {
Pipeline pipelineWithoutContainer = MockPipeline.createPipeline(3);
existingPipelines(pipelineWithoutContainer, pipeline);
- ContainerInfo container = createSubject().getContainer(CONTAINER_SIZE,
REPLICATION_CONFIG, OWNER, NO_EXCLUSION);
+ ContainerInfo container = createSubject().getContainer(
+ CONTAINER_SIZE, REPLICATION_CONFIG, OWNER, NO_EXCLUSION,
StorageTier.getDefaultTier());
assertSame(existingContainer, container);
verifyPipelineNotCreated();
@@ -102,7 +107,8 @@ void skipsPipelineWithoutContainer() throws Exception {
void createsNewContainerIfNoneFound() throws Exception {
ContainerInfo newContainer = createNewContainerOnDemand();
- ContainerInfo container = createSubject().getContainer(CONTAINER_SIZE,
REPLICATION_CONFIG, OWNER, NO_EXCLUSION);
+ ContainerInfo container = createSubject().getContainer(
+ CONTAINER_SIZE, REPLICATION_CONFIG, OWNER, NO_EXCLUSION,
StorageTier.getDefaultTier());
assertSame(newContainer, container);
verifyPipelineCreated();
@@ -113,7 +119,8 @@ void failsIfContainerCannotBeCreated() throws Exception {
throwWhenCreatePipeline();
assertThrows(IOException.class,
- () -> createSubject().getContainer(CONTAINER_SIZE, REPLICATION_CONFIG,
OWNER, NO_EXCLUSION));
+ () -> createSubject().getContainer(
+ CONTAINER_SIZE, REPLICATION_CONFIG, OWNER, NO_EXCLUSION,
StorageTier.getDefaultTier()));
verifyPipelineCreated();
}
@@ -123,7 +130,8 @@ private void existingPipelines(Pipeline... pipelines) {
}
private void existingPipelines(List<Pipeline> pipelines) {
- when(pipelineManager.getPipelines(REPLICATION_CONFIG, OPEN, emptySet(),
emptySet()))
+ when(pipelineManager.getPipelines(REPLICATION_CONFIG, OPEN, emptySet(),
emptySet(),
+ StorageTier.getDefaultTier()))
.thenReturn(pipelines);
}
@@ -141,10 +149,11 @@ private ContainerInfo pipelineHasContainer(Pipeline
pipeline) {
private ContainerInfo createNewContainerOnDemand() throws IOException {
Pipeline newPipeline = MockPipeline.createPipeline(3);
- when(pipelineManager.createPipeline(REPLICATION_CONFIG))
+ when(pipelineManager.createPipeline(eq(REPLICATION_CONFIG),
any(StorageTier.class)))
.thenReturn(newPipeline);
- when(pipelineManager.getPipelines(REPLICATION_CONFIG, OPEN, emptySet(),
emptySet()))
+ when(pipelineManager.getPipelines(REPLICATION_CONFIG, OPEN, emptySet(),
emptySet(),
+ StorageTier.getDefaultTier()))
.thenReturn(emptyList())
.thenReturn(new ArrayList<>(singletonList(newPipeline)));
@@ -152,7 +161,7 @@ private ContainerInfo createNewContainerOnDemand() throws
IOException {
}
private void throwWhenCreatePipeline() throws IOException {
- when(pipelineManager.createPipeline(REPLICATION_CONFIG))
+ when(pipelineManager.createPipeline(REPLICATION_CONFIG,
StorageTier.getDefaultTier()))
.thenThrow(new
SCMException(SCMException.ResultCodes.FAILED_TO_FIND_SUITABLE_NODE));
}
@@ -163,16 +172,18 @@ private WritableRatisContainerProvider createSubject() {
private void verifyPipelineCreated() throws IOException {
verify(pipelineManager, times(2))
- .getPipelines(REPLICATION_CONFIG, OPEN, emptySet(), emptySet());
+ .getPipelines(REPLICATION_CONFIG, OPEN, emptySet(), emptySet(),
+ StorageTier.getDefaultTier());
verify(pipelineManager)
- .createPipeline(REPLICATION_CONFIG);
+ .createPipeline(REPLICATION_CONFIG, StorageTier.getDefaultTier());
}
private void verifyPipelineNotCreated() throws IOException {
verify(pipelineManager, times(1))
- .getPipelines(REPLICATION_CONFIG, OPEN, emptySet(), emptySet());
+ .getPipelines(REPLICATION_CONFIG, OPEN, emptySet(), emptySet(),
+ StorageTier.getDefaultTier());
verify(pipelineManager, never())
- .createPipeline(REPLICATION_CONFIG);
+ .createPipeline(REPLICATION_CONFIG, StorageTier.getDefaultTier());
}
}
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestHealthyPipelineSafeModeRule.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestHealthyPipelineSafeModeRule.java
index b1312512d56..d33438d1aa5 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestHealthyPipelineSafeModeRule.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestHealthyPipelineSafeModeRule.java
@@ -30,6 +30,7 @@
import java.util.List;
import org.apache.hadoop.hdds.HddsConfigKeys;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
@@ -154,15 +155,15 @@ public void
testHealthyPipelineSafeModeRuleWithPipelines() throws Exception {
// Create 3 pipelines
Pipeline pipeline1 =
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE));
+ ReplicationFactor.THREE), StorageTier.getDefaultTier());
pipelineManager.openPipeline(pipeline1.getId());
Pipeline pipeline2 =
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE));
+ ReplicationFactor.THREE), StorageTier.getDefaultTier());
pipelineManager.openPipeline(pipeline2.getId());
Pipeline pipeline3 =
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE));
+ ReplicationFactor.THREE), StorageTier.getDefaultTier());
pipelineManager.openPipeline(pipeline3.getId());
// Mark pipeline healthy
@@ -247,15 +248,15 @@ public void
testHealthyPipelineSafeModeRuleWithMixedPipelines()
// Create 3 pipelines
Pipeline pipeline1 =
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- ReplicationFactor.ONE));
+ ReplicationFactor.ONE), StorageTier.getDefaultTier());
pipelineManager.openPipeline(pipeline1.getId());
Pipeline pipeline2 =
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE));
+ ReplicationFactor.THREE), StorageTier.getDefaultTier());
pipelineManager.openPipeline(pipeline2.getId());
Pipeline pipeline3 =
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE));
+ ReplicationFactor.THREE), StorageTier.getDefaultTier());
pipelineManager.openPipeline(pipeline3.getId());
// Mark pipelines healthy
@@ -338,13 +339,13 @@ public void
testHealthyPipelineThresholdIncreasesWithMorePipelinesAndReports()
// blocked once safe mode prechecks have not passed.
Pipeline pipeline1 =
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE));
+ ReplicationFactor.THREE), StorageTier.getDefaultTier());
Pipeline pipeline2 =
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE));
+ ReplicationFactor.THREE), StorageTier.getDefaultTier());
Pipeline pipeline3 =
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE));
+ ReplicationFactor.THREE), StorageTier.getDefaultTier());
// Start with one healthy open pipeline. Threshold is small at this
point.
pipelineManager.openPipeline(pipeline1.getId());
@@ -446,7 +447,7 @@ public void testPipelineIgnoredWhenDnIsUnhealthy() throws
Exception {
// Create a Ratis pipeline with 3 replicas
Pipeline pipeline =
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE));
+ ReplicationFactor.THREE), StorageTier.getDefaultTier());
pipelineManager.openPipeline(pipeline.getId());
pipeline = pipelineManager.getPipeline(pipeline.getId());
MockRatisPipelineProvider.markPipelineHealthy(pipeline);
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestOneReplicaPipelineSafeModeRule.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestOneReplicaPipelineSafeModeRule.java
index e83b6e51a93..6cad99edc3b 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestOneReplicaPipelineSafeModeRule.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestOneReplicaPipelineSafeModeRule.java
@@ -32,6 +32,7 @@
import org.apache.hadoop.hdds.HddsConfigKeys;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
@@ -239,7 +240,7 @@ private void createPipelines(int count,
HddsProtos.ReplicationFactor factor) throws Exception {
for (int i = 0; i < count; i++) {
Pipeline pipeline = pipelineManager.createPipeline(
- RatisReplicationConfig.getInstance(factor));
+ RatisReplicationConfig.getInstance(factor),
StorageTier.getDefaultTier());
pipelineManager.openPipeline(pipeline.getId());
}
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestSCMSafeModeManager.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestSCMSafeModeManager.java
index fdf38a7a67c..962c719082d 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestSCMSafeModeManager.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/safemode/TestSCMSafeModeManager.java
@@ -40,6 +40,7 @@
import org.apache.commons.lang3.tuple.Pair;
import org.apache.hadoop.hdds.HddsConfigKeys;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
@@ -312,7 +313,7 @@ public void
testSafeModeExitRuleWithPipelineAvailabilityCheck(
// Create pipeline
Pipeline pipeline = pipelineManager.createPipeline(
RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE));
+ ReplicationFactor.THREE), StorageTier.getDefaultTier());
pipelineManager.openPipeline(pipeline.getId());
// Mark pipeline healthy
@@ -721,7 +722,7 @@ public void testSafeModePipelineExitRule() throws Exception
{
Pipeline pipeline = pipelineManager.createPipeline(
RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE));
+ ReplicationFactor.THREE), StorageTier.getDefaultTier());
pipeline = pipelineManager.getPipeline(pipeline.getId());
MockRatisPipelineProvider.markPipelineHealthy(pipeline);
@@ -814,7 +815,7 @@ public void testPipelinesNotCreatedUntilPreCheckPasses()
throws Exception {
assertTrue(scmSafeModeManager.getInSafeMode());
Pipeline pipeline = pipelineManager.createPipeline(
- RatisReplicationConfig.getInstance(ReplicationFactor.THREE));
+ RatisReplicationConfig.getInstance(ReplicationFactor.THREE),
StorageTier.getDefaultTier());
// Mark pipeline healthy
pipeline = pipelineManager.getPipeline(pipeline.getId());
@@ -933,7 +934,7 @@ public void testSafeModePeriodicLoggingStopsOnNormalExit()
throws Exception {
assertThat(logCapturer.getOutput()).contains("SCM SafeMode Status |
state=PRE_CHECKS_PASSED");
Pipeline pipeline = pipelineManager.createPipeline(
- RatisReplicationConfig.getInstance(ReplicationFactor.THREE));
+ RatisReplicationConfig.getInstance(ReplicationFactor.THREE),
StorageTier.getDefaultTier());
pipeline = pipelineManager.getPipeline(pipeline.getId());
MockRatisPipelineProvider.markPipelineHealthy(pipeline);
firePipelineEvent(pipelineManager, pipeline);
diff --git
a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/ContainerOperationClient.java
b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/ContainerOperationClient.java
index c1973891d0a..2b28903d620 100644
---
a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/ContainerOperationClient.java
+++
b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/ContainerOperationClient.java
@@ -160,6 +160,7 @@ public ContainerWithPipeline createContainer(String owner)
XceiverClientSpi client = null;
XceiverClientManager clientManager = getXceiverClientManager();
try {
+ // TODO Support create Container Command with StorageTier
ContainerWithPipeline containerWithPipeline =
storageContainerLocationClient.
allocateContainer(replicationType, replicationFactor, owner);
diff --git
a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconAsPassiveScm.java
b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconAsPassiveScm.java
index 1b47f972382..64738d9c7a8 100644
---
a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconAsPassiveScm.java
+++
b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconAsPassiveScm.java
@@ -31,6 +31,7 @@
import java.util.Optional;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.scm.XceiverClientGrpc;
import org.apache.hadoop.hdds.scm.container.ContainerID;
@@ -107,7 +108,8 @@ public void testDatanodeRegistrationAndReports() throws
Exception {
UnsupportedOperationException exception = assertThrows(
UnsupportedOperationException.class,
() -> reconPipelineManager
- .createPipeline(RatisReplicationConfig.getInstance(ONE)));
+ .createPipeline(RatisReplicationConfig.getInstance(ONE),
+ StorageTier.getDefaultTier()));
assertTrue(exception.getMessage()
.contains("Trying to create pipeline in Recon, which is prohibited!"));
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestSafeMode.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestSafeMode.java
index 1300c61b1f8..e2cda809fbb 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestSafeMode.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestSafeMode.java
@@ -35,6 +35,7 @@
import org.apache.hadoop.fs.SafeMode;
import org.apache.hadoop.fs.SafeModeAction;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.scm.container.common.helpers.ExcludeList;
import org.apache.hadoop.hdds.utils.IOUtils;
@@ -117,7 +118,8 @@ private void testSafeMode(Function<OzoneConfiguration,
String> fsRoot)
RatisReplicationConfig.getInstance(THREE);
assertThrows(IOException.class, () ->
cluster.getStorageContainerManager()
.getWritableContainerFactory()
- .getContainer(MB, replication, OZONE, new ExcludeList()));
+ .getContainer(MB, replication, OZONE, new ExcludeList(),
+ StorageTier.getDefaultTier()));
} finally {
IOUtils.closeQuietly(fs);
}
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestMultiRaftSetup.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestMultiRaftSetup.java
index f780ec184d2..655ad340a29 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestMultiRaftSetup.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestMultiRaftSetup.java
@@ -29,6 +29,7 @@
import java.util.stream.Collectors;
import org.apache.hadoop.hdds.HddsConfigKeys;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
@@ -98,7 +99,7 @@ public void testMultiRaftNotSamePeers() throws Exception {
// datanode pipeline limit is set to 2, but only one set of 3 pipelines
// will be created. Further pipeline creation should fail
assertEquals(1, pipelineManager.getPipelines(RATIS_THREE).size());
- assertThrows(IOException.class, () ->
pipelineManager.createPipeline(RATIS_THREE));
+ assertThrows(IOException.class, () ->
pipelineManager.createPipeline(RATIS_THREE, StorageTier.getDefaultTier()));
shutdown();
}
@@ -119,7 +120,7 @@ public void testMultiRaft() throws Exception {
.filter((dn) -> nodeManager.getPipelinesCount(dn) > 2).collect(
Collectors.toList());
assertEquals(1, dns.size());
- assertThrows(IOException.class, () ->
pipelineManager.createPipeline(RATIS_THREE));
+ assertThrows(IOException.class, () ->
pipelineManager.createPipeline(RATIS_THREE, StorageTier.getDefaultTier()));
Collection<PipelineID> pipelineIds = nodeManager.getPipelines(dns.get(0));
// Only one dataode should have 3 pipelines in total, 1 RATIS ONE pipeline
// and 2 RATIS 3 pipeline
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestRatisPipelineCreateAndDestroy.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestRatisPipelineCreateAndDestroy.java
index 3c3eee25393..bbbd41d4296 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestRatisPipelineCreateAndDestroy.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestRatisPipelineCreateAndDestroy.java
@@ -30,6 +30,7 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationFactor;
@@ -142,7 +143,7 @@ public void testPipelineCreationOnNodeRestart() throws
Exception {
// try creating another pipeline now
SCMException ioe = assertThrows(SCMException.class, () ->
pipelineManager.createPipeline(RatisReplicationConfig.getInstance(
- ReplicationFactor.THREE)),
+ ReplicationFactor.THREE), StorageTier.getDefaultTier()),
"pipeline creation should fail after shutting down pipeline");
assertEquals(SCMException.ResultCodes.FAILED_TO_FIND_SUITABLE_NODE,
ioe.getResult());
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/storage/TestContainerCommandsEC.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/storage/TestContainerCommandsEC.java
index 7ce4f9319db..31bd6036e74 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/storage/TestContainerCommandsEC.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/storage/TestContainerCommandsEC.java
@@ -57,6 +57,7 @@
import org.apache.hadoop.hdds.client.ECReplicationConfig;
import org.apache.hadoop.hdds.client.ECReplicationConfig.EcCodec;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.MockDatanodeDetails;
@@ -449,7 +450,7 @@ public void testCreateRecoveryContainer() throws Exception {
new XceiverClientManager(config)) {
ECReplicationConfig replicationConfig = new ECReplicationConfig(3, 2);
Pipeline newPipeline =
- scm.getPipelineManager().createPipeline(replicationConfig);
+ scm.getPipelineManager().createPipeline(replicationConfig,
StorageTier.getDefaultTier());
scm.getPipelineManager().activatePipeline(newPipeline.getId());
final ContainerInfo container = scm.getContainerManager()
.allocateContainer(replicationConfig, "test");
@@ -538,7 +539,7 @@ public void testCreateRecoveryContainerAfterDNRestart()
throws Exception {
new XceiverClientManager(config)) {
ECReplicationConfig replicationConfig = new ECReplicationConfig(3, 2);
Pipeline newPipeline =
- scm.getPipelineManager().createPipeline(replicationConfig);
+ scm.getPipelineManager().createPipeline(replicationConfig,
StorageTier.getDefaultTier());
scm.getPipelineManager().activatePipeline(newPipeline.getId());
final ContainerInfo container = scm.getContainerManager()
.allocateContainer(replicationConfig, "test");
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/upgrade/TestHDDSUpgrade.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/upgrade/TestHDDSUpgrade.java
index 4b612729583..e77b59c8679 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/upgrade/TestHDDSUpgrade.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/upgrade/TestHDDSUpgrade.java
@@ -53,6 +53,7 @@
import org.apache.hadoop.hdds.client.ReplicationConfig;
import org.apache.hadoop.hdds.client.ReplicationFactor;
import org.apache.hadoop.hdds.client.ReplicationType;
+import org.apache.hadoop.hdds.client.StorageTier;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
@@ -224,7 +225,7 @@ private void createKey() throws IOException {
*/
private void testPostUpgradePipelineCreation()
throws IOException, TimeoutException {
- Pipeline ratisPipeline1 = scmPipelineManager.createPipeline(RATIS_THREE);
+ Pipeline ratisPipeline1 = scmPipelineManager.createPipeline(RATIS_THREE,
StorageTier.getDefaultTier());
scmPipelineManager.openPipeline(ratisPipeline1.getId());
assertEquals(0,
scmPipelineManager.getNumberOfContainers(ratisPipeline1.getId()));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]