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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
