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