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 03:21:37 UTC
[hbase] branch branch-2.5 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.5
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.5 by this push:
new 3880884e8e6 HBASE-27469 IllegalArgumentException is thrown by SnapshotScannerHDFSAclController when dropping a table (#4865)
3880884e8e6 is described below
commit 3880884e8e6a962a318775b21fa9fdd9e181631a
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 d286685e325..8369f840ea5 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();