You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by fe...@apache.org on 2022/07/05 06:17:49 UTC
[ozone] branch master updated: HDDS-6938. handle NPE when removing prefixAcl (#3568)
This is an automated email from the ASF dual-hosted git repository.
ferhui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 243efe25d3 HDDS-6938. handle NPE when removing prefixAcl (#3568)
243efe25d3 is described below
commit 243efe25d367af99fd0579582a265dad2d7a701b
Author: Mohanad Elsafty <mo...@gmail.com>
AuthorDate: Tue Jul 5 14:17:43 2022 +0800
HDDS-6938. handle NPE when removing prefixAcl (#3568)
---
.../request/key/acl/prefix/OMPrefixAclRequest.java | 6 ++
.../om/request/key/TestOMPrefixAclRequest.java | 66 ++++++++++++++++++++++
2 files changed, 72 insertions(+)
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/prefix/OMPrefixAclRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/prefix/OMPrefixAclRequest.java
index d4372ce0c2..63849cb229 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/prefix/OMPrefixAclRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/prefix/OMPrefixAclRequest.java
@@ -28,6 +28,7 @@ import org.apache.hadoop.ozone.om.OMMetrics;
import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.om.PrefixManagerImpl;
import org.apache.hadoop.ozone.om.PrefixManagerImpl.OMPrefixAclOpResult;
+import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmPrefixInfo;
import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.apache.hadoop.ozone.om.request.OMClientRequest;
@@ -105,6 +106,11 @@ public abstract class OMPrefixAclRequest extends OMClientRequest {
}
omPrefixInfo = operationResult.getOmPrefixInfo();
+ if (omPrefixInfo == null) {
+ throw new OMException(
+ "No prefix info for the prefix path: " + prefixPath,
+ OMException.ResultCodes.PREFIX_NOT_FOUND);
+ }
omPrefixInfo.setUpdateID(trxnLogIndex, ozoneManager.isRatisEnabled());
// As for remove acl list, for a prefix if after removing acl from
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMPrefixAclRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMPrefixAclRequest.java
index 08063f3a71..3bc43fcfca 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMPrefixAclRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMPrefixAclRequest.java
@@ -23,6 +23,7 @@ import org.apache.hadoop.ozone.om.PrefixManager;
import org.apache.hadoop.ozone.om.PrefixManagerImpl;
import org.apache.hadoop.ozone.om.request.OMRequestTestUtils;
import org.apache.hadoop.ozone.om.request.key.acl.prefix.OMPrefixAddAclRequest;
+import org.apache.hadoop.ozone.om.request.key.acl.prefix.OMPrefixRemoveAclRequest;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.AddAclRequest;
@@ -68,6 +69,51 @@ public class TestOMPrefixAclRequest extends TestOMKeyRequest {
omClientResponse.getOMResponse().getStatus());
}
+ @Test
+ public void testRemoveAclRequest() throws Exception {
+ PrefixManager prefixManager = new PrefixManagerImpl(
+ ozoneManager.getMetadataManager(), true);
+ when(ozoneManager.getPrefixManager()).thenReturn(prefixManager);
+
+ // Manually add volume, bucket and key to DB
+ OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
+ omMetadataManager);
+ OMRequestTestUtils.addKeyToTable(false, false, volumeName, bucketName,
+ keyName, clientID, replicationType, replicationFactor, 1L,
+ omMetadataManager);
+
+ OzoneAcl acl = OzoneAcl.parseAcl("user:mohanad.elsafty:rwdlncxy[ACCESS]");
+
+ // Create KeyAddAcl request
+ OMRequest originalRequest = createAddAclkeyRequest(acl);
+ OMPrefixAddAclRequest omKeyPrefixAclRequest = new OMPrefixAddAclRequest(
+ originalRequest);
+ omKeyPrefixAclRequest.preExecute(ozoneManager);
+ omKeyPrefixAclRequest.validateAndUpdateCache(ozoneManager, 2,
+ ozoneManagerDoubleBufferHelper);
+
+ // Remove existing prefix acl.
+ OMRequest validRemoveAclRequest = createRemoveAclKeyRequest(acl, keyName);
+ OMPrefixRemoveAclRequest omPrefixRemoveAclRequest1 =
+ new OMPrefixRemoveAclRequest(validRemoveAclRequest);
+ omPrefixRemoveAclRequest1.preExecute(ozoneManager);
+ OMClientResponse omClientResponse1 = omPrefixRemoveAclRequest1
+ .validateAndUpdateCache(ozoneManager, 3,
+ ozoneManagerDoubleBufferHelper);
+ Assert.assertEquals(OzoneManagerProtocolProtos.Status.OK,
+ omClientResponse1.getOMResponse().getStatus());
+
+ // Remove non-existing prefix acl.
+ OMRequest invalidRemoveAclRequest = createRemoveAclKeyRequest(acl, keyName);
+ OMPrefixRemoveAclRequest omPrefixRemoveAclRequest2 =
+ new OMPrefixRemoveAclRequest(invalidRemoveAclRequest);
+ omPrefixRemoveAclRequest1.preExecute(ozoneManager);
+ OMClientResponse omClientResponse2 = omPrefixRemoveAclRequest2
+ .validateAndUpdateCache(ozoneManager, 4,
+ ozoneManagerDoubleBufferHelper);
+ Assert.assertEquals(OzoneManagerProtocolProtos.Status.PREFIX_NOT_FOUND,
+ omClientResponse2.getOMResponse().getStatus());
+ }
/**
* Create OMRequest which encapsulates OMKeyAddAclRequest.
@@ -91,4 +137,24 @@ public class TestOMPrefixAclRequest extends TestOMKeyRequest {
.build();
}
+ private OMRequest createRemoveAclKeyRequest(OzoneAcl acl, String key) {
+ OzoneObj obj = OzoneObjInfo.Builder.newBuilder()
+ .setBucketName(bucketName)
+ .setVolumeName(volumeName)
+ .setKeyName(key)
+ .setResType(OzoneObj.ResourceType.PREFIX)
+ .setStoreType(OzoneObj.StoreType.OZONE)
+ .build();
+
+ OzoneManagerProtocolProtos.RemoveAclRequest removeAclRequest =
+ OzoneManagerProtocolProtos.RemoveAclRequest.newBuilder()
+ .setObj(OzoneObj.toProtobuf(obj))
+ .setAcl(OzoneAcl.toProtobuf(acl))
+ .build();
+
+ return OMRequest.newBuilder().setClientId(UUID.randomUUID().toString())
+ .setCmdType(OzoneManagerProtocolProtos.Type.RemoveAcl)
+ .setRemoveAclRequest(removeAclRequest)
+ .build();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org