Browse Source

HDDS-1108. Check s3bucket exists or not before MPU operations.
Contributed by Bharat Viswanadham.

Anu Engineer 6 years ago
parent
commit
2d83b24994

+ 22 - 0
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java

@@ -171,6 +171,24 @@ public class KeyManagerImpl implements KeyManager {
     }
   }
 
+  /**
+   * Check S3 bucket exists or not.
+   * @param volumeName
+   * @param bucketName
+   * @throws IOException
+   */
+  private void validateS3Bucket(String volumeName, String bucketName)
+      throws IOException {
+
+    String bucketKey = metadataManager.getBucketKey(volumeName, bucketName);
+    //Check if bucket already exists
+    if (metadataManager.getBucketTable().get(bucketKey) == null) {
+      LOG.error("bucket not found: {}/{} ", volumeName, bucketName);
+      throw new OMException("Bucket not found",
+          OMException.ResultCodes.FAILED_BUCKET_NOT_FOUND);
+    }
+  }
+
   @Override
   public OmKeyLocationInfo allocateBlock(OmKeyArgs args, long clientID)
       throws IOException {
@@ -663,6 +681,7 @@ public class KeyManagerImpl implements KeyManager {
     String keyName = omKeyArgs.getKeyName();
 
     metadataManager.getLock().acquireBucketLock(volumeName, bucketName);
+    validateS3Bucket(volumeName, bucketName);
     try {
       long time = Time.monotonicNowNanos();
       String uploadID = UUID.randomUUID().toString() + "-" + Long.toString(
@@ -735,6 +754,7 @@ public class KeyManagerImpl implements KeyManager {
     int partNumber = omKeyArgs.getMultipartUploadPartNumber();
 
     metadataManager.getLock().acquireBucketLock(volumeName, bucketName);
+    validateS3Bucket(volumeName, bucketName);
     String partName;
     try {
       String multipartKey = metadataManager.getMultipartKey(volumeName,
@@ -822,6 +842,7 @@ public class KeyManagerImpl implements KeyManager {
     String keyName = omKeyArgs.getKeyName();
     String uploadID = omKeyArgs.getMultipartUploadID();
     metadataManager.getLock().acquireBucketLock(volumeName, bucketName);
+    validateS3Bucket(volumeName, bucketName);
     try {
       String multipartKey = metadataManager.getMultipartKey(volumeName,
           bucketName, keyName, uploadID);
@@ -973,6 +994,7 @@ public class KeyManagerImpl implements KeyManager {
     String keyName = omKeyArgs.getKeyName();
     String uploadID = omKeyArgs.getMultipartUploadID();
     Preconditions.checkNotNull(uploadID, "uploadID cannot be null");
+    validateS3Bucket(volumeName, bucketName);
     metadataManager.getLock().acquireBucketLock(volumeName, bucketName);
 
     try {