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