diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOmMetrics.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOmMetrics.java index d5cc6eb57c45..7fe38ac048ad 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOmMetrics.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOmMetrics.java @@ -17,6 +17,7 @@ package org.apache.hadoop.ozone.om; import static org.apache.hadoop.ozone.OzoneAcl.AclScope.ACCESS; +import static org.apache.hadoop.ozone.security.acl.OzoneObj.ResourceType.BUCKET; import static org.apache.hadoop.ozone.security.acl.OzoneObj.ResourceType.VOLUME; import static org.apache.hadoop.ozone.security.acl.OzoneObj.StoreType.OZONE; import static org.apache.hadoop.test.MetricsAsserts.assertCounter; @@ -37,6 +38,7 @@ import org.apache.hadoop.ozone.MiniOzoneCluster; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.OzoneAcl; +import org.apache.hadoop.ozone.client.ObjectStore; import org.apache.hadoop.ozone.om.helpers.OmBucketInfo; import org.apache.hadoop.ozone.om.helpers.OmKeyArgs; import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo; @@ -44,6 +46,7 @@ import org.apache.hadoop.ozone.security.acl.OzoneObj; import org.apache.hadoop.ozone.security.acl.OzoneObjInfo; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -362,6 +365,64 @@ public void testAclOperations() throws IOException { } } + @Test + public void testAclOperationsHA() throws Exception { + ObjectStore objectStore = cluster.getClient().getObjectStore(); + // Create a volume. + objectStore.createVolume("volumeacl"); + // Create a bucket. + objectStore.getVolume("volumeacl").createBucket("bucketacl"); + // Create a key. + objectStore.getVolume("volumeacl").getBucket("bucketacl") + .createKey("keyacl", 0).close(); + + OzoneObj volObj = + new OzoneObjInfo.Builder().setVolumeName("volumeacl").setResType(VOLUME) + .setStoreType(OZONE).build(); + + OzoneObj buckObj = new OzoneObjInfo.Builder().setVolumeName("volumeacl") + .setBucketName("bucketacl").setResType(BUCKET).setStoreType(OZONE) + .build(); + + OzoneObj keyObj = new OzoneObjInfo.Builder().setVolumeName("volumeacl") + .setBucketName("bucketacl").setResType(BUCKET).setKeyName("keyacl") + .setStoreType(OZONE).build(); + + List acls = ozoneManager.getAcl(volObj); + + // Test Acl's for volume. + testAclMetricsInternal(objectStore, volObj, acls); + + // Test Acl's for bucket. + testAclMetricsInternal(objectStore, buckObj, acls); + + // Test Acl's for key. + testAclMetricsInternal(objectStore, keyObj, acls); + } + + private void testAclMetricsInternal(ObjectStore objectStore, OzoneObj volObj, + List acls) throws IOException { + // Test addAcl + OMMetrics metrics = ozoneManager.getMetrics(); + long initialValue = metrics.getNumAddAcl(); + objectStore.addAcl(volObj, + new OzoneAcl(IAccessAuthorizer.ACLIdentityType.USER, "ozoneuser", + IAccessAuthorizer.ACLType.ALL, ACCESS)); + + Assert.assertEquals(initialValue + 1, metrics.getNumAddAcl()); + + // Test setAcl + initialValue = metrics.getNumSetAcl(); + + objectStore.setAcl(volObj, acls); + Assert.assertEquals(initialValue + 1, metrics.getNumSetAcl()); + + // Test removeAcl + initialValue = metrics.getNumRemoveAcl(); + objectStore.removeAcl(volObj, acls.get(0)); + Assert.assertEquals(initialValue + 1, metrics.getNumRemoveAcl()); + } + /** * Test volume operations with ignoring thrown exception. */ diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketAddAclRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketAddAclRequest.java index 6b3d6142279e..18f7bef9ee7f 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketAddAclRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketAddAclRequest.java @@ -24,6 +24,7 @@ import com.google.common.collect.Lists; import org.apache.hadoop.ozone.om.OMMetrics; import org.apache.hadoop.ozone.om.OzoneManager; +import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper; import org.apache.hadoop.ozone.om.request.util.OmResponseUtil; import org.apache.hadoop.ozone.util.BooleanBiFunction; import org.apache.hadoop.util.Time; @@ -130,5 +131,12 @@ void onComplete(boolean operationResult, IOException exception, } } + @Override + public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, + long trxnLogIndex, OzoneManagerDoubleBufferHelper omDoubleBufferHelper) { + ozoneManager.getMetrics().incNumAddAcl(); + return super.validateAndUpdateCache(ozoneManager, trxnLogIndex, + omDoubleBufferHelper); + } } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketRemoveAclRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketRemoveAclRequest.java index 6552a1875998..cf5ee4281a59 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketRemoveAclRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketRemoveAclRequest.java @@ -22,6 +22,7 @@ import java.util.List; import org.apache.hadoop.ozone.om.OzoneManager; +import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper; import org.apache.hadoop.ozone.om.request.util.OmResponseUtil; import org.apache.hadoop.util.Time; import org.slf4j.Logger; @@ -127,5 +128,13 @@ void onComplete(boolean operationResult, IOException exception, } } } + + @Override + public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, + long trxnLogIndex, OzoneManagerDoubleBufferHelper omDoubleBufferHelper) { + ozoneManager.getMetrics().incNumRemoveAcl(); + return super.validateAndUpdateCache(ozoneManager, trxnLogIndex, + omDoubleBufferHelper); + } } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketSetAclRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketSetAclRequest.java index 09fa7da2cf61..b3d2289d8673 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketSetAclRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/acl/OMBucketSetAclRequest.java @@ -23,6 +23,7 @@ import java.util.List; import org.apache.hadoop.ozone.om.OzoneManager; +import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper; import org.apache.hadoop.ozone.om.request.util.OmResponseUtil; import org.apache.hadoop.util.Time; import org.slf4j.Logger; @@ -128,5 +129,13 @@ void onComplete(boolean operationResult, IOException exception, } } } + + @Override + public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, + long trxnLogIndex, OzoneManagerDoubleBufferHelper omDoubleBufferHelper) { + ozoneManager.getMetrics().incNumSetAcl(); + return super.validateAndUpdateCache(ozoneManager, trxnLogIndex, + omDoubleBufferHelper); + } } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAddAclRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAddAclRequest.java index c475d6e4d44d..499562bd6922 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAddAclRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAddAclRequest.java @@ -25,6 +25,7 @@ import org.apache.hadoop.ozone.OzoneAcl; import org.apache.hadoop.ozone.om.OzoneManager; import org.apache.hadoop.ozone.om.helpers.OmKeyInfo; +import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper; import org.apache.hadoop.ozone.om.request.util.OmResponseUtil; import org.apache.hadoop.ozone.om.response.key.acl.OMKeyAclResponse; import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos; @@ -116,5 +117,13 @@ boolean apply(OmKeyInfo omKeyInfo, long trxnLogIndex) { // No need to check not null here, this will be never called with null. return omKeyInfo.addAcl(ozoneAcls.get(0)); } + + @Override + public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, + long trxnLogIndex, OzoneManagerDoubleBufferHelper omDoubleBufferHelper) { + ozoneManager.getMetrics().incNumAddAcl(); + return super.validateAndUpdateCache(ozoneManager, trxnLogIndex, + omDoubleBufferHelper); + } } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyRemoveAclRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyRemoveAclRequest.java index d9fbc3502180..d95be51b500e 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyRemoveAclRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyRemoveAclRequest.java @@ -25,6 +25,7 @@ import org.apache.hadoop.ozone.OzoneAcl; import org.apache.hadoop.ozone.om.OzoneManager; import org.apache.hadoop.ozone.om.helpers.OmKeyInfo; +import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper; import org.apache.hadoop.ozone.om.request.util.OmResponseUtil; import org.apache.hadoop.ozone.om.response.key.acl.OMKeyAclResponse; import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos; @@ -117,5 +118,13 @@ boolean apply(OmKeyInfo omKeyInfo, long trxnLogIndex) { // No need to check not null here, this will be never called with null. return omKeyInfo.removeAcl(ozoneAcls.get(0)); } + + @Override + public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, + long trxnLogIndex, OzoneManagerDoubleBufferHelper omDoubleBufferHelper) { + ozoneManager.getMetrics().incNumRemoveAcl(); + return super.validateAndUpdateCache(ozoneManager, trxnLogIndex, + omDoubleBufferHelper); + } } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeySetAclRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeySetAclRequest.java index e07ac09f7143..9ba1a7691a4b 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeySetAclRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeySetAclRequest.java @@ -26,6 +26,7 @@ import org.apache.hadoop.ozone.om.OzoneManager; import org.apache.hadoop.ozone.om.helpers.OmKeyInfo; import org.apache.hadoop.ozone.om.helpers.OzoneAclUtil; +import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper; import org.apache.hadoop.ozone.om.request.util.OmResponseUtil; import org.apache.hadoop.ozone.om.response.key.acl.OMKeyAclResponse; import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos; @@ -113,5 +114,13 @@ boolean apply(OmKeyInfo omKeyInfo, long trxnLogIndex) { // No need to check not null here, this will be never called with null. return omKeyInfo.setAcls(ozoneAcls); } + + @Override + public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, + long trxnLogIndex, OzoneManagerDoubleBufferHelper omDoubleBufferHelper) { + ozoneManager.getMetrics().incNumSetAcl(); + return super.validateAndUpdateCache(ozoneManager, trxnLogIndex, + omDoubleBufferHelper); + } } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeAddAclRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeAddAclRequest.java index 15f0c67d1bc1..a3b9f1928d2e 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeAddAclRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeAddAclRequest.java @@ -23,6 +23,7 @@ import org.apache.hadoop.ozone.OzoneAcl; import org.apache.hadoop.ozone.om.OzoneManager; import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs; +import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper; import org.apache.hadoop.ozone.om.request.util.OmResponseUtil; import org.apache.hadoop.ozone.om.response.OMClientResponse; import org.apache.hadoop.ozone.om.response.volume.OMVolumeAclOpResponse; @@ -128,4 +129,12 @@ void onComplete(Result result, IOException ex, long trxnLogIndex) { getOmRequest()); } } + + @Override + public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, + long trxnLogIndex, OzoneManagerDoubleBufferHelper omDoubleBufferHelper) { + ozoneManager.getMetrics().incNumAddAcl(); + return super.validateAndUpdateCache(ozoneManager, trxnLogIndex, + omDoubleBufferHelper); + } } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeRemoveAclRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeRemoveAclRequest.java index ea03503f31da..b4bb1f85b065 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeRemoveAclRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeRemoveAclRequest.java @@ -23,6 +23,7 @@ import org.apache.hadoop.ozone.OzoneAcl; import org.apache.hadoop.ozone.om.OzoneManager; import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs; +import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper; import org.apache.hadoop.ozone.om.request.util.OmResponseUtil; import org.apache.hadoop.ozone.om.response.OMClientResponse; import org.apache.hadoop.ozone.om.response.volume.OMVolumeAclOpResponse; @@ -127,4 +128,12 @@ void onComplete(Result result, IOException ex, long trxnLogIndex) { getOmRequest()); } } + + @Override + public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, + long trxnLogIndex, OzoneManagerDoubleBufferHelper omDoubleBufferHelper) { + ozoneManager.getMetrics().incNumRemoveAcl(); + return super.validateAndUpdateCache(ozoneManager, trxnLogIndex, + omDoubleBufferHelper); + } } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeSetAclRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeSetAclRequest.java index 787cf7620b93..a1b0ca6446af 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeSetAclRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/acl/OMVolumeSetAclRequest.java @@ -22,6 +22,7 @@ import org.apache.hadoop.ozone.OzoneAcl; import org.apache.hadoop.ozone.om.OzoneManager; import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs; +import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper; import org.apache.hadoop.ozone.om.request.util.OmResponseUtil; import org.apache.hadoop.ozone.om.response.OMClientResponse; import org.apache.hadoop.ozone.om.response.volume.OMVolumeAclOpResponse; @@ -124,4 +125,12 @@ void onComplete(Result result, IOException ex, long trxnLogIndex) { getOmRequest()); } } + + @Override + public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, + long trxnLogIndex, OzoneManagerDoubleBufferHelper omDoubleBufferHelper) { + ozoneManager.getMetrics().incNumSetAcl(); + return super.validateAndUpdateCache(ozoneManager, trxnLogIndex, + omDoubleBufferHelper); + } }