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

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

commit 6b6424296bfae5e6186fffb6f93365e74ff17ba8
Author: cxorm <lianp...@gmail.com>
AuthorDate: Mon Oct 7 23:25:40 2019 +0800

    HDDS-1737. Add Volume check in KeyManager and File Operations.
---
 .../om/request/file/OMDirectoryCreateRequest.java   | 11 +++++++----
 .../ozone/om/request/key/OMKeyDeleteRequest.java    | 21 ++++++++++++++++-----
 .../ozone/om/request/key/OMKeyRenameRequest.java    | 18 ++++++++++++++----
 3 files changed, 37 insertions(+), 13 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 4b591db..3cb74f9 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
@@ -63,8 +63,9 @@ import org.apache.hadoop.hdds.utils.db.cache.CacheValue;
 
 
 import static 
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.BUCKET_NOT_FOUND;
+import static 
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.VOLUME_NOT_FOUND;
 import static 
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.FILE_ALREADY_EXISTS;
-import static  
org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.BUCKET_LOCK;
+import static 
org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.BUCKET_LOCK;
 import static 
org.apache.hadoop.ozone.om.request.file.OMFileRequest.OMDirectoryResult.DIRECTORY_EXISTS_IN_GIVENPATH;
 import static 
org.apache.hadoop.ozone.om.request.file.OMFileRequest.OMDirectoryResult.FILE_EXISTS_IN_GIVENPATH;
 import static 
org.apache.hadoop.ozone.om.request.file.OMFileRequest.OMDirectoryResult.NONE;
@@ -139,12 +140,14 @@ public class OMDirectoryCreateRequest extends 
OMKeyRequest {
       acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
           volumeName, bucketName);
 
-      // TODO: Not checking volume exist here, once we have full cache we can
-      //  add volume exist check also.
+      // Check volume exist.
+      if (omMetadataManager.getVolumeTable().isExist(volumeName)) {
+        throw new OMException("Volume not found " + volumeName,
+            VOLUME_NOT_FOUND);
+      }
 
       OmBucketInfo omBucketInfo = omMetadataManager.getBucketTable().get(
               omMetadataManager.getBucketKey(volumeName, bucketName));
-
       if (omBucketInfo == null) {
         throw new OMException("Bucket not found " + bucketName,
             BUCKET_NOT_FOUND);
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
index ee4b9b2..a81bb8d 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
@@ -49,6 +49,10 @@ import org.apache.hadoop.hdds.utils.db.cache.CacheValue;
 
 import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes
     .KEY_NOT_FOUND;
+import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes
+    .BUCKET_NOT_FOUND;
+import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes
+    .VOLUME_NOT_FOUND;
 import static 
org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.BUCKET_LOCK;
 
 /**
@@ -117,12 +121,19 @@ public class OMKeyDeleteRequest extends OMKeyRequest {
       acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
           volumeName, bucketName);
 
-      // Not doing bucket/volume checks here. In this way we can avoid db
-      // checks for them.
-      // TODO: Once we have volume/bucket full cache, we can add
-      // them back, as these checks will be inexpensive at that time.
-      OmKeyInfo omKeyInfo = omMetadataManager.getKeyTable().get(objectKey);
+      // Check volume exist.
+      if (omMetadataManager.getVolumeTable().isExist(volumeName)) {
+        throw new OMException("Volume not found " + volumeName,
+            VOLUME_NOT_FOUND);
+      }
 
+      // Check bucket exist.
+      if (omMetadataManager.getBucketTable().isExist(bucketName)) {
+        throw new OMException("Bucket not found " + bucketName,
+            BUCKET_NOT_FOUND);
+      }
+
+      OmKeyInfo omKeyInfo = omMetadataManager.getKeyTable().get(objectKey);
       if (omKeyInfo == null) {
         throw new OMException("Key not found", KEY_NOT_FOUND);
       }
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
index 526473c..744b00b 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
@@ -50,6 +50,9 @@ import org.apache.hadoop.hdds.utils.db.cache.CacheKey;
 import org.apache.hadoop.hdds.utils.db.cache.CacheValue;
 
 import static 
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.KEY_NOT_FOUND;
+import static 
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.BUCKET_NOT_FOUND;
+import static 
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.VOLUME_NOT_FOUND;
+
 import static 
org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.BUCKET_LOCK;
 
 /**
@@ -123,10 +126,17 @@ public class OMKeyRenameRequest extends OMKeyRequest {
       acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
           volumeName, bucketName);
 
-      // Not doing bucket/volume checks here. In this way we can avoid db
-      // checks for them.
-      // TODO: Once we have volume/bucket full cache, we can add
-      // them back, as these checks will be inexpensive at that time.
+      // Check volume exist.
+      if (omMetadataManager.getVolumeTable().isExist(volumeName)) {
+        throw new OMException("Volume not found " + volumeName,
+            VOLUME_NOT_FOUND);
+      }
+
+      // Check bucket exist.
+      if (omMetadataManager.getBucketTable().isExist(bucketName)) {
+        throw new OMException("Bucket not found " + bucketName,
+            BUCKET_NOT_FOUND);
+      }
 
       // fromKeyName should exist
       String fromKey = omMetadataManager.getOzoneKey(


---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-commits-h...@hadoop.apache.org

Reply via email to