diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java index f48fad19e3f7..e587463e16e6 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java @@ -23,6 +23,7 @@ import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos; +import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.PipelineResponseProto; import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ActivatePipelineRequestProto; import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ActivatePipelineResponseProto; import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ClosePipelineRequestProto; @@ -70,6 +71,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.PipelineResponseProto.Error.errorPipelineAlreadyExists; +import static org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.PipelineResponseProto.Error.success; + /** * This class is the server-side translator that forwards requests received on * {@link StorageContainerLocationProtocolPB} to the @@ -158,6 +162,12 @@ public ScmContainerLocationResponse processRequest( .setScmCloseContainerResponse(closeContainer( request.getScmCloseContainerRequest())) .build(); + case AllocatePipeline: + return ScmContainerLocationResponse.newBuilder() + .setCmdType(request.getCmdType()) + .setStatus(Status.OK) + .setPipelineResponse(allocatePipeline(request.getPipelineRequest())) + .build(); case ListPipelines: return ScmContainerLocationResponse.newBuilder() .setCmdType(request.getCmdType()) @@ -318,6 +328,22 @@ public SCMCloseContainerResponseProto closeContainer( return SCMCloseContainerResponseProto.newBuilder().build(); } + public PipelineResponseProto allocatePipeline( + StorageContainerLocationProtocolProtos.PipelineRequestProto request) + throws IOException { + Pipeline pipeline = impl.createReplicationPipeline( + request.getReplicationType(), request.getReplicationFactor(), + HddsProtos.NodePool.getDefaultInstance()); + if (pipeline == null) { + return PipelineResponseProto.newBuilder() + .setErrorCode(errorPipelineAlreadyExists).build(); + } + PipelineResponseProto response = PipelineResponseProto.newBuilder() + .setErrorCode(success) + .setPipeline(pipeline.getProtobufMessage()).build(); + return response; + } + public ListPipelineResponseProto listPipelines( ListPipelineRequestProto request) throws IOException { diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/pipeline/CreatePipelineSubcommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/pipeline/CreatePipelineSubcommand.java index edeb786726a9..58a177865204 100644 --- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/pipeline/CreatePipelineSubcommand.java +++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/pipeline/CreatePipelineSubcommand.java @@ -20,7 +20,6 @@ import org.apache.hadoop.hdds.cli.HddsVersionProvider; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; -import org.apache.hadoop.hdds.scm.cli.SCMCLI; import org.apache.hadoop.hdds.scm.client.ScmClient; import picocli.CommandLine; @@ -30,13 +29,13 @@ * Handler of createPipeline command. */ @CommandLine.Command( - name = "createPipeline", + name = "create", description = "create pipeline", mixinStandardHelpOptions = true, versionProvider = HddsVersionProvider.class) public class CreatePipelineSubcommand implements Callable { @CommandLine.ParentCommand - private SCMCLI parent; + private PipelineCommands parent; @CommandLine.Option( names = {"-t", "--replicationType"}, @@ -60,7 +59,7 @@ public Void call() throws Exception { throw new IllegalArgumentException(type.name() + " is not supported yet."); } - try (ScmClient scmClient = parent.createScmClient()) { + try (ScmClient scmClient = parent.getParent().createScmClient()) { scmClient.createReplicationPipeline( type, factor,