You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2019/06/04 21:00:54 UTC

[hbase] branch branch-1.3 updated: HBASE-22533 TestAccessController3 is flaky (branch-1)

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

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


The following commit(s) were added to refs/heads/branch-1.3 by this push:
     new a719a44  HBASE-22533 TestAccessController3 is flaky (branch-1)
a719a44 is described below

commit a719a44f9832c3133d9ee595044268761bed62c6
Author: Andrew Purtell <ap...@apache.org>
AuthorDate: Mon Jun 3 18:25:20 2019 -0700

    HBASE-22533 TestAccessController3 is flaky (branch-1)
    
    Wait for created tables to be online before proceeding in access control tests.
    
    Fix a possible NPE in teardown if secure tests did not properly set up.
---
 .../hadoop/hbase/security/access/SecureTestUtil.java  | 19 ++++++++++++++-----
 .../security/access/TestAccessControlFilter.java      |  1 +
 .../hbase/security/access/TestAccessController.java   | 11 ++++++++++-
 .../hbase/security/access/TestAccessController2.java  |  3 ++-
 .../hbase/security/access/TestAccessController3.java  |  1 +
 .../access/TestCellACLWithMultipleVersions.java       |  9 ++-------
 .../security/access/TestSecureBulkLoadEndpoint.java   |  1 +
 .../hbase/security/access/TestTablePermissions.java   |  2 ++
 8 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/SecureTestUtil.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/SecureTestUtil.java
index cbfae0e..337da4f 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/SecureTestUtil.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/SecureTestUtil.java
@@ -54,6 +54,7 @@ import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;
 import org.apache.hadoop.hbase.coprocessor.ObserverContext;
 import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;
 import org.apache.hadoop.hbase.io.hfile.HFile;
+import org.apache.hadoop.hbase.master.HMaster;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos;
 import org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService;
@@ -710,17 +711,25 @@ public class SecureTestUtil {
       throws Exception {
     // NOTE: We need a latch because admin is not sync,
     // so the postOp coprocessor method may be called after the admin operation returned.
-    MasterSyncObserver observer = (MasterSyncObserver)testUtil.getHBaseCluster().getMaster()
-      .getMasterCoprocessorHost().findCoprocessor(MasterSyncObserver.class.getName());
-    observer.tableDeletionLatch = new CountDownLatch(1);
+    MasterSyncObserver observer = null;
+    HMaster master = testUtil.getHBaseCluster().getMaster();
+    if (master != null) {
+      observer = (MasterSyncObserver)master.getMasterCoprocessorHost()
+          .findCoprocessor(MasterSyncObserver.class.getName());
+      if (observer != null) {
+        observer.tableDeletionLatch = new CountDownLatch(1);
+      }
+    }
     try {
       admin.disableTable(tableName);
     } catch (TableNotEnabledException e) {
       LOG.debug("Table: " + tableName + " already disabled, so just deleting it.");
     }
     admin.deleteTable(tableName);
-    observer.tableDeletionLatch.await();
-    observer.tableDeletionLatch = null;
+    if (observer != null) {
+      observer.tableDeletionLatch.await();
+      observer.tableDeletionLatch = null;
+    }
   }
 
   public static String convertToNamespace(String namespace) {
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessControlFilter.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessControlFilter.java
index f54d42c..0c92918 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessControlFilter.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessControlFilter.java
@@ -95,6 +95,7 @@ public class TestAccessControlFilter extends SecureTestUtil {
   @Test (timeout=180000)
   public void testQualifierAccess() throws Exception {
     final Table table = createTable(TEST_UTIL, TABLE, new byte[][] { FAMILY });
+    TEST_UTIL.waitUntilAllRegionsAssigned(TABLE);
     try {
       doQualifierAccess(table);
     } finally {
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java
index dee669b..3d63c01 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java
@@ -270,6 +270,7 @@ public class TestAccessController extends SecureTestUtil {
     htd.addFamily(hcd);
     htd.setOwner(USER_OWNER);
     createTable(TEST_UTIL, htd, new byte[][] { Bytes.toBytes("s") });
+    TEST_UTIL.waitUntilAllRegionsAssigned(htd.getTableName());
 
     Region region = TEST_UTIL.getHBaseCluster().getRegions(TEST_TABLE).get(0);
     RegionCoprocessorHost rcpHost = region.getCoprocessorHost();
@@ -1283,6 +1284,7 @@ public class TestAccessController extends SecureTestUtil {
     htd.addFamily(new HColumnDescriptor(family1));
     htd.addFamily(new HColumnDescriptor(family2));
     createTable(TEST_UTIL, htd);
+    TEST_UTIL.waitUntilAllRegionsAssigned(htd.getTableName());
     try {
       // create temp users
       User tblUser =
@@ -1536,7 +1538,7 @@ public class TestAccessController extends SecureTestUtil {
     htd.addFamily(new HColumnDescriptor(family1));
     htd.addFamily(new HColumnDescriptor(family2));
     createTable(TEST_UTIL, htd);
-
+    TEST_UTIL.waitUntilAllRegionsAssigned(htd.getTableName());
     try {
       // create temp users
       User user = User.createUserForTesting(TEST_UTIL.getConfiguration(), "user", new String[0]);
@@ -1641,6 +1643,7 @@ public class TestAccessController extends SecureTestUtil {
     htd.addFamily(new HColumnDescriptor(family2));
     htd.setOwner(USER_OWNER);
     createTable(TEST_UTIL, htd);
+    TEST_UTIL.waitUntilAllRegionsAssigned(htd.getTableName());
     try {
       List<UserPermission> perms;
       Table acl = systemUserConnection.getTable(AccessControlLists.ACL_TABLE_NAME);
@@ -2143,6 +2146,7 @@ public class TestAccessController extends SecureTestUtil {
     HTableDescriptor htd = new HTableDescriptor(TEST_TABLE2);
     htd.addFamily(new HColumnDescriptor(TEST_FAMILY));
     createTable(TEST_UTIL, htd);
+    TEST_UTIL.waitUntilAllRegionsAssigned(htd.getTableName());
 
     // Starting a new RegionServer.
     JVMClusterUtil.RegionServerThread newRsThread = hbaseCluster
@@ -2300,6 +2304,7 @@ public class TestAccessController extends SecureTestUtil {
     htd.addFamily(hcd);
     htd.setOwner(USER_OWNER);
     createTable(TEST_UTIL, htd, new byte[][]{Bytes.toBytes("s")});
+    TEST_UTIL.waitUntilAllRegionsAssigned(htd.getTableName());
   }
 
   @Test (timeout=180000)
@@ -2729,6 +2734,7 @@ public class TestAccessController extends SecureTestUtil {
     HTableDescriptor htd = new HTableDescriptor(table1);
     htd.addFamily(new HColumnDescriptor(family));
     createTable(TEST_UTIL, htd);
+    TEST_UTIL.waitUntilAllRegionsAssigned(htd.getTableName());
 
     // creating the ns and table in it
     String ns = "testNamespace";
@@ -2738,6 +2744,7 @@ public class TestAccessController extends SecureTestUtil {
     htd = new HTableDescriptor(table2);
     htd.addFamily(new HColumnDescriptor(family));
     createTable(TEST_UTIL, htd);
+    TEST_UTIL.waitUntilAllRegionsAssigned(htd.getTableName());
 
     // Verify that we can read sys-tables
     String aclTableName = AccessControlLists.ACL_TABLE_NAME.getNameAsString();
@@ -2817,6 +2824,8 @@ public class TestAccessController extends SecureTestUtil {
     TableName tname = TableName.valueOf("revoke");
     try {
       TEST_UTIL.createTable(tname, TEST_FAMILY);
+      TEST_UTIL.waitUntilAllRegionsAssigned(tname);
+
       User testUserPerms = User.createUserForTesting(conf, "revokePerms", new String[0]);
       Permission.Action[] actions = { Action.READ, Action.WRITE };
       AccessControlClient.grant(TEST_UTIL.getConnection(), tname, testUserPerms.getShortName(),
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController2.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController2.java
index ec8bc95..1beef16 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController2.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController2.java
@@ -131,7 +131,7 @@ public class TestAccessController2 extends SecureTestUtil {
     createNamespace(TEST_UTIL, NamespaceDescriptor.create(namespace).build());
     try (Table table = createTable(TEST_UTIL, tableName,
           new byte[][] { TEST_FAMILY, TEST_FAMILY_2 })) {
-      TEST_UTIL.waitTableEnabled(tableName);
+      TEST_UTIL.waitUntilAllRegionsAssigned(tableName);
 
       // Ingesting test data.
       table.put(Arrays.asList(new Put(TEST_ROW).addColumn(TEST_FAMILY, Q1, value1),
@@ -504,6 +504,7 @@ public class TestAccessController2 extends SecureTestUtil {
     HTableDescriptor htd = new HTableDescriptor(table);
     htd.addFamily(new HColumnDescriptor(family));
     createTable(TEST_UTIL, htd);
+    TEST_UTIL.waitUntilAllRegionsAssigned(htd.getTableName());
 
     // Namespace needs this, as they follow the lazy creation of ACL znode.
     grantOnNamespace(TEST_UTIL, TESTGROUP1_USER1.getShortName(), ns, Action.ADMIN);
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController3.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController3.java
index d0038a1..a421891 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController3.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController3.java
@@ -209,6 +209,7 @@ public class TestAccessController3 extends SecureTestUtil {
     htd.addFamily(hcd);
     htd.setOwner(USER_OWNER);
     createTable(TEST_UTIL, htd, new byte[][] { Bytes.toBytes("s") });
+    TEST_UTIL.waitUntilAllRegionsAssigned(TEST_TABLE);
 
     Region region = TEST_UTIL.getHBaseCluster().getRegions(TEST_TABLE).get(0);
     RegionCoprocessorHost rcpHost = region.getCoprocessorHost();
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.java
index 3be7ef8..c9a37d0 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.java
@@ -35,7 +35,6 @@ import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.testclassification.MediumTests;
 import org.apache.hadoop.hbase.TableNotFoundException;
-import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.Connection;
 import org.apache.hadoop.hbase.client.ConnectionFactory;
 import org.apache.hadoop.hbase.client.Delete;
@@ -145,12 +144,8 @@ public class TestCellACLWithMultipleVersions extends SecureTestUtil {
     htd.setOwner(USER_OWNER);
     htd.addFamily(hcd);
     // Create the test table (owner added to the _acl_ table)
-    try (Connection connection = ConnectionFactory.createConnection(TEST_UTIL.getConfiguration())) {
-      try (Admin admin = connection.getAdmin()) {
-        admin.createTable(htd, new byte[][] { Bytes.toBytes("s") });
-      }
-    }
-    TEST_UTIL.waitTableEnabled(TEST_TABLE.getTableName());
+    TEST_UTIL.createTable(htd, new byte[][] { Bytes.toBytes("s") });
+    TEST_UTIL.waitUntilAllRegionsAssigned(TEST_TABLE.getTableName());
     LOG.info("Sleeping a second because of HBASE-12581");
     Threads.sleep(1000);
   }
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestSecureBulkLoadEndpoint.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestSecureBulkLoadEndpoint.java
index d7a4a85..4f07c2d 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestSecureBulkLoadEndpoint.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestSecureBulkLoadEndpoint.java
@@ -146,6 +146,7 @@ public class TestSecureBulkLoadEndpoint {
   public void testForRaceCondition() throws Exception {
     /// create table
     testUtil.createTable(TABLE,FAMILY,Bytes.toByteArrays(SPLIT_ROWKEY));
+    testUtil.waitUntilAllRegionsAssigned(TABLE);
 
     Consumer<Region> fsCreatedListener = new Consumer<Region>() {
       @Override
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestTablePermissions.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestTablePermissions.java
index 9b35ed1..3290520 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestTablePermissions.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestTablePermissions.java
@@ -106,7 +106,9 @@ public class TestTablePermissions {
       "TestTablePermissions", ABORTABLE);
 
     UTIL.createTable(TEST_TABLE, TEST_FAMILY);
+    UTIL.waitUntilAllRegionsAssigned(TEST_TABLE);
     UTIL.createTable(TEST_TABLE2, TEST_FAMILY);
+    UTIL.waitUntilAllRegionsAssigned(TEST_TABLE2);
   }
 
   @AfterClass