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