You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ms...@apache.org on 2018/01/18 10:00:35 UTC
hadoop git commit: HDFS-13013. Fix closeContainer API with the right
container state change. Contributed by Xiaoyu Yao.
Repository: hadoop
Updated Branches:
refs/heads/HDFS-7240 94fd8201f -> 32476cd8f
HDFS-13013. Fix closeContainer API with the right container state change. Contributed by Xiaoyu Yao.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/32476cd8
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/32476cd8
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/32476cd8
Branch: refs/heads/HDFS-7240
Commit: 32476cd8fcbc458cdd7b052bbb42875bdee8ab87
Parents: 94fd820
Author: Mukul Kumar Singh <ms...@apache.org>
Authored: Thu Jan 18 15:14:58 2018 +0530
Committer: Mukul Kumar Singh <ms...@apache.org>
Committed: Thu Jan 18 15:14:58 2018 +0530
----------------------------------------------------------------------
.../ozone/client/io/ChunkGroupOutputStream.java | 10 ++--
.../scm/client/ContainerOperationClient.java | 46 ++++++++++------
.../StorageContainerLocationProtocol.java | 18 +++----
...rLocationProtocolClientSideTranslatorPB.java | 34 ++++--------
.../StorageContainerLocationProtocol.proto | 28 ++++------
...rLocationProtocolServerSideTranslatorPB.java | 28 +++-------
.../ozone/scm/StorageContainerManager.java | 57 +++++++++++---------
.../ozone/scm/container/ContainerMapping.java | 23 ++------
.../hadoop/ozone/scm/container/Mapping.java | 8 ---
9 files changed, 105 insertions(+), 147 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/32476cd8/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/ozone/client/io/ChunkGroupOutputStream.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/ozone/client/io/ChunkGroupOutputStream.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/ozone/client/io/ChunkGroupOutputStream.java
index fe248e3..80e0c78 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/ozone/client/io/ChunkGroupOutputStream.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/ozone/client/io/ChunkGroupOutputStream.java
@@ -28,7 +28,7 @@ import org.apache.hadoop.ozone.ksm.helpers.KsmKeyInfo;
import org.apache.hadoop.ozone.ksm.helpers.KsmKeyLocationInfo;
import org.apache.hadoop.ozone.ksm.helpers.OpenKeySession;
import org.apache.hadoop.ozone.ksm.protocolPB.KeySpaceManagerProtocolClientSideTranslatorPB;
-import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.NotifyObjectCreationStageRequestProto;
+import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ObjectStageChangeRequestProto;
import org.apache.hadoop.scm.XceiverClientManager;
import org.apache.hadoop.scm.XceiverClientSpi;
import org.apache.hadoop.scm.container.common.helpers.Pipeline;
@@ -168,10 +168,10 @@ public class ChunkGroupOutputStream extends OutputStream {
if (subKeyInfo.getShouldCreateContainer()) {
try {
ContainerProtocolCalls.createContainer(xceiverClient, requestID);
- scmClient.notifyObjectCreationStage(
- NotifyObjectCreationStageRequestProto.Type.container,
- containerName,
- NotifyObjectCreationStageRequestProto.Stage.complete);
+ scmClient.notifyObjectStageChange(
+ ObjectStageChangeRequestProto.Type.container,
+ containerName, ObjectStageChangeRequestProto.Op.create,
+ ObjectStageChangeRequestProto.Stage.complete);
} catch (StorageContainerException ex) {
if (ex.getResult().equals(Result.CONTAINER_EXISTS)) {
//container already exist, this should never happen
http://git-wip-us.apache.org/repos/asf/hadoop/blob/32476cd8/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/client/ContainerOperationClient.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/client/ContainerOperationClient.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/client/ContainerOperationClient.java
index 52e7993..d411a6b 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/client/ContainerOperationClient.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/client/ContainerOperationClient.java
@@ -21,7 +21,7 @@ import com.google.common.base.Preconditions;
import org.apache.hadoop.hdfs.ozone.protocol.proto.ContainerProtos.ContainerData;
import org.apache.hadoop.hdfs.ozone.protocol.proto.ContainerProtos.ReadContainerResponseProto;
import org.apache.hadoop.ozone.protocol.proto.OzoneProtos;
-import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.NotifyObjectCreationStageRequestProto;
+import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ObjectStageChangeRequestProto;
import org.apache.hadoop.scm.XceiverClientManager;
import org.apache.hadoop.scm.XceiverClientSpi;
import org.apache.hadoop.scm.container.common.helpers.ContainerInfo;
@@ -122,15 +122,17 @@ public class ContainerOperationClient implements ScmClient {
public void createContainer(String containerId, XceiverClientSpi client,
Pipeline pipeline) throws IOException {
String traceID = UUID.randomUUID().toString();
- storageContainerLocationClient.notifyObjectCreationStage(
- NotifyObjectCreationStageRequestProto.Type.container,
+ storageContainerLocationClient.notifyObjectStageChange(
+ ObjectStageChangeRequestProto.Type.container,
containerId,
- NotifyObjectCreationStageRequestProto.Stage.begin);
+ ObjectStageChangeRequestProto.Op.create,
+ ObjectStageChangeRequestProto.Stage.begin);
ContainerProtocolCalls.createContainer(client, traceID);
- storageContainerLocationClient.notifyObjectCreationStage(
- NotifyObjectCreationStageRequestProto.Type.container,
+ storageContainerLocationClient.notifyObjectStageChange(
+ ObjectStageChangeRequestProto.Type.container,
containerId,
- NotifyObjectCreationStageRequestProto.Stage.complete);
+ ObjectStageChangeRequestProto.Op.create,
+ ObjectStageChangeRequestProto.Stage.complete);
// Let us log this info after we let SCM know that we have completed the
// creation state.
@@ -162,18 +164,20 @@ public class ContainerOperationClient implements ScmClient {
// 2. Talk to Datanodes to create the pipeline.
//
// 3. update SCM that pipeline creation was successful.
- storageContainerLocationClient.notifyObjectCreationStage(
- NotifyObjectCreationStageRequestProto.Type.pipeline,
+ storageContainerLocationClient.notifyObjectStageChange(
+ ObjectStageChangeRequestProto.Type.pipeline,
pipeline.getPipelineName(),
- NotifyObjectCreationStageRequestProto.Stage.begin);
+ ObjectStageChangeRequestProto.Op.create,
+ ObjectStageChangeRequestProto.Stage.begin);
client.createPipeline(pipeline.getPipelineName(),
pipeline.getMachines());
- storageContainerLocationClient.notifyObjectCreationStage(
- NotifyObjectCreationStageRequestProto.Type.pipeline,
+ storageContainerLocationClient.notifyObjectStageChange(
+ ObjectStageChangeRequestProto.Type.pipeline,
pipeline.getPipelineName(),
- NotifyObjectCreationStageRequestProto.Stage.complete);
+ ObjectStageChangeRequestProto.Op.create,
+ ObjectStageChangeRequestProto.Stage.complete);
// TODO : Should we change the state on the client side ??
// That makes sense, but it is not needed for the client to work.
@@ -358,10 +362,22 @@ public class ContainerOperationClient implements ScmClient {
// Actually close the container on Datanode
client = xceiverClientManager.acquireClient(pipeline);
String traceID = UUID.randomUUID().toString();
+
+ String containerId = pipeline.getContainerName();
+
+ storageContainerLocationClient.notifyObjectStageChange(
+ ObjectStageChangeRequestProto.Type.container,
+ containerId,
+ ObjectStageChangeRequestProto.Op.close,
+ ObjectStageChangeRequestProto.Stage.begin);
+
ContainerProtocolCalls.closeContainer(client, traceID);
// Notify SCM to close the container
- String containerId = pipeline.getContainerName();
- storageContainerLocationClient.closeContainer(containerId);
+ storageContainerLocationClient.notifyObjectStageChange(
+ ObjectStageChangeRequestProto.Type.container,
+ containerId,
+ ObjectStageChangeRequestProto.Op.close,
+ ObjectStageChangeRequestProto.Stage.complete);
} finally {
if (client != null) {
xceiverClientManager.releaseClient(client);
http://git-wip-us.apache.org/repos/asf/hadoop/blob/32476cd8/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/protocol/StorageContainerLocationProtocol.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/protocol/StorageContainerLocationProtocol.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/protocol/StorageContainerLocationProtocol.java
index 3a12f68..ad78bd8 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/protocol/StorageContainerLocationProtocol.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/protocol/StorageContainerLocationProtocol.java
@@ -21,7 +21,7 @@ import java.io.IOException;
import java.util.EnumSet;
import java.util.List;
-import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.NotifyObjectCreationStageRequestProto;
+import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ObjectStageChangeRequestProto;
import org.apache.hadoop.scm.ScmInfo;
import org.apache.hadoop.scm.container.common.helpers.ContainerInfo;
import org.apache.hadoop.scm.container.common.helpers.Pipeline;
@@ -94,11 +94,13 @@ public interface StorageContainerLocationProtocol {
* Container will be in Operational state after that.
* @param type object type
* @param name object name
+ * @param op operation type (e.g., create, close, delete)
* @param stage creation stage
*/
- void notifyObjectCreationStage(
- NotifyObjectCreationStageRequestProto.Type type, String name,
- NotifyObjectCreationStageRequestProto.Stage stage) throws IOException;
+ void notifyObjectStageChange(
+ ObjectStageChangeRequestProto.Type type, String name,
+ ObjectStageChangeRequestProto.Op op,
+ ObjectStageChangeRequestProto.Stage stage) throws IOException;
/**
* Creates a replication pipeline of a specified type.
@@ -112,14 +114,6 @@ public interface StorageContainerLocationProtocol {
throws IOException;
/**
- * Clsoe a container.
- *
- * @param containerName the name of the container to close.
- * @throws IOException
- */
- void closeContainer(String containerName) throws IOException;
-
- /**
* Returns information about SCM.
*
* @return {@link ScmInfo}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/32476cd8/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/protocolPB/StorageContainerLocationProtocolClientSideTranslatorPB.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/protocolPB/StorageContainerLocationProtocolClientSideTranslatorPB.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/protocolPB/StorageContainerLocationProtocolClientSideTranslatorPB.java
index a3c4a9f..bf301b8 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/protocolPB/StorageContainerLocationProtocolClientSideTranslatorPB.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/protocolPB/StorageContainerLocationProtocolClientSideTranslatorPB.java
@@ -28,7 +28,6 @@ import org.apache.hadoop.ozone.protocol.proto.OzoneProtos;
import org.apache.hadoop.scm.ScmInfo;
import org.apache.hadoop.scm.container.common.helpers.ContainerInfo;
import org.apache.hadoop.scm.protocol.StorageContainerLocationProtocol;
-import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.CloseContainerRequestProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ContainerRequestProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ContainerResponseProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.GetContainerRequestProto;
@@ -38,7 +37,7 @@ import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolPr
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ListContainerResponseProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.NodeQueryRequestProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.NodeQueryResponseProto;
-import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.NotifyObjectCreationStageRequestProto;
+import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ObjectStageChangeRequestProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.PipelineRequestProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.PipelineResponseProto;
import org.apache.hadoop.scm.container.common.helpers.Pipeline;
@@ -216,23 +215,25 @@ public final class StorageContainerLocationProtocolClientSideTranslatorPB
* Notify from client that creates object on datanodes.
* @param type object type
* @param name object name
+ * @param op operation type (e.g., create, close, delete)
* @param stage object creation stage : begin/complete
*/
@Override
- public void notifyObjectCreationStage(
- NotifyObjectCreationStageRequestProto.Type type,
- String name,
- NotifyObjectCreationStageRequestProto.Stage stage) throws IOException {
+ public void notifyObjectStageChange(
+ ObjectStageChangeRequestProto.Type type, String name,
+ ObjectStageChangeRequestProto.Op op,
+ ObjectStageChangeRequestProto.Stage stage) throws IOException {
Preconditions.checkState(!Strings.isNullOrEmpty(name),
"Object name cannot be null or empty");
- NotifyObjectCreationStageRequestProto request =
- NotifyObjectCreationStageRequestProto.newBuilder()
+ ObjectStageChangeRequestProto request =
+ ObjectStageChangeRequestProto.newBuilder()
.setType(type)
.setName(name)
+ .setOp(op)
.setStage(stage)
.build();
try {
- rpcProxy.notifyObjectCreationStage(NULL_RPC_CONTROLLER, request);
+ rpcProxy.notifyObjectStageChange(NULL_RPC_CONTROLLER, request);
} catch(ServiceException e){
throw ProtobufHelper.getRemoteException(e);
}
@@ -275,21 +276,6 @@ public final class StorageContainerLocationProtocolClientSideTranslatorPB
}
@Override
- public void closeContainer(String containerName) throws IOException {
- Preconditions.checkState(!Strings.isNullOrEmpty(containerName),
- "Container name cannot be null or empty");
- CloseContainerRequestProto request = CloseContainerRequestProto
- .newBuilder()
- .setContainerName(containerName)
- .build();
- try {
- rpcProxy.closeContainer(NULL_RPC_CONTROLLER, request);
- } catch (ServiceException e) {
- throw ProtobufHelper.getRemoteException(e);
- }
- }
-
- @Override
public ScmInfo getScmInfo() throws IOException {
OzoneProtos.GetScmInfoRequestProto request =
OzoneProtos.GetScmInfoRequestProto.getDefaultInstance();
http://git-wip-us.apache.org/repos/asf/hadoop/blob/32476cd8/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/StorageContainerLocationProtocol.proto
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/StorageContainerLocationProtocol.proto b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/StorageContainerLocationProtocol.proto
index c1e9ea6..512ec75 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/StorageContainerLocationProtocol.proto
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/StorageContainerLocationProtocol.proto
@@ -65,14 +65,6 @@ message GetContainerResponseProto {
required hadoop.hdfs.ozone.Pipeline pipeline = 1;
}
-message CloseContainerRequestProto {
- required string containerName = 1;
-}
-
-message CloseContainerResponseProto {
-
-}
-
message ListContainerRequestProto {
required uint32 count = 1;
optional string startName = 2;
@@ -91,21 +83,27 @@ message DeleteContainerResponseProto {
// Empty response
}
-message NotifyObjectCreationStageRequestProto {
+message ObjectStageChangeRequestProto {
enum Type {
container = 1;
pipeline = 2;
}
+ // delete/copy operation may be added later
+ enum Op {
+ create = 1;
+ close = 2;
+ }
enum Stage {
begin = 1;
complete = 2;
}
required string name = 1;
required Type type = 2;
- required Stage stage = 3;
+ required Op op= 3;
+ required Stage stage = 4;
}
-message NotifyObjectCreationStageResponseProto {
+message ObjectStageChangeResponseProto {
// Empty response
}
@@ -188,14 +186,10 @@ service StorageContainerLocationProtocolService {
rpc queryNode(NodeQueryRequestProto) returns (NodeQueryResponseProto);
/**
- * Notify from client when begin or finish creating container or pipeline on datanodes.
+ * Notify from client when begin or finish container or pipeline operations on datanodes.
*/
- rpc notifyObjectCreationStage(NotifyObjectCreationStageRequestProto) returns (NotifyObjectCreationStageResponseProto);
+ rpc notifyObjectStageChange(ObjectStageChangeRequestProto) returns (ObjectStageChangeResponseProto);
- /**
- * Close a container.
- */
- rpc closeContainer(CloseContainerRequestProto) returns (CloseContainerResponseProto);
/*
* Apis that Manage Pipelines.
*
http://git-wip-us.apache.org/repos/asf/hadoop/blob/32476cd8/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/protocolPB/StorageContainerLocationProtocolServerSideTranslatorPB.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/protocolPB/StorageContainerLocationProtocolServerSideTranslatorPB.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/protocolPB/StorageContainerLocationProtocolServerSideTranslatorPB.java
index ae99a37..c8258b9 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/protocolPB/StorageContainerLocationProtocolServerSideTranslatorPB.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/protocolPB/StorageContainerLocationProtocolServerSideTranslatorPB.java
@@ -33,8 +33,6 @@ import org.apache.hadoop.scm.ScmInfo;
import org.apache.hadoop.scm.container.common.helpers.ContainerInfo;
import org.apache.hadoop.scm.protocol.StorageContainerLocationProtocol;
-import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.CloseContainerRequestProto;
-import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.CloseContainerResponseProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ContainerRequestProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ContainerResponseProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.GetContainerRequestProto;
@@ -43,8 +41,8 @@ import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolPr
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.DeleteContainerResponseProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ListContainerResponseProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ListContainerRequestProto;
-import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.NotifyObjectCreationStageRequestProto;
-import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.NotifyObjectCreationStageResponseProto;
+import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ObjectStageChangeRequestProto;
+import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ObjectStageChangeResponseProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.PipelineResponseProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.PipelineRequestProto;
import org.apache.hadoop.scm.container.common.helpers.Pipeline;
@@ -166,31 +164,19 @@ public final class StorageContainerLocationProtocolServerSideTranslatorPB
}
@Override
- public NotifyObjectCreationStageResponseProto notifyObjectCreationStage(
- RpcController controller, NotifyObjectCreationStageRequestProto request)
+ public ObjectStageChangeResponseProto notifyObjectStageChange(
+ RpcController controller, ObjectStageChangeRequestProto request)
throws ServiceException {
try {
- impl.notifyObjectCreationStage(request.getType(), request.getName(),
- request.getStage());
- return NotifyObjectCreationStageResponseProto.newBuilder().build();
+ impl.notifyObjectStageChange(request.getType(), request.getName(),
+ request.getOp(), request.getStage());
+ return ObjectStageChangeResponseProto.newBuilder().build();
} catch (IOException e) {
throw new ServiceException(e);
}
}
@Override
- public CloseContainerResponseProto closeContainer(
- RpcController controller, CloseContainerRequestProto request)
- throws ServiceException {
- try {
- impl.closeContainer(request.getContainerName());
- return CloseContainerResponseProto.newBuilder().build();
- } catch (IOException ioe) {
- throw new ServiceException(ioe);
- }
- }
-
- @Override
public PipelineResponseProto allocatePipeline(
RpcController controller, PipelineRequestProto request)
throws ServiceException {
http://git-wip-us.apache.org/repos/asf/hadoop/blob/32476cd8/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/StorageContainerManager.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/StorageContainerManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/StorageContainerManager.java
index ca1fa48..3276db8 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/StorageContainerManager.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/StorageContainerManager.java
@@ -68,7 +68,7 @@ import org.apache.hadoop.ozone.protocol.proto.StorageContainerDatanodeProtocolPr
import org.apache.hadoop.ozone.protocol.proto.StorageContainerDatanodeProtocolProtos.ContainerBlocksDeletionACKProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerDatanodeProtocolProtos.ContainerBlocksDeletionACKResponseProto;
import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos;
-import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.NotifyObjectCreationStageRequestProto;
+import org.apache.hadoop.ozone.protocol.proto.StorageContainerLocationProtocolProtos.ObjectStageChangeRequestProto;
import org.apache.hadoop.ozone.protocolPB.ScmBlockLocationProtocolServerSideTranslatorPB;
import org.apache.hadoop.ozone.protocolPB.StorageContainerDatanodeProtocolPB;
import org.apache.hadoop.ozone.protocolPB.StorageContainerDatanodeProtocolServerSideTranslatorPB;
@@ -671,31 +671,42 @@ public class StorageContainerManager extends ServiceRuntimeInfoImpl
}
/**
- * Notify from client when begin/finish creating container/pipeline objects
- * on datanodes.
+ * Notify from client when begin/finish operation for container/pipeline
+ * objects on datanodes.
* @param type
* @param name
+ * @param op
* @param stage
*/
@Override
- public void notifyObjectCreationStage(
- NotifyObjectCreationStageRequestProto.Type type, String name,
- NotifyObjectCreationStageRequestProto.Stage stage) throws IOException {
-
- if (type == NotifyObjectCreationStageRequestProto.Type.container) {
- ContainerInfo info = scmContainerManager.getContainer(name);
- LOG.info("Container {} current state {} new stage {}", name,
- info.getState(), stage);
- if (stage == NotifyObjectCreationStageRequestProto.Stage.begin) {
- scmContainerManager.updateContainerState(name,
- OzoneProtos.LifeCycleEvent.CREATE);
- } else {
- scmContainerManager.updateContainerState(name,
- OzoneProtos.LifeCycleEvent.CREATED);
+ public void notifyObjectStageChange(
+ ObjectStageChangeRequestProto.Type type, String name,
+ ObjectStageChangeRequestProto.Op op,
+ ObjectStageChangeRequestProto.Stage stage) throws IOException {
+
+ LOG.info("Object type {} name {} op {} new stage {}",
+ type, name, op, stage);
+ if (type == ObjectStageChangeRequestProto.Type.container) {
+ if (op == ObjectStageChangeRequestProto.Op.create) {
+ if (stage == ObjectStageChangeRequestProto.Stage.begin) {
+ scmContainerManager.updateContainerState(name,
+ OzoneProtos.LifeCycleEvent.CREATE);
+ } else {
+ scmContainerManager.updateContainerState(name,
+ OzoneProtos.LifeCycleEvent.CREATED);
+ }
+ } else if (op == ObjectStageChangeRequestProto.Op.close) {
+ if (stage == ObjectStageChangeRequestProto.Stage.begin) {
+ scmContainerManager.updateContainerState(name,
+ OzoneProtos.LifeCycleEvent.FINALIZE);
+ } else {
+ scmContainerManager.updateContainerState(name,
+ OzoneProtos.LifeCycleEvent.CLOSE);
+ }
}
- } else if (type == NotifyObjectCreationStageRequestProto.Type.pipeline) {
- // TODO: pipeline state update will be addressed in future patch.
- }
+ } //else if (type == ObjectStageChangeRequestProto.Type.pipeline) {
+ // TODO: pipeline state update will be addressed in future patch.
+ //}
}
/**
@@ -711,12 +722,6 @@ public class StorageContainerManager extends ServiceRuntimeInfoImpl
return null;
}
- @Override
- public void closeContainer(String containerName) throws IOException {
- checkAdminAccess();
- scmContainerManager.closeContainer(containerName);
- }
-
/**
* Queries a list of Node that match a set of statuses.
* <p>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/32476cd8/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/container/ContainerMapping.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/container/ContainerMapping.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/container/ContainerMapping.java
index 79974d9..c8875ba 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/container/ContainerMapping.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/container/ContainerMapping.java
@@ -255,25 +255,6 @@ public class ContainerMapping implements Mapping {
}
}
- @Override
- public void closeContainer(String containerName) throws IOException {
- lock.lock();
- try {
- OzoneProtos.LifeCycleState newState =
- updateContainerState(containerName, OzoneProtos.LifeCycleEvent.CLOSE);
- if (newState != OzoneProtos.LifeCycleState.CLOSED) {
- throw new SCMException(
- "Failed to close container "
- + containerName
- + ", reason : container in state "
- + newState,
- SCMException.ResultCodes.UNEXPECTED_CONTAINER_STATE);
- }
- } finally {
- lock.unlock();
- }
- }
-
/** {@inheritDoc} Used by client to update container state on SCM. */
@Override
public OzoneProtos.LifeCycleState updateContainerState(
@@ -313,6 +294,10 @@ public class ContainerMapping implements Mapping {
containerLeaseManager.release(containerInfo);
break;
case FINALIZE:
+ // TODO: we don't need a lease manager here for closing as the
+ // container report will include the container state after HDFS-13008
+ // If a client failed to update the container close state, DN container
+ // report from 3 DNs will be used to close the container eventually.
break;
case CLOSE:
break;
http://git-wip-us.apache.org/repos/asf/hadoop/blob/32476cd8/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/container/Mapping.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/container/Mapping.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/container/Mapping.java
index 5d2518e..577571f 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/container/Mapping.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/container/Mapping.java
@@ -84,14 +84,6 @@ public interface Mapping extends Closeable {
void deleteContainer(String containerName) throws IOException;
/**
- * Close a container.
- *
- * @param containerName - name of the container to close.
- * @throws IOException
- */
- void closeContainer(String containerName) throws IOException;
-
- /**
* Update container state.
* @param containerName - Container Name
* @param event - container life cycle event
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org