You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by su...@apache.org on 2022/11/15 05:16:57 UTC

[hbase] branch branch-2.4 updated: HBASE-27469 IllegalArgumentException is thrown by SnapshotScannerHDFSAclController when dropping a table (#4865)

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

sunxin pushed a commit to branch branch-2.4
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2.4 by this push:
     new f7b2efc7b7f HBASE-27469 IllegalArgumentException is thrown by SnapshotScannerHDFSAclController when dropping a table (#4865)
f7b2efc7b7f is described below

commit f7b2efc7b7f8eb6a85bff1c5838161d38c89c0a4
Author: Xin Sun <dd...@gmail.com>
AuthorDate: Tue Nov 15 11:10:37 2022 +0800

    HBASE-27469 IllegalArgumentException is thrown by SnapshotScannerHDFSAclController when dropping a table (#4865)
    
    Signed-off-by: Duo Zhang <zh...@apache.org>
---
 .../access/SnapshotScannerHDFSAclController.java   |  4 ++--
 .../TestSnapshotScannerHDFSAclController.java      | 22 +++++++++++++++++++++-
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclController.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclController.java
index f4fcfc41df0..d940bded435 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclController.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclController.java
@@ -556,7 +556,7 @@ public class SnapshotScannerHDFSAclController implements MasterCoprocessor, Mast
       if (aclTableInitialized) {
         return true;
       } else {
-        LOG.warn("Skip set HDFS acls because acl table is not initialized when " + operation);
+        LOG.warn("Skip set HDFS acls because acl table is not initialized when {}", operation);
       }
     }
     return false;
@@ -611,7 +611,7 @@ public class SnapshotScannerHDFSAclController implements MasterCoprocessor, Mast
           PermissionStorage.isGlobalEntry(entry)
             || (PermissionStorage.isNamespaceEntry(entry)
               && Bytes.equals(PermissionStorage.fromNamespaceEntry(entry), namespace))
-            || (!Bytes.equals(tableName.getName(), entry)
+            || (PermissionStorage.isTableEntry(entry) && !Bytes.equals(tableName.getName(), entry)
               && Bytes.equals(TableName.valueOf(entry).getNamespace(), namespace))
         ) {
           remove = false;
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestSnapshotScannerHDFSAclController.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestSnapshotScannerHDFSAclController.java
index ff6c6cd695f..af066f87f22 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestSnapshotScannerHDFSAclController.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestSnapshotScannerHDFSAclController.java
@@ -654,7 +654,7 @@ public class TestSnapshotScannerHDFSAclController {
     // delete table
     admin.disableTable(table);
     admin.deleteTable(table);
-    // grantUser2 and grantUser3 should have data/ns acl
+    // grantUser2 should have data/ns acl
     TestHDFSAclHelper.canUserScanSnapshot(TEST_UTIL, grantUser1, snapshot1, -1);
     TestHDFSAclHelper.canUserScanSnapshot(TEST_UTIL, grantUser2, snapshot1, 6);
     assertTrue(hasUserNamespaceHdfsAcl(aclTable, grantUserName2, namespace));
@@ -673,6 +673,26 @@ public class TestSnapshotScannerHDFSAclController {
     deleteTable(table);
   }
 
+  @Test
+  public void testDeleteTable2() throws Exception {
+    String namespace1 = name.getMethodName() + "1";
+    String namespace2 = name.getMethodName() + "2";
+    String grantUser = name.getMethodName();
+    TableName table = TableName.valueOf(namespace1, name.getMethodName());
+
+    TestHDFSAclHelper.createTableAndPut(TEST_UTIL, table);
+    // grant user table permission
+    TestHDFSAclHelper.grantOnTable(TEST_UTIL, grantUser, table, READ);
+    // grant user other namespace permission
+    SecureTestUtil.grantOnNamespace(TEST_UTIL, grantUser, namespace2, READ);
+    // delete table
+    admin.disableTable(table);
+    admin.deleteTable(table);
+    // grantUser should have namespace2's acl
+    assertFalse(hasUserTableHdfsAcl(aclTable, grantUser, table));
+    assertTrue(hasUserNamespaceHdfsAcl(aclTable, grantUser, namespace2));
+  }
+
   @Test
   public void testDeleteNamespace() throws Exception {
     String grantUserName = name.getMethodName();