From 4c8631145e13828fc64d55a4b75ce98c007228b5 Mon Sep 17 00:00:00 2001 From: Andrew Kyle Purtell Date: Fri, 13 Dec 2013 04:23:16 +0000 Subject: [PATCH] HBASE-10149. TestZKPermissionsWatcher.testPermissionsWatcher test failure git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1550632 13f79535-47bb-0310-9956-ffa450edef68 --- .../hbase/security/access/TableAuthManager.java | 8 ++++++++ .../access/TestZKPermissionsWatcher.java | 17 +++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/TableAuthManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/TableAuthManager.java index d81f28ae862..8e52148f34c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/TableAuthManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/TableAuthManager.java @@ -103,6 +103,7 @@ public class TableAuthManager { private Configuration conf; private ZKPermissionWatcher zkperms; + private volatile long mtime; private TableAuthManager(ZooKeeperWatcher watcher, Configuration conf) throws IOException { @@ -209,6 +210,7 @@ public class TableAuthManager { } } globalCache = newCache; + mtime++; } catch (IOException e) { // Never happens LOG.error("Error occured while updating the global cache", e); @@ -236,6 +238,7 @@ public class TableAuthManager { } tableCache.put(table, newTablePerms); + mtime++; } /** @@ -259,6 +262,7 @@ public class TableAuthManager { } nsCache.put(namespace, newTablePerms); + mtime++; } private PermissionCache getTablePermissions(TableName table) { @@ -678,6 +682,10 @@ public class TableAuthManager { serialized); } + public long getMTime() { + return mtime; + } + static Map managerMap = new HashMap(); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestZKPermissionsWatcher.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestZKPermissionsWatcher.java index 44e8b2f1b84..2088a8265ab 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestZKPermissionsWatcher.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestZKPermissionsWatcher.java @@ -32,6 +32,7 @@ import org.apache.hadoop.hbase.Abortable; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.LargeTests; +import org.apache.hadoop.hbase.Waiter.Predicate; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -108,7 +109,15 @@ public class TestZKPermissionsWatcher { List acl = new ArrayList(); acl.add(new TablePermission(TEST_TABLE, null, TablePermission.Action.READ, TablePermission.Action.WRITE)); + final long mtimeB = AUTH_B.getMTime(); AUTH_A.setTableUserPermissions("george", TEST_TABLE, acl); + // Wait for the update to propagate + UTIL.waitFor(10000, 100, new Predicate() { + @Override + public boolean evaluate() throws Exception { + return AUTH_B.getMTime() > mtimeB; + } + }); Thread.sleep(100); // check it @@ -132,7 +141,15 @@ public class TestZKPermissionsWatcher { // update ACL: hubert R acl = new ArrayList(); acl.add(new TablePermission(TEST_TABLE, null, TablePermission.Action.READ)); + final long mtimeA = AUTH_A.getMTime(); AUTH_B.setTableUserPermissions("hubert", TEST_TABLE, acl); + // Wait for the update to propagate + UTIL.waitFor(10000, 100, new Predicate() { + @Override + public boolean evaluate() throws Exception { + return AUTH_A.getMTime() > mtimeA; + } + }); Thread.sleep(100); // check it