You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by xy...@apache.org on 2019/08/05 17:37:17 UTC

[hadoop] 02/02: HDDS-1893. Fix bug in removeAcl in Bucket. (#1216)

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

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

commit cffa42b28501ae2d28461536c57f73a3888af4a6
Author: Bharat Viswanadham <bh...@apache.org>
AuthorDate: Mon Aug 5 10:25:18 2019 -0700

    HDDS-1893. Fix bug in removeAcl in Bucket. (#1216)
    
    
    (cherry picked from commit c589983e9cebe72f6db4f0141b9bb1b77c052838)
---
 .../client/rpc/TestOzoneRpcClientAbstract.java     | 32 ++++++++++++++++++++++
 .../apache/hadoop/ozone/om/BucketManagerImpl.java  | 14 +++++-----
 2 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
index 8f4bb29..8cede59 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
@@ -543,6 +543,38 @@ public abstract class TestOzoneRpcClientAbstract {
   }
 
   @Test
+  public void testRemoveBucketAclUsingRpcClientRemoveAcl()
+      throws IOException {
+    String volumeName = UUID.randomUUID().toString();
+    String bucketName = UUID.randomUUID().toString();
+    OzoneAcl userAcl = new OzoneAcl(USER, "test",
+        ACLType.ALL, ACCESS);
+    List<OzoneAcl> acls = new ArrayList<>();
+    acls.add(userAcl);
+    acls.add(new OzoneAcl(USER, "test1",
+        ACLType.ALL, ACCESS));
+    store.createVolume(volumeName);
+    OzoneVolume volume = store.getVolume(volumeName);
+    BucketArgs.Builder builder = BucketArgs.newBuilder();
+    builder.setAcls(acls);
+    volume.createBucket(bucketName, builder.build());
+    OzoneObj ozoneObj = OzoneObjInfo.Builder.newBuilder()
+        .setBucketName(bucketName)
+        .setVolumeName(volumeName)
+        .setStoreType(OzoneObj.StoreType.OZONE)
+        .setResType(OzoneObj.ResourceType.BUCKET).build();
+
+    // Remove the 2nd acl added to the list.
+    boolean remove = store.removeAcl(ozoneObj, acls.get(1));
+    Assert.assertTrue(remove);
+    Assert.assertFalse(store.getAcl(ozoneObj).contains(acls.get(1)));
+
+    remove = store.removeAcl(ozoneObj, acls.get(0));
+    Assert.assertTrue(remove);
+    Assert.assertFalse(store.getAcl(ozoneObj).contains(acls.get(0)));
+  }
+
+  @Test
   public void testSetBucketVersioning()
       throws IOException, OzoneException {
     String volumeName = UUID.randomUUID().toString();
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/BucketManagerImpl.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/BucketManagerImpl.java
index a20fd6a..530280b 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/BucketManagerImpl.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/BucketManagerImpl.java
@@ -505,6 +505,7 @@ public class BucketManagerImpl implements BucketManager {
             BUCKET_NOT_FOUND);
       }
 
+      boolean removed = false;
       // When we are removing subset of rights from existing acl.
       for(OzoneAcl a: bucketInfo.getAcls()) {
         if(a.getName().equals(acl.getName()) &&
@@ -515,20 +516,21 @@ public class BucketManagerImpl implements BucketManager {
           if (bits.equals(ZERO_BITSET)) {
             return false;
           }
-          bits = (BitSet) acl.getAclBitSet().clone();
-          bits.and(a.getAclBitSet());
+
           a.getAclBitSet().xor(bits);
 
           if(a.getAclBitSet().equals(ZERO_BITSET)) {
             bucketInfo.getAcls().remove(a);
           }
+          removed = true;
           break;
-        } else {
-          return false;
         }
       }
 
-      metadataManager.getBucketTable().put(dbBucketKey, bucketInfo);
+      if (removed) {
+        metadataManager.getBucketTable().put(dbBucketKey, bucketInfo);
+      }
+      return removed;
     } catch (IOException ex) {
       if (!(ex instanceof OMException)) {
         LOG.error("Remove acl operation failed for bucket:{}/{} acl:{}",
@@ -538,8 +540,6 @@ public class BucketManagerImpl implements BucketManager {
     } finally {
       metadataManager.getLock().releaseLock(BUCKET_LOCK, volume, bucket);
     }
-
-    return true;
   }
 
   /**


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