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 <ddu...@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 <zhang...@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();