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