use of org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.Type in project ozone by apache.
the class StorageContainerLocationProtocolClientSideTranslatorPB method createReplicationPipeline.
/**
* Creates a replication pipeline of a specified type.
*
* @param replicationType - replication type
* @param factor - factor 1 or 3
* @param nodePool - optional machine list to build a pipeline.
*/
@Override
public Pipeline createReplicationPipeline(HddsProtos.ReplicationType replicationType, HddsProtos.ReplicationFactor factor, HddsProtos.NodePool nodePool) throws IOException {
PipelineRequestProto request = PipelineRequestProto.newBuilder().setTraceID(TracingUtil.exportCurrentSpan()).setNodePool(nodePool).setReplicationFactor(factor).setReplicationType(replicationType).build();
PipelineResponseProto response = submitRequest(Type.AllocatePipeline, builder -> builder.setPipelineRequest(request)).getPipelineResponse();
if (response.getErrorCode() == PipelineResponseProto.Error.success) {
Preconditions.checkState(response.hasPipeline(), "With success, " + "must come a pipeline");
return Pipeline.getFromProtobuf(response.getPipeline());
} else {
String errorMessage = String.format("create replication pipeline " + "failed. code : %s Message: %s", response.getErrorCode(), response.hasErrorMessage() ? response.getErrorMessage() : "");
throw new IOException(errorMessage);
}
}
use of org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.Type in project ozone by apache.
the class StorageContainerLocationProtocolClientSideTranslatorPB method allocateContainer.
/**
* Asks SCM where a container should be allocated. SCM responds with the set
* of datanodes that should be used creating this container. Ozone/SCM only
* supports replication factor of either 1 or 3.
*
* @param type - Replication Type
* @param factor - Replication Count
* @param owner - Service owner of the container.
*/
@Override
public ContainerWithPipeline allocateContainer(HddsProtos.ReplicationType type, HddsProtos.ReplicationFactor factor, String owner) throws IOException {
ContainerRequestProto request = ContainerRequestProto.newBuilder().setTraceID(TracingUtil.exportCurrentSpan()).setReplicationFactor(factor).setReplicationType(type).setOwner(owner).build();
ContainerResponseProto response = submitRequest(Type.AllocateContainer, builder -> builder.setContainerRequest(request)).getContainerResponse();
// TODO should be migrated to use the top level status structure.
if (response.getErrorCode() != ContainerResponseProto.Error.success) {
throw new IOException(response.hasErrorMessage() ? response.getErrorMessage() : "Allocate container failed.");
}
return ContainerWithPipeline.fromProtobuf(response.getContainerWithPipeline());
}
Aggregations