You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by bh...@apache.org on 2020/06/26 22:23:58 UTC

[hadoop-ozone] 02/08: fix directory request

This is an automated email from the ASF dual-hosted git repository.

bharat pushed a commit to branch HDDS-3685
in repository https://gitbox.apache.org/repos/asf/hadoop-ozone.git

commit a84fabaaa989989c7ce81dc86a693e2de9f834d1
Author: Bharat Viswanadham <bh...@apache.org>
AuthorDate: Tue Jun 16 17:49:21 2020 -0700

    fix directory request
---
 .../om/request/file/OMDirectoryCreateRequest.java  | 10 ++---
 .../response/file/OMDirectoryCreateResponse.java   | 44 ++++++++++++++--------
 .../file/TestOMDirectoryCreateResponse.java        |  5 ++-
 3 files changed, 37 insertions(+), 22 deletions(-)

diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
index 7ac6b17..ec51333 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
@@ -194,20 +194,20 @@ public class OMDirectoryCreateRequest extends OMKeyRequest {
         OMFileRequest.addKeyTableCacheEntries(omMetadataManager, volumeName,
             bucketName, Optional.of(dirKeyInfo),
             Optional.of(missingParentInfos), trxnLogIndex);
-
-        omClientResponse = new OMDirectoryCreateResponse(omResponse.build(),
-            dirKeyInfo, missingParentInfos);
         result = Result.SUCCESS;
+        omClientResponse = new OMDirectoryCreateResponse(omResponse.build(),
+            dirKeyInfo, missingParentInfos, result);
       } else {
         // omDirectoryResult == DIRECTORY_EXITS
         result = Result.DIRECTORY_ALREADY_EXISTS;
         omResponse.setStatus(Status.DIRECTORY_ALREADY_EXISTS);
-        omClientResponse = new OMDirectoryCreateResponse(omResponse.build());
+        omClientResponse = new OMDirectoryCreateResponse(omResponse.build(),
+            result);
       }
     } catch (IOException ex) {
       exception = ex;
       omClientResponse = new OMDirectoryCreateResponse(
-          createErrorOMResponse(omResponse, exception));
+          createErrorOMResponse(omResponse, exception), result);
     } finally {
       addResponseToDoubleBuffer(trxnLogIndex, omClientResponse,
           omDoubleBufferHelper);
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/file/OMDirectoryCreateResponse.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/file/OMDirectoryCreateResponse.java
index 0b6c9de..c08969b 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/file/OMDirectoryCreateResponse.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/file/OMDirectoryCreateResponse.java
@@ -21,6 +21,9 @@ package org.apache.hadoop.ozone.om.response.file;
 import org.apache.hadoop.ozone.om.OMMetadataManager;
 import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
 import org.apache.hadoop.ozone.om.response.CleanupTableInfo;
+
+import org.apache.hadoop.ozone.om.request.file.OMDirectoryCreateRequest.Result;
+
 import org.apache.hadoop.ozone.om.response.OMClientResponse;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
     .OMResponse;
@@ -29,7 +32,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import java.io.IOException;
 import java.util.List;
 
@@ -46,40 +48,50 @@ public class OMDirectoryCreateResponse extends OMClientResponse {
 
   private OmKeyInfo dirKeyInfo;
   private List<OmKeyInfo> parentKeyInfos;
+  private Result result;
 
   public OMDirectoryCreateResponse(@Nonnull OMResponse omResponse,
       @Nonnull OmKeyInfo dirKeyInfo,
-      @Nonnull List<OmKeyInfo> parentKeyInfos) {
+      @Nonnull List<OmKeyInfo> parentKeyInfos, @Nonnull Result result) {
     super(omResponse);
     this.dirKeyInfo = dirKeyInfo;
     this.parentKeyInfos = parentKeyInfos;
+    this.result = result;
   }
 
   /**
    * For when the request is not successful or the directory already exists.
    */
-  public OMDirectoryCreateResponse(@Nonnull OMResponse omResponse) {
+  public OMDirectoryCreateResponse(@Nonnull OMResponse omResponse,
+      @Nonnull Result result) {
     super(omResponse);
+    this.result = result;
   }
 
   @Override
   protected void addToDBBatch(OMMetadataManager omMetadataManager,
       BatchOperation batchOperation) throws IOException {
 
-    // Add all parent keys to batch.
-    for (OmKeyInfo parentKeyInfo : parentKeyInfos) {
-      String parentKey = omMetadataManager
-          .getOzoneDirKey(parentKeyInfo.getVolumeName(),
-              parentKeyInfo.getBucketName(), parentKeyInfo.getKeyName());
-      LOG.debug("putWithBatch parent : key {} info : {}", parentKey,
-          parentKeyInfo);
-      omMetadataManager.getKeyTable()
-          .putWithBatch(batchOperation, parentKey, parentKeyInfo);
-    }
+    if (Result.SUCCESS == result) {
+      // Add all parent keys to batch.
+      for (OmKeyInfo parentKeyInfo : parentKeyInfos) {
+        String parentKey = omMetadataManager
+            .getOzoneDirKey(parentKeyInfo.getVolumeName(),
+                parentKeyInfo.getBucketName(), parentKeyInfo.getKeyName());
+        LOG.debug("putWithBatch parent : key {} info : {}", parentKey,
+            parentKeyInfo);
+        omMetadataManager.getKeyTable()
+            .putWithBatch(batchOperation, parentKey, parentKeyInfo);
+      }
 
-    String dirKey = omMetadataManager.getOzoneKey(dirKeyInfo.getVolumeName(),
+      String dirKey = omMetadataManager.getOzoneKey(dirKeyInfo.getVolumeName(),
           dirKeyInfo.getBucketName(), dirKeyInfo.getKeyName());
-    omMetadataManager.getKeyTable().putWithBatch(batchOperation, dirKey,
-        dirKeyInfo);
+      omMetadataManager.getKeyTable().putWithBatch(batchOperation, dirKey,
+          dirKeyInfo);
+    } else if (Result.DIRECTORY_ALREADY_EXISTS == result) {
+      // When directory already exists, we don't add it to cache. And it is
+      // not an error, in this case dirKeyInfo will be null.
+      LOG.debug("Directory already exists. addToDBBatch is a no-op");
+    }
   }
 }
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/file/TestOMDirectoryCreateResponse.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/file/TestOMDirectoryCreateResponse.java
index 7fae61c..74952dd 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/file/TestOMDirectoryCreateResponse.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/file/TestOMDirectoryCreateResponse.java
@@ -26,6 +26,8 @@ import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
 import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
 import org.apache.hadoop.ozone.om.helpers.OzoneFSUtils;
 import org.apache.hadoop.ozone.om.request.TestOMRequestUtils;
+import org.apache.hadoop.ozone.om.request.file.OMDirectoryCreateRequest;
+import org.apache.hadoop.ozone.om.request.file.OMDirectoryCreateRequest.Result;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
     .OMResponse;
@@ -76,7 +78,8 @@ public class TestOMDirectoryCreateResponse {
             .build();
 
     OMDirectoryCreateResponse omDirectoryCreateResponse =
-        new OMDirectoryCreateResponse(omResponse, omKeyInfo, new ArrayList<>());
+        new OMDirectoryCreateResponse(omResponse, omKeyInfo,
+            new ArrayList<>(), Result.SUCCESS);
 
     omDirectoryCreateResponse.addToDBBatch(omMetadataManager, batchOperation);
 


---------------------------------------------------------------------
To unsubscribe, e-mail: ozone-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: ozone-commits-help@hadoop.apache.org