Skip to content

Commit 011be74

Browse files
committed
HBASE-27469 IllegalArgumentException is thrown by SnapshotScannerHDFSAclController when dropping a table
1 parent 186679f commit 011be74

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,7 @@ public void preMasterInitialization(ObserverContext<MasterCoprocessorEnvironment
132132
userProvider = UserProvider.instantiate(c.getEnvironment().getConfiguration());
133133
} else {
134134
LOG.warn("Try to initialize the coprocessor SnapshotScannerHDFSAclController but failure "
135-
+ "because the config " + SnapshotScannerHDFSAclHelper.ACL_SYNC_TO_HDFS_ENABLE
136-
+ " is false.");
135+
+ "because the config {} is false.", SnapshotScannerHDFSAclHelper.ACL_SYNC_TO_HDFS_ENABLE);
137136
}
138137
}
139138

@@ -555,7 +554,7 @@ boolean checkInitialized(String operation) {
555554
if (aclTableInitialized) {
556555
return true;
557556
} else {
558-
LOG.warn("Skip set HDFS acls because acl table is not initialized when " + operation);
557+
LOG.warn("Skip set HDFS acls because acl table is not initialized when {}", operation);
559558
}
560559
}
561560
return false;
@@ -610,7 +609,8 @@ private Set<String> filterUsersToRemoveNsAccessAcl(Table aclTable, TableName tab
610609
PermissionStorage.isGlobalEntry(entry)
611610
|| (PermissionStorage.isNamespaceEntry(entry)
612611
&& Bytes.equals(PermissionStorage.fromNamespaceEntry(entry), namespace))
613-
|| (!Bytes.equals(tableName.getName(), entry)
612+
|| (PermissionStorage.isTableEntry(entry)
613+
&& !Bytes.equals(tableName.getName(), entry)
614614
&& Bytes.equals(TableName.valueOf(entry).getNamespace(), namespace))
615615
) {
616616
remove = false;

hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestSnapshotScannerHDFSAclController.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -654,7 +654,7 @@ public void testDeleteTable() throws Exception {
654654
// delete table
655655
admin.disableTable(table);
656656
admin.deleteTable(table);
657-
// grantUser2 and grantUser3 should have data/ns acl
657+
// grantUser2 should have data/ns acl
658658
TestHDFSAclHelper.canUserScanSnapshot(TEST_UTIL, grantUser1, snapshot1, -1);
659659
TestHDFSAclHelper.canUserScanSnapshot(TEST_UTIL, grantUser2, snapshot1, 6);
660660
assertTrue(hasUserNamespaceHdfsAcl(aclTable, grantUserName2, namespace));
@@ -673,6 +673,26 @@ public void testDeleteTable() throws Exception {
673673
deleteTable(table);
674674
}
675675

676+
@Test
677+
public void testDeleteTable2() throws Exception {
678+
String namespace1 = name.getMethodName() + "1";
679+
String namespace2 = name.getMethodName() + "2";
680+
String grantUser = name.getMethodName();
681+
TableName table = TableName.valueOf(namespace1, name.getMethodName());
682+
683+
TestHDFSAclHelper.createTableAndPut(TEST_UTIL, table);
684+
// grant user table permission
685+
TestHDFSAclHelper.grantOnTable(TEST_UTIL, grantUser, table, READ);
686+
// grant user other namespace permission
687+
SecureTestUtil.grantOnNamespace(TEST_UTIL, grantUser, namespace2, READ);
688+
// delete table
689+
admin.disableTable(table);
690+
admin.deleteTable(table);
691+
// grantUser should have namespace2's acl
692+
assertFalse(hasUserTableHdfsAcl(aclTable, grantUser, table));
693+
assertTrue(hasUserNamespaceHdfsAcl(aclTable, grantUser, namespace2));
694+
}
695+
676696
@Test
677697
public void testDeleteNamespace() throws Exception {
678698
String grantUserName = name.getMethodName();

0 commit comments

Comments
 (0)