You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2018/11/15 14:54:43 UTC

[01/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 733988183 -> 68eae6230


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html
index 5062e9b..23b4be7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html
@@ -282,7 +282,7 @@
 <span class="sourceLineNo">274</span>  public static void tearDownAfterClass() throws Exception {<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    cleanUp();<a name="line.275"></a>
 <span class="sourceLineNo">276</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int total = TableAuthManager.getTotalRefCount();<a name="line.277"></a>
+<span class="sourceLineNo">277</span>    int total = AuthManager.getTotalRefCount();<a name="line.277"></a>
 <span class="sourceLineNo">278</span>    assertTrue("Unexpected reference count: " + total, total == 0);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>  }<a name="line.279"></a>
 <span class="sourceLineNo">280</span><a name="line.280"></a>
@@ -1642,12 +1642,12 @@
 <span class="sourceLineNo">1634</span>      }<a name="line.1634"></a>
 <span class="sourceLineNo">1635</span><a name="line.1635"></a>
 <span class="sourceLineNo">1636</span>      UserPermission ownerperm =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>          new UserPermission(Bytes.toBytes(USER_OWNER.getName()), tableName, null, Action.values());<a name="line.1637"></a>
+<span class="sourceLineNo">1637</span>          new UserPermission(USER_OWNER.getName(), tableName, Action.values());<a name="line.1637"></a>
 <span class="sourceLineNo">1638</span>      assertTrue("Owner should have all permissions on table",<a name="line.1638"></a>
 <span class="sourceLineNo">1639</span>        hasFoundUserPermission(ownerperm, perms));<a name="line.1639"></a>
 <span class="sourceLineNo">1640</span><a name="line.1640"></a>
 <span class="sourceLineNo">1641</span>      User user = User.createUserForTesting(TEST_UTIL.getConfiguration(), "user", new String[0]);<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      byte[] userName = Bytes.toBytes(user.getShortName());<a name="line.1642"></a>
+<span class="sourceLineNo">1642</span>      String userName = user.getShortName();<a name="line.1642"></a>
 <span class="sourceLineNo">1643</span><a name="line.1643"></a>
 <span class="sourceLineNo">1644</span>      UserPermission up =<a name="line.1644"></a>
 <span class="sourceLineNo">1645</span>          new UserPermission(userName, tableName, family1, qualifier, Permission.Action.READ);<a name="line.1645"></a>
@@ -1733,7 +1733,7 @@
 <span class="sourceLineNo">1725</span>      }<a name="line.1725"></a>
 <span class="sourceLineNo">1726</span><a name="line.1726"></a>
 <span class="sourceLineNo">1727</span>      UserPermission newOwnerperm =<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          new UserPermission(Bytes.toBytes(newOwner.getName()), tableName, null, Action.values());<a name="line.1728"></a>
+<span class="sourceLineNo">1728</span>          new UserPermission(newOwner.getName(), tableName, Action.values());<a name="line.1728"></a>
 <span class="sourceLineNo">1729</span>      assertTrue("New owner should have all permissions on table",<a name="line.1729"></a>
 <span class="sourceLineNo">1730</span>        hasFoundUserPermission(newOwnerperm, perms));<a name="line.1730"></a>
 <span class="sourceLineNo">1731</span>    } finally {<a name="line.1731"></a>
@@ -1757,1888 +1757,1898 @@
 <span class="sourceLineNo">1749</span><a name="line.1749"></a>
 <span class="sourceLineNo">1750</span>    Collection&lt;String&gt; superUsers = Superusers.getSuperUsers();<a name="line.1750"></a>
 <span class="sourceLineNo">1751</span>    List&lt;UserPermission&gt; adminPerms = new ArrayList&lt;&gt;(superUsers.size() + 1);<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    adminPerms.add(new UserPermission(Bytes.toBytes(USER_ADMIN.getShortName()),<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      AccessControlLists.ACL_TABLE_NAME, null, null, Bytes.toBytes("ACRW")));<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span><a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    for(String user: superUsers) {<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      adminPerms.add(new UserPermission(Bytes.toBytes(user), AccessControlLists.ACL_TABLE_NAME,<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>          null, null, Action.values()));<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    }<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    assertTrue("Only super users, global users and user admin has permission on table hbase:acl " +<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        "per setup", perms.size() == 5 + superUsers.size() &amp;&amp;<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>        hasFoundUserPermission(adminPerms, perms));<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  }<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span><a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  /** global operations */<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private void verifyGlobal(AccessTestAction action) throws Exception {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    verifyAllowed(action, SUPERUSER);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span><a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_NONE, USER_RO);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span><a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>  @Test<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>  public void testCheckPermissions() throws Exception {<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    // --------------------------------------<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    // test global permissions<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>    AccessTestAction globalAdmin = new AccessTestAction() {<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      @Override<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>      public Void run() throws Exception {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.ADMIN);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        return null;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      }<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    };<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    // verify that only superuser can admin<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    verifyGlobal(globalAdmin);<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span><a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>    // --------------------------------------<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    // test multiple permissions<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    AccessTestAction globalReadWrite = new AccessTestAction() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      public Void run() throws Exception {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.READ, Permission.Action.WRITE);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>        return null;<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      }<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    };<a name="line.1793"></a>
+<span class="sourceLineNo">1752</span>    adminPerms.add(new UserPermission(USER_ADMIN.getShortName(), Bytes.toBytes("ACRW")));<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>    for(String user: superUsers) {<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      // Global permission<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      adminPerms.add(new UserPermission(user, Action.values()));<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    }<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    assertTrue("Only super users, global users and user admin has permission on table hbase:acl " +<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        "per setup", perms.size() == 5 + superUsers.size() &amp;&amp;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>        hasFoundUserPermission(adminPerms, perms));<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  /** global operations */<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  private void verifyGlobal(AccessTestAction action) throws Exception {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    verifyAllowed(action, SUPERUSER);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span><a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_NONE, USER_RO);<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span><a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>  @Test<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>  public void testCheckPermissions() throws Exception {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    // --------------------------------------<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    // test global permissions<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    AccessTestAction globalAdmin = new AccessTestAction() {<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      @Override<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>      public Void run() throws Exception {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.ADMIN);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>        return null;<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    };<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    // verify that only superuser can admin<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    verifyGlobal(globalAdmin);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    // --------------------------------------<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    // test multiple permissions<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    AccessTestAction globalReadWrite = new AccessTestAction() {<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      @Override<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>      public Void run() throws Exception {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.READ, Permission.Action.WRITE);<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>        return null;<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    };<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span><a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    verifyGlobal(globalReadWrite);<a name="line.1793"></a>
 <span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    verifyGlobal(globalReadWrite);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span><a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    // --------------------------------------<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    // table/column/qualifier level permissions<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    final byte[] TEST_Q1 = Bytes.toBytes("q1");<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    final byte[] TEST_Q2 = Bytes.toBytes("q2");<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span><a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    User userTable = User.createUserForTesting(conf, "user_check_perms_table", new String[0]);<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    User userColumn = User.createUserForTesting(conf, "user_check_perms_family", new String[0]);<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    User userQualifier = User.createUserForTesting(conf, "user_check_perms_q", new String[0]);<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span><a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    grantOnTable(TEST_UTIL, userTable.getShortName(),<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      TEST_TABLE, null, null,<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      Permission.Action.READ);<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    grantOnTable(TEST_UTIL, userColumn.getShortName(),<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>      TEST_TABLE, TEST_FAMILY, null,<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>      Permission.Action.READ);<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>    grantOnTable(TEST_UTIL, userQualifier.getShortName(),<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>      Permission.Action.READ);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span><a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>    try {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      AccessTestAction tableRead = new AccessTestAction() {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>        @Override<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        public Void run() throws Exception {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, null, null, Permission.Action.READ);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>          return null;<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      };<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      AccessTestAction columnRead = new AccessTestAction() {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        @Override<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>        public Void run() throws Exception {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ);<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          return null;<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      };<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>      AccessTestAction qualifierRead = new AccessTestAction() {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>        @Override<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        public Void run() throws Exception {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ);<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>          return null;<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>        }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>      };<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>      AccessTestAction multiQualifierRead = new AccessTestAction() {<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        @Override<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        public Void run() throws Exception {<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ),<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q2, Permission.Action.READ), });<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>          return null;<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        }<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      };<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>      AccessTestAction globalAndTableRead = new AccessTestAction() {<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>        @Override<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        public Void run() throws Exception {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>              new Permission(Permission.Action.READ),<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>              new TablePermission(TEST_TABLE, null, (byte[]) null, Permission.Action.READ), });<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>          return null;<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>        }<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      };<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span><a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      AccessTestAction noCheck = new AccessTestAction() {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>        @Override<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        public Void run() throws Exception {<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[0]);<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>          return null;<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        }<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      };<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span><a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      verifyAllowed(tableRead, SUPERUSER, userTable);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>      verifyDenied(tableRead, userColumn, userQualifier);<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span><a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      verifyAllowed(columnRead, SUPERUSER, userTable, userColumn);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      verifyDenied(columnRead, userQualifier);<a name="line.1873"></a>
+<span class="sourceLineNo">1795</span>    // --------------------------------------<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    // table/column/qualifier level permissions<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>    final byte[] TEST_Q1 = Bytes.toBytes("q1");<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    final byte[] TEST_Q2 = Bytes.toBytes("q2");<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    User userTable = User.createUserForTesting(conf, "user_check_perms_table", new String[0]);<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    User userColumn = User.createUserForTesting(conf, "user_check_perms_family", new String[0]);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    User userQualifier = User.createUserForTesting(conf, "user_check_perms_q", new String[0]);<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span><a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>    grantOnTable(TEST_UTIL, userTable.getShortName(),<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>      TEST_TABLE, null, null,<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      Permission.Action.READ);<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    grantOnTable(TEST_UTIL, userColumn.getShortName(),<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      TEST_TABLE, TEST_FAMILY, null,<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>      Permission.Action.READ);<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    grantOnTable(TEST_UTIL, userQualifier.getShortName(),<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      Permission.Action.READ);<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span><a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    try {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>      AccessTestAction tableRead = new AccessTestAction() {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>        @Override<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        public Void run() throws Exception {<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, null, null, Permission.Action.READ);<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>          return null;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>        }<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>      };<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span><a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>      AccessTestAction columnRead = new AccessTestAction() {<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>        @Override<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        public Void run() throws Exception {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ);<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>          return null;<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>        }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      };<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      AccessTestAction qualifierRead = new AccessTestAction() {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        @Override<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        public Void run() throws Exception {<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ);<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          return null;<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>      };<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span><a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>      AccessTestAction multiQualifierRead = new AccessTestAction() {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>        @Override<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>        public Void run() throws Exception {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ),<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q2, Permission.Action.READ), });<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          return null;<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>        }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      };<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span><a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>      AccessTestAction globalAndTableRead = new AccessTestAction() {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>        @Override<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>        public Void run() throws Exception {<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>              new Permission(Permission.Action.READ),<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>              new TablePermission(TEST_TABLE, null, (byte[]) null, Permission.Action.READ), });<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>          return null;<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      };<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span><a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      AccessTestAction noCheck = new AccessTestAction() {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>        @Override<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>        public Void run() throws Exception {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[0]);<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>          return null;<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>        }<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      };<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>      verifyAllowed(tableRead, SUPERUSER, userTable);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      verifyDenied(tableRead, userColumn, userQualifier);<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span><a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      verifyAllowed(columnRead, SUPERUSER, userTable, userColumn);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>      verifyDenied(columnRead, userQualifier);<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span><a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      verifyAllowed(qualifierRead, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1873"></a>
 <span class="sourceLineNo">1874</span><a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      verifyAllowed(qualifierRead, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span><a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>      verifyAllowed(multiQualifierRead, SUPERUSER, userTable, userColumn);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      verifyDenied(multiQualifierRead, userQualifier);<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span><a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      verifyAllowed(globalAndTableRead, SUPERUSER);<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>      verifyDenied(globalAndTableRead, userTable, userColumn, userQualifier);<a name="line.1881"></a>
+<span class="sourceLineNo">1875</span>      verifyAllowed(multiQualifierRead, SUPERUSER, userTable, userColumn);<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      verifyDenied(multiQualifierRead, userQualifier);<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span><a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      verifyAllowed(globalAndTableRead, SUPERUSER);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      verifyDenied(globalAndTableRead, userTable, userColumn, userQualifier);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span><a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>      verifyAllowed(noCheck, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1881"></a>
 <span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>      verifyAllowed(noCheck, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span><a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>      // --------------------------------------<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      // test family level multiple permissions<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      AccessTestAction familyReadWrite = new AccessTestAction() {<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>        @Override<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        public Void run() throws Exception {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ,<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>            Permission.Action.WRITE);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          return null;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        }<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>      };<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span><a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      verifyAllowed(familyReadWrite, SUPERUSER, USER_OWNER, USER_CREATE, USER_RW);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      verifyDenied(familyReadWrite, USER_NONE, USER_RO);<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>      // --------------------------------------<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      // check for wrong table region<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>      CheckPermissionsRequest checkRequest =<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>          CheckPermissionsRequest<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>              .newBuilder()<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>              .addPermission(<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>                AccessControlProtos.Permission<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>                    .newBuilder()<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>                    .setType(AccessControlProtos.Permission.Type.Table)<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>                    .setTablePermission(<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>                      AccessControlProtos.TablePermission.newBuilder()<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>                          .setTableName(ProtobufUtil.toProtoTableName(TEST_TABLE))<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>                          .addAction(AccessControlProtos.Permission.Action.CREATE))).build();<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      Table acl = systemUserConnection.getTable(AccessControlLists.ACL_TABLE_NAME);<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      try {<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>        BlockingRpcChannel channel = acl.coprocessorService(new byte[0]);<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        AccessControlService.BlockingInterface protocol =<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>            AccessControlService.newBlockingStub(channel);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        try {<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>          // but ask for TablePermissions for TEST_TABLE<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>          protocol.checkPermissions(null, checkRequest);<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>          fail("this should have thrown CoprocessorException");<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>        } catch (ServiceException ex) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>          // expected<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        }<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>      } finally {<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        acl.close();<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    } finally {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      revokeFromTable(TEST_UTIL, userTable.getShortName(), TEST_TABLE, null, null,<a name="line.1929"></a>
+<span class="sourceLineNo">1883</span>      // --------------------------------------<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>      // test family level multiple permissions<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>      AccessTestAction familyReadWrite = new AccessTestAction() {<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>        @Override<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        public Void run() throws Exception {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>            Permission.Action.WRITE);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>          return null;<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        }<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      };<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span><a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>      verifyAllowed(familyReadWrite, SUPERUSER, USER_OWNER, USER_CREATE, USER_RW);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      verifyDenied(familyReadWrite, USER_NONE, USER_RO);<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span><a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      // --------------------------------------<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>      // check for wrong table region<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>      CheckPermissionsRequest checkRequest =<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>          CheckPermissionsRequest<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>              .newBuilder()<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>              .addPermission(<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>                AccessControlProtos.Permission<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>                    .newBuilder()<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>                    .setType(AccessControlProtos.Permission.Type.Table)<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>                    .setTablePermission(<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>                      AccessControlProtos.TablePermission.newBuilder()<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>                          .setTableName(ProtobufUtil.toProtoTableName(TEST_TABLE))<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>                          .addAction(AccessControlProtos.Permission.Action.CREATE))).build();<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>      Table acl = systemUserConnection.getTable(AccessControlLists.ACL_TABLE_NAME);<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      try {<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>        BlockingRpcChannel channel = acl.coprocessorService(new byte[0]);<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>        AccessControlService.BlockingInterface protocol =<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>            AccessControlService.newBlockingStub(channel);<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>        try {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>          // but ask for TablePermissions for TEST_TABLE<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>          protocol.checkPermissions(null, checkRequest);<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>          fail("this should have thrown CoprocessorException");<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>        } catch (ServiceException ex) {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>          // expected<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>        }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      } finally {<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>        acl.close();<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>      }<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span><a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    } finally {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      revokeFromTable(TEST_UTIL, userTable.getShortName(), TEST_TABLE, null, null,<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        Permission.Action.READ);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      revokeFromTable(TEST_UTIL, userColumn.getShortName(), TEST_TABLE, TEST_FAMILY, null,<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>        Permission.Action.READ);<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      revokeFromTable(TEST_UTIL, userColumn.getShortName(), TEST_TABLE, TEST_FAMILY, null,<a name="line.1931"></a>
+<span class="sourceLineNo">1931</span>      revokeFromTable(TEST_UTIL, userQualifier.getShortName(), TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1931"></a>
 <span class="sourceLineNo">1932</span>        Permission.Action.READ);<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      revokeFromTable(TEST_UTIL, userQualifier.getShortName(), TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>        Permission.Action.READ);<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  }<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  @Test<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>  public void testStopRegionServer() throws Exception {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      @Override<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      public Object run() throws Exception {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        ACCESS_CONTROLLER.preStopRegionServer(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>        return null;<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      }<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    };<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>  }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span><a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>  @Test<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>  public void testRollWALWriterRequest() throws Exception {<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>      @Override<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>      public Object run() throws Exception {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>        ACCESS_CONTROLLER.preRollWALWriterRequest(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>        return null;<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      }<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>    };<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span><a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>  }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span><a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  @Test<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>  public void testOpenRegion() throws Exception {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>      @Override<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>      public Object run() throws Exception {<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>        ACCESS_CONTROLLER.preOpen(ObserverContextImpl.createAndPrepare(RCP_ENV));<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>        return null;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>      }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    };<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span><a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>  @Test<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>  public void testCloseRegion() throws Exception {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>      @Override<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>      public Object run() throws Exception {<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>        ACCESS_CONTROLLER.preClose(ObserverContextImpl.createAndPrepare(RCP_ENV), false);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>        return null;<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      }<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    };<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>  }<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span><a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>  @Test<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  public void testSnapshot() throws Exception {<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    final HTableDescriptor htd = admin.getTableDescriptor(TEST_TABLE);<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    final SnapshotDescription snapshot = new SnapshotDescription(<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>        TEST_TABLE.getNameAsString() + "-snapshot", TEST_TABLE);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    AccessTestAction snapshotAction = new AccessTestAction() {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>      @Override<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      public Object run() throws Exception {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        ACCESS_CONTROLLER.preSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>          snapshot, htd);<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>        return null;<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>      }<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>    };<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span><a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    AccessTestAction deleteAction = new AccessTestAction() {<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>      @Override<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>      public Object run() throws Exception {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        ACCESS_CONTROLLER.preDeleteSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          snapshot);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>        return null;<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>      }<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    };<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span><a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    AccessTestAction restoreAction = new AccessTestAction() {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>      @Override<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      public Object run() throws Exception {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>        ACCESS_CONTROLLER.preRestoreSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>          snapshot, htd);<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>        return null;<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      }<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    };<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span><a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    AccessTestAction cloneAction = new AccessTestAction() {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      @Override<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>      public Object run() throws Exception {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>        ACCESS_CONTROLLER.preCloneSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>          snapshot, null);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>        return null;<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      }<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>    };<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span><a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    verifyAllowed(snapshotAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    verifyDenied(snapshotAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    verifyAllowed(cloneAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    verifyDenied(deleteAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    verifyAllowed(restoreAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    verifyDenied(restoreAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span><a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    verifyAllowed(deleteAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    verifyDenied(cloneAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  }<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span><a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>  @Test<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>  public void testSnapshotWithOwner() throws Exception {<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>    final HTableDescriptor htd = admin.getTableDescriptor(TEST_TABLE);<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>    final SnapshotDescription snapshot = new SnapshotDescription(<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        TEST_TABLE.getNameAsString() + "-snapshot", TEST_TABLE, null, USER_OWNER.getName());<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span><a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    AccessTestAction snapshotAction = new AccessTestAction() {<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>      @Override<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      public Object run() throws Exception {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>        ACCESS_CONTROLLER.preSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>            snapshot, htd);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>        return null;<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    };<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    verifyAllowed(snapshotAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    verifyDenied(snapshotAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span><a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    AccessTestAction deleteAction = new AccessTestAction() {<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      @Override<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      public Object run() throws Exception {<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        ACCESS_CONTROLLER.preDeleteSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>          snapshot);<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        return null;<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    };<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>    verifyAllowed(deleteAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    verifyDenied(deleteAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span><a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    AccessTestAction restoreAction = new AccessTestAction() {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      @Override<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      public Object run() throws Exception {<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>        ACCESS_CONTROLLER.preRestoreSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          snapshot, htd);<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>        return null;<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      }<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    };<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    verifyAllowed(restoreAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    verifyDenied(restoreAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>    AccessTestAction cloneAction = new AccessTestAction() {<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>      @Override<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>      public Object run() throws Exception {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>        ACCESS_CONTROLLER.preCloneSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>          snapshot, htd);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        return null;<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    };<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    verifyAllowed(cloneAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN, USER_OWNER);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    verifyDenied(cloneAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span><a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>  @Test<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>  public void testGlobalAuthorizationForNewRegisteredRS() throws Exception {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    LOG.debug("Test for global authorization for a new registered RegionServer.");<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    MiniHBaseCluster hbaseCluster = TEST_UTIL.getHBaseCluster();<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>    final Admin admin = TEST_UTIL.getAdmin();<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    HTableDescriptor htd = new HTableDescriptor(TEST_TABLE2);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    htd.addFamily(new HColumnDescriptor(TEST_FAMILY));<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>    createTable(TEST_UTIL, htd);<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span><a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    // Starting a new RegionServer.<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    JVMClusterUtil.RegionServerThread newRsThread = hbaseCluster<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>        .startRegionServer();<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>    final HRegionServer newRs = newRsThread.getRegionServer();<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span><a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>    // Move region to the new RegionServer.<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    List&lt;HRegionLocation&gt; regions;<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>    try (RegionLocator locator = systemUserConnection.getRegionLocator(TEST_TABLE2)) {<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      regions = locator.getAllRegionLocations();<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    }<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    HRegionLocation location = regions.get(0);<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    final HRegionInfo hri = location.getRegionInfo();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    final ServerName server = location.getServerName();<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    try (Table table = systemUserConnection.getTable(TEST_TABLE2)) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      AccessTestAction moveAction = new AccessTestAction() {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        @Override<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>        public Object run() throws Exception {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>          admin.move(hri.getEncodedNameAsBytes(),<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>            Bytes.toBytes(newRs.getServerName().getServerName()));<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          return null;<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>        }<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>      };<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      SUPERUSER.runAs(moveAction);<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span><a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      final int RETRIES_LIMIT = 10;<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>      int retries = 0;<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>      while (newRs.getRegions(TEST_TABLE2).size() &lt; 1 &amp;&amp; retries &lt; RETRIES_LIMIT) {<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        LOG.debug("Waiting for region to be opened. Already retried " + retries<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>            + " times.");<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>        try {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>          Thread.sleep(1000);<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>        } catch (InterruptedException e) {<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>        }<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>        retries++;<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>        if (retries == RETRIES_LIMIT - 1) {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>          fail("Retry exhaust for waiting region to be opened.");<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>        }<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>      }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>      // Verify write permission for user "admin2" who has the global<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>      // permissions.<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>      AccessTestAction putAction = new AccessTestAction() {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>        @Override<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>        public Object run() throws Exception {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>          Put put = new Put(Bytes.toBytes("test"));<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          put.addColumn(TEST_FAMILY, Bytes.toBytes("qual"), Bytes.toBytes("value"));<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>          table.put(put);<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>          return null;<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>        }<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>      };<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>      USER_ADMIN.runAs(putAction);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    }<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span><a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>  @Test<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>  public void testTableDescriptorsEnumeration() throws Exception {<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    User TABLE_ADMIN = User.createUserForTesting(conf, "UserA", new String[0]);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span><a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    // Grant TABLE ADMIN privs<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    grantOnTable(TEST_UTIL, TABLE_ADMIN.getShortName(), TEST_TABLE, null, null,<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>      Permission.Action.ADMIN);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    try {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>      AccessTestAction listTablesAction = new AccessTestAction() {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>        @Override<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>        public Object run() throws Exception {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>          try (Connection conn = ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>              Admin admin = conn.getAdmin()) {<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>            return Arrays.asList(admin.listTables());<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>          }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>        }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>      };<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span><a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>      AccessTestAction getTableDescAction = new AccessTestAction() {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>        @Override<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>        public Object run() throws Exception {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>          try (Connection conn = ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>              Admin admin = conn.getAdmin()) {<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>            return admin.getTableDescriptor(TEST_TABLE);<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>          }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>        }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>      };<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      verifyAllowed(listTablesAction, SUPERUSER, USER_ADMIN, USER_CREATE, USER_OWNER, TABLE_ADMIN,<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>        USER_GROUP_CREATE, USER_GROUP_ADMIN);<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      verifyIfEmptyList(listTablesAction, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>        USER_GROUP_WRITE);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span><a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      verifyAllowed(getTableDescAction, SUPERUSER, USER_ADMIN, USER_CREATE, USER_OWNER,<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        TABLE_ADMIN, USER_GROUP_CREATE, USER_GROUP_ADMIN);<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      verifyDenied(getTableDescAction, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        USER_GROUP_WRITE);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    } finally {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      // Cleanup, revoke TABLE ADMIN privs<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      revokeFromTable(TEST_UTIL, TABLE_ADMIN.getShortName(), TEST_TABLE, null, null,<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        Permission.Action.ADMIN);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    }<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>  }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span><a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>  @Test<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  public void testTableNameEnumeration() throws Exception {<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>    AccessTestAction listTablesAction = new AccessTestAction() {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>      @Override<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      public Object run() throws Exception {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>        Connection unmanagedConnection =<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>            ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>        Admin admin = unmanagedConnection.getAdmin();<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        try {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          return Arrays.asList(admin.listTableNames());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>        } finally {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>          admin.close();<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>          unmanagedConnection.close();<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>        }<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    };<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span><a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>    verifyAllowed(listTablesAction, SUPERUSER, USER_ADMIN, USER_CREATE, USER_OWNER, USER_RW,<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      USER_RO, USER_GROUP_CREATE, USER_GROUP_ADMIN, USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>    verifyIfEmptyList(listTablesAction, USER_NONE);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>  }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span><a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  @Test<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  public void testTableDeletion() throws Exception {<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>    User TABLE_ADMIN = User.createUserForTesting(conf, "TestUser", new String[0]);<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>    createTestTable(tableName);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span><a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>    // Grant TABLE ADMIN privs<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>    grantOnTable(TEST_UTIL, TABLE_ADMIN.getShortName(), tableName, null, null, Permission.Action.ADMIN);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span><a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    AccessTestAction deleteTableAction = new AccessTestAction() {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      @Override<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      public Object run() throws Exception {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        Connection unmanagedConnection =<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>            ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>        Admin admin = unmanagedConnection.getAdmin();<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        try {<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>          deleteTable(TEST_UTIL, admin, tableName);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>        } finally {<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>          admin.close();<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>          unmanagedConnection.close();<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>        }<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>        return null;<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>      }<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>    };<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span><a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    verifyDenied(deleteTableAction, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      USER_GROUP_WRITE);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    verifyAllowed(deleteTableAction, TABLE_ADMIN);<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>  }<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span><a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>  private void createTestTable(TableName tname) throws Exception {<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    createTestTable(tname, TEST_FAMILY);<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>  }<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span><a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>  private void createTestTable(TableName tname, byte[] cf) throws Exception {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    HTableDescriptor htd = new HTableDescriptor(tname);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    HColumnDescriptor hcd = new HColumnDescriptor(cf);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    hcd.setMaxVersions(100);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    htd.addFamily(hcd);<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    htd.setOwner(USER_OWNER);<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    createTable(TEST_UTIL, htd, new byte[][] { Bytes.toBytes("s") });<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>  }<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span><a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>  @Test<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>  public void testNamespaceUserGrant() throws Exception {<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    AccessTestAction getAction = new AccessTestAction() {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      @Override<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      public Object run() throws Exception {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        try(Connection conn = ConnectionFactory.createConnection(conf);<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>            Table t = conn.getTable(TEST_TABLE)) {<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          return t.get(new Get(TEST_ROW));<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>        }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    };<a name="line.2295"></a>
+<span class="sourceLineNo">1933</span>    }<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>  }<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span><a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>  @Test<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  public void testStopRegionServer() throws Exception {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>      @Override<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      public Object run() throws Exception {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>        ACCESS_CONTROLLER.preStopRegionServer(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>        return null;<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>      }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    };<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span><a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>  }<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span><a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>  @Test<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>  public void testRollWALWriterRequest() throws Exception {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>      @Override<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>      public Object run() throws Exception {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        ACCESS_CONTROLLER.preRollWALWriterRequest(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        return null;<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    };<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>  }<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span><a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>  @Test<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>  public void testOpenRegion() throws Exception {<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>      @Override<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>      public Object run() throws Exception {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>        ACCESS_CONTROLLER.preOpen(ObserverContextImpl.createAndPrepare(RCP_ENV));<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>        return null;<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>      }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    };<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span><a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span><a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  @Test<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>  public void testCloseRegion() throws Exception {<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>      @Override<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      public Object run() throws Exception {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        ACCESS_CONTROLLER.preClose(ObserverContextImpl.createAndPrepare(RCP_ENV), false);<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>        return null;<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>      }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    };<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>  }<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>  @Test<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>  public void testSnapshot() throws Exception {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>    final HTableDescriptor htd = admin.getTableDescriptor(TEST_TABLE);<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    final SnapshotDescription snapshot = new SnapshotDescription(<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        TEST_TABLE.getNameAsString() + "-snapshot", TEST_TABLE);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    AccessTestAction snapshotAction = new AccessTestAction() {<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      @Override<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      public Object run() throws Exception {<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        ACCESS_CONTROLLER.preSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>          snapshot, htd);<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        return null;<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>      }<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    };<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span><a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    AccessTestAction deleteAction = new AccessTestAction() {<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>      @Override<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      public Object run() throws Exception {<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>        ACCESS_CONTROLLER.preDeleteSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          snapshot);<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>        return null;<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>      }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>    };<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>    AccessTestAction restoreAction = new AccessTestAction() {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>      @Override<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>      public Object run() throws Exception {<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>        ACCESS_CONTROLLER.preRestoreSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>          snapshot, htd);<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        return null;<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>      }<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>    };<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span><a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>    AccessTestAction cloneAction = new AccessTestAction() {<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>      @Override<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>      public Object run() throws Exception {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>        ACCESS_CONTROLLER.preCloneSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>          snapshot, null);<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>        return null;<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>      }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>    };<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    verifyAllowed(snapshotAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    verifyDenied(snapshotAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span><a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    verifyAllowed(cloneAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>    verifyDenied(deleteAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span><a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    verifyAllowed(restoreAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    verifyDenied(restoreAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span><a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    verifyAllowed(deleteAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    verifyDenied(cloneAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>  @Test<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>  public void testSnapshotWithOwner() throws Exception {<a name="line.2056"></a>
+<span class

<TRUNCATED>

[46/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
index 3065dad..a277554 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -9973,8 +9973,10 @@ service.</div>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#tableAcls">tableAcls</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#tableCache">tableCache</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#tableCache">tableCache</a></span></code>
+<div class="block">Cache for table permission.</div>
+</td>
 </tr>
 </tbody>
 </table>
@@ -10015,6 +10017,15 @@ service.</div>
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#accessUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">accessUserTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+               <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Checks if the user has access to the full table or at least a family/qualifier
+ for the specified action.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#allow-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-byte:A-byte:A-">allow</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -10024,7 +10035,7 @@ service.</div>
      byte[]&nbsp;family,
      byte[]&nbsp;qualifier)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#allow-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-java.util.Map-">allow</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -10033,68 +10044,67 @@ service.</div>
      <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],? extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;?&gt;&gt;&nbsp;families)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeCell-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeCell</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+             <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+             <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+             <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in cell scope.</div>
+</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-         <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         byte[]&nbsp;family,
-         byte[]&nbsp;qualifier,
-         <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeFamily-java.util.Set-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeFamily</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+               byte[]&nbsp;family,
+               <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         byte[]&nbsp;family,
-         byte[]&nbsp;qualifier,
-         <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeTable-java.util.Set-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeTable</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+              <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+              byte[]&nbsp;family,
+              byte[]&nbsp;qualifier,
+              <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         byte[]&nbsp;family,
-         <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserFamily-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                   <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                   byte[]&nbsp;family,
+                   <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table:family scope.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
-         <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Authorize a user for a given KV.</div>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                  <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                  byte[]&nbsp;family,
+                  byte[]&nbsp;qualifier,
+                  <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table:family:qualifier scope.</div>
 </td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeGroup-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeGroup</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
-              <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-              byte[]&nbsp;family,
-              byte[]&nbsp;qualifier,
-              <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks authorization to a given table, column family and column for a group, based
- on the stored permissions.</div>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                  <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                  byte[]&nbsp;family,
+                  <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table:family scope.</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUser</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-             <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             byte[]&nbsp;family,
-             byte[]&nbsp;qualifier,
-             <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUser</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-             <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             byte[]&nbsp;family,
-             <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks authorization to a given table and column family for a user, based on the
- stored user permissions.</div>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                  <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                  <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table scope.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.GrantRequest</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#buildGrantRequest-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-boolean-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...-">buildGrantRequest</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
                  <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -10102,20 +10112,20 @@ service.</div>
                  byte[]&nbsp;qualifier,
                  boolean&nbsp;mergeExistingPermissions,
                  org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</code>
-<div class="block">Create a request to grant user permissions.</div>
+<div class="block">Create a request to grant user table permissions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.RevokeRequest</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#buildRevokeRequest-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...-">buildRevokeRequest</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
                   <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;family,
                   byte[]&nbsp;qualifier,
                   org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</code>
-<div class="block">Create a request to revoke user permissions.</div>
+<div class="block">Create a request to revoke user table permissions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#checkLockPermissions-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.RegionInfo:A-java.lang.String-">checkLockPermissions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
@@ -10123,7 +10133,7 @@ service.</div>
                     <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regionInfos,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#checkLockPermissions-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.RegionInfo:A-java.lang.String-">checkLockPermissions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
@@ -10131,13 +10141,13 @@ service.</div>
                     <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regionInfos,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ZKPermissionWatcher.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#deleteTableACLNode-org.apache.hadoop.hbase.TableName-">deleteTableACLNode</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Delete the acl notify node of table</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#deny-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-byte:A-byte:A-">deny</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -10147,7 +10157,7 @@ service.</div>
     byte[]&nbsp;family,
     byte[]&nbsp;qualifier)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#deny-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-java.util.Map-">deny</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -10156,16 +10166,16 @@ service.</div>
     <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],? extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;?&gt;&gt;&nbsp;families)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#failCheckTable-org.apache.hadoop.hbase.TableName-">failCheckTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
-<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getTablePermissions-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-">getTablePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                    <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getTablePermissions-org.apache.hadoop.hbase.TableName-">getTablePermissions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#getUserPermissions-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-org.apache.hadoop.hbase.TableName-">getUserPermissions</a></span>(com.google.protobuf.RpcController&nbsp;controller,
                   org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
@@ -10173,7 +10183,7 @@ service.</div>
 <div class="block">A utility used to get user table permissions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#getUserPermissions-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-org.apache.hadoop.hbase.TableName-byte:A-byte:A-java.lang.String-">getUserPermissions</a></span>(com.google.protobuf.RpcController&nbsp;controller,
                   org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
@@ -10185,7 +10195,7 @@ service.</div>
  user name.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getUserTablePermissions-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-byte:A-byte:A-java.lang.String-boolean-">getUserTablePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                        <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -10197,7 +10207,7 @@ service.</div>
  associated permissions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#grant-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.TableName-java.lang.String-byte:A-byte:A-boolean-org.apache.hadoop.hbase.security.access.Permission.Action...-">grant</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
      <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -10209,7 +10219,7 @@ service.</div>
 <div class="block">Grants permission on the specified table for the specified user</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#grant-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.TableName-java.lang.String-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">grant</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
      <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -10220,7 +10230,7 @@ service.</div>
 <div class="block">Grants permission on the specified table for the specified user.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#grant-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-boolean-org.apache.hadoop.hbase.security.access.Permission.Action...-">grant</a></span>(com.google.protobuf.RpcController&nbsp;controller,
      org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
@@ -10233,27 +10243,6 @@ service.</div>
 <div class="block">A utility used to grant a user table permissions.</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#groupHasAccess-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">groupHasAccess</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
-              <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-              <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks if the user has access to the full table or at least a family/qualifier
- for the specified action.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#hasAccess-java.util.List-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccess</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-         <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#hasAccess-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccess</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#hasPermission-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-org.apache.hadoop.hbase.TableName-byte:A-byte:A-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action:A-">hasPermission</a></span>(com.google.protobuf.RpcController&nbsp;controller,
@@ -10273,56 +10262,27 @@ service.</div>
        byte[]&nbsp;family,
        byte[]&nbsp;qualifier,
        <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks that a given table operation is authorized by this permission
- instance.</div>
+<div class="block">Check if given action can performs on given table:family:qualifier.</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.KeyValue-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-       <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;kv,
+<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+       byte[]&nbsp;family,
        <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks if this permission grants access to perform the given action on
- the given table and key value.</div>
+<div class="block">Check if given action can performs on given table:family.</div>
 </td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#matchesFamily-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchesFamily</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             byte[]&nbsp;family,
-             <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Returns <code>true</code> if this permission matches the given column
- family at least.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#matchesFamilyQualifier-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchesFamilyQualifier</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                      byte[]&nbsp;family,
-                      byte[]&nbsp;qualifier,
-                      <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Returns if the given permission matches the given qualifier.</div>
+<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.KeyValue-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+       <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;kv,
+       <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Checks if this permission grants access to perform the given action on
+ the given table and key value.</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#matchPermission-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchPermission</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-               byte[]&nbsp;family,
-               byte[]&nbsp;qualifier,
-               <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#matchPermission-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchPermission</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-               byte[]&nbsp;family,
-               <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Returns true if the given user has a <a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access"><code>TablePermission</code></a> matching up
- to the column family portion of a permission.</div>
-</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#permissionGranted-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment-org.apache.hadoop.hbase.TableName-java.util.Map-">permissionGranted</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
                  <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
@@ -10334,59 +10294,59 @@ service.</div>
  row data.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#postDeleteTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">postDeleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#postModifyTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.client.TableDescriptor-">postModifyTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;oldDesc,
                <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;currentDesc)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#postTruncateTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">postTruncateTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                  <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#preDeleteTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">preDeleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#preDisableTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">preDisableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#preEnableTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">preEnableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#preLockHeartbeat-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-java.lang.String-">preLockHeartbeat</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;description)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#preModifyTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.client.TableDescriptor-">preModifyTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;currentDesc,
               <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;newDesc)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">CoprocessorWhitelistMasterObserver.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html#preModifyTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.client.TableDescriptor-">preModifyTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;currentDesc,
               <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;newDesc)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#preRequestLock-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.RegionInfo:A-java.lang.String-">preRequestLock</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
@@ -10394,45 +10354,49 @@ service.</div>
               <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regionInfos,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;description)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#preSetTableQuota-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.quotas.GlobalQuotaSettings-">preSetTableQuota</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 <a href="../../../../../org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">GlobalQuotaSettings</a>&nbsp;quotas)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#preSetUserQuota-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.quotas.GlobalQuotaSettings-">preSetUserQuota</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;userName,
                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                <a href="../../../../../org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">GlobalQuotaSettings</a>&nbsp;quotas)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#preSplitRegion-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-byte:A-">preSplitRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               byte[]&nbsp;splitRow)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#preTableFlush-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">preTableFlush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
              <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#preTruncateTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">preTruncateTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#refreshTableCacheFromWritable-org.apache.hadoop.hbase.TableName-byte:A-">refreshTableCacheFromWritable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                             byte[]&nbsp;data)</code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#removeTable-org.apache.hadoop.hbase.TableName-">removeTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#refreshTableCacheFromWritable-org.apache.hadoop.hbase.TableName-byte:A-">refreshTableCacheFromWritable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                             byte[]&nbsp;data)</code>
+<div class="block">Update acl info for table.</div>
+</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#removeTable-org.apache.hadoop.hbase.TableName-">removeTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>
+<div class="block">Remove given table from AuthManager's table cache.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#removeTablePermissions-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.Table-">removeTablePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                       <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -10441,7 +10405,7 @@ service.</div>
 <div class="block">Remove specified table column from the acl table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#removeTablePermissions-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.Table-">removeTablePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                       <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -10449,21 +10413,21 @@ service.</div>
 <div class="block">Remove specified table from the _acl_ table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#removeTablePermissions-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.Table-boolean-">removeTablePermissions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                       byte[]&nbsp;column,
                       <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                       boolean&nbsp;closeTable)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requireAccess-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireAccess</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
              <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
              <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;permissions)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requireAccess-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireAccess</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -10472,7 +10436,7 @@ service.</div>
 <div class="block">Authorizes that the current user has any of the given permissions to access the table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requireGlobalPermission-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-java.util.Map-">requireGlobalPermission</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -10480,7 +10444,7 @@ service.</div>
                        <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],? extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&gt;&nbsp;familyMap)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requireGlobalPermission-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-java.util.Map-java.lang.String-">requireGlobalPermission</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -10491,7 +10455,7 @@ service.</div>
 <div class="block">Checks that the user has the given global permission.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requireNamespacePermission-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-java.lang.String-org.apache.hadoop.hbase.TableName-java.util.Map-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireNamespacePermission</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -10500,7 +10464,7 @@ service.</div>
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],? extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&gt;&nbsp;familyMap,
                           <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;permissions)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requireNamespacePermission-org.apache.hadoop.hbase.security.User-java.lang.String-java.lang.String-org.apache.hadoop.hbase.TableName-java.util.Map-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireNamespacePermission</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -10511,7 +10475,7 @@ service.</div>
 <div class="block">Checks that the user has the given global or namespace permission.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requirePermission-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">requirePermission</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -10520,7 +10484,7 @@ service.</div>
                  byte[]&nbsp;qualifier,
                  <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;permissions)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requirePermission-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">requirePermission</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -10533,7 +10497,7 @@ service.</div>
  given table, column family and column qualifier.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requireTablePermission-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireTablePermission</a></span>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -10542,7 +10506,7 @@ service.</div>
                       byte[]&nbsp;qualifier,
                       <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;permissions)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requireTablePermission-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireTablePermission</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -10554,7 +10518,7 @@ service.</div>
  given table, column family and column qualifier.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#revoke-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.TableName-java.lang.String-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">revoke</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
       <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -10565,7 +10529,7 @@ service.</div>
 <div class="block">Revokes the permission on the table</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#revoke-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">revoke</a></span>(com.google.protobuf.RpcController&nbsp;controller,
       org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
@@ -10577,15 +10541,6 @@ service.</div>
 <div class="block">A utility used to revoke a user's table permissions.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#setTableGroupPermissions-java.lang.String-org.apache.hadoop.hbase.TableName-java.util.List-">setTableGroupPermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;group,
-                        <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms)</code>
-<div class="block">Overwrites the existing permission set for a group and triggers an update
- for zookeeper synchronization.</div>
-</td>
-</tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#setTableName-org.apache.hadoop.hbase.TableName-">setTableName</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>&nbsp;</td>
@@ -10595,41 +10550,16 @@ service.</div>
 <td class="colLast"><span class="typeNameLabel">AuthResult.Params.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthResult.Params.html#setTableName-org.apache.hadoop.hbase.TableName-">setTableName</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#setTableUserPermissions-java.lang.String-org.apache.hadoop.hbase.TableName-java.util.List-">setTableUserPermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
-                       <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms)</code>
-<div class="block">Overwrites the existing permission set for a given user for a table, and
- triggers an update for zookeeper synchronization.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.TableName</code></td>
 <td class="colLast"><span class="typeNameLabel">ShadedAccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toProtoTableName-org.apache.hadoop.hbase.TableName-">toProtoTableName</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache

<TRUNCATED>

[34/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/TablePermission.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/TablePermission.html b/devapidocs/org/apache/hadoop/hbase/security/access/TablePermission.html
index 0025ba5..7903176 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/TablePermission.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/TablePermission.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -121,10 +121,6 @@ var activeTableTab = "activeTableTab";
 <dt>All Implemented Interfaces:</dt>
 <dd>org.apache.hadoop.io.Writable</dd>
 </dl>
-<dl>
-<dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></dd>
-</dl>
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
@@ -132,7 +128,7 @@ public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/securit
 extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></pre>
 <div class="block">Represents an authorization for access for the given actions, optionally
  restricted to the given column family or column qualifier, over the
- given table.  If the family property is <code>null</code>, it implies
+ given table. If the family property is <code>null</code>, it implies
  full table access.</div>
 </li>
 </ul>
@@ -151,7 +147,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <!--   -->
 </a>
 <h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></code></li>
 </ul>
 </li>
 </ul>
@@ -172,14 +168,10 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#family">family</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#namespace">namespace</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code>private byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#qualifier">qualifier</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#table">table</a></span></code>&nbsp;</td>
 </tr>
@@ -189,7 +181,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#ACTION_BY_CODE">ACTION_BY_CODE</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#actions">actions</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#VERSION">VERSION</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#ACTION_BY_CODE">ACTION_BY_CODE</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#actions">actions</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#scope">scope</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#SCOPE_BY_CODE">SCOPE_BY_CODE</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#VERSION">VERSION</a></code></li>
 </ul>
 </li>
 </ul>
@@ -210,37 +202,16 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-java.lang.String-byte:A-">TablePermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-org.apache.hadoop.hbase.TableName-byte:A-">TablePermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                byte[]&nbsp;actionCodes)</code>
-<div class="block">Creates a new permission for the given namespace,
- allowing the actions matching the provided byte codes to be performed.</div>
+<div class="block">Construct a table permission.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">TablePermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Create a new permission for the given namespace,
- allowing the given actions.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-byte:A-">TablePermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-org.apache.hadoop.hbase.TableName-byte:A-byte:A-">TablePermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                byte[]&nbsp;family,
-               byte[]&nbsp;qualifier,
                byte[]&nbsp;actionCodes)</code>
-<div class="block">Creates a new permission for the given namespace or table, family and column qualifier,
- allowing the actions matching the provided byte codes to be performed.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">TablePermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-               byte[]&nbsp;family,
-               byte[]&nbsp;qualifier,
-               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Creates a new permission for the given namespace or table, restricted to the given
- column family and qualifier, allowing the assigned actions to be performed.</div>
+<div class="block">Construct a table:family permission.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -248,8 +219,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
                byte[]&nbsp;family,
                byte[]&nbsp;qualifier,
                byte[]&nbsp;actionCodes)</code>
-<div class="block">Creates a new permission for the given table, family and column qualifier,
- allowing the actions matching the provided byte codes to be performed.</div>
+<div class="block">Construct a table:family:qualifier permission.</div>
 </td>
 </tr>
 <tr class="altColor">
@@ -257,16 +227,20 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
                byte[]&nbsp;family,
                byte[]&nbsp;qualifier,
                <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Creates a new permission for the given table, restricted to the given
- column family and qualifier, allowing the assigned actions to be performed.</div>
+<div class="block">Construct a table:family:qualifier permission.</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">TablePermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                byte[]&nbsp;family,
                <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Create a new permission for the given table and (optionally) column family,
- allowing the given actions.</div>
+<div class="block">Construct a table:family permission.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action...-">TablePermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
+<div class="block">Construct a table permission.</div>
 </td>
 </tr>
 </table>
@@ -289,60 +263,69 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#equals-java.lang.Object-">equals</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#equalsExceptActions-java.lang.Object-">equalsExceptActions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</code>
+<div class="block">Check if two permission equals regardless of actions.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#failCheckFamily-byte:A-">failCheckFamily</a></span>(byte[]&nbsp;family)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#failCheckQualifier-byte:A-">failCheckQualifier</a></span>(byte[]&nbsp;qual)</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#failCheckTable-org.apache.hadoop.hbase.TableName-">failCheckTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#getFamily--">getFamily</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#getNamespace--">getNamespace</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#getQualifier--">getQualifier</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#getTableName--">getTableName</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#hasFamily--">hasFamily</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#hashCode--">hashCode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#hasNamespace--">hasNamespace</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i8" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#hasQualifier--">hasQualifier</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#hasTable--">hasTable</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i10" class="altColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+       byte[]&nbsp;family,
+       byte[]&nbsp;qualifier,
        <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks that a given table operation is authorized by this permission
- instance.</div>
+<div class="block">Check if given action can performs on given table:family:qualifier.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
        byte[]&nbsp;family,
-       byte[]&nbsp;qualifier,
        <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks that a given table operation is authorized by this permission
- instance.</div>
+<div class="block">Check if given action can performs on given table:family.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.KeyValue-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
        <a href="../../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;kv,
@@ -351,41 +334,29 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
  the given table and key value.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#matchesFamily-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchesFamily</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             byte[]&nbsp;family,
-             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Returns <code>true</code> if this permission matches the given column
- family at least.</div>
-</td>
-</tr>
-<tr id="i14" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#matchesFamilyQualifier-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchesFamilyQualifier</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                      byte[]&nbsp;family,
-                      byte[]&nbsp;qualifier,
-                      <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Returns if the given permission matches the given qualifier.</div>
-</td>
-</tr>
 <tr id="i15" class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#rawExpression--">rawExpression</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#readFields-java.io.DataInput-">readFields</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in)</code>&nbsp;</td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#setTableName-org.apache.hadoop.hbase.TableName-">setTableName</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#tableFieldsEqual-org.apache.hadoop.hbase.security.access.TablePermission-">tableFieldsEqual</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;other)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#tableFieldsEqual-org.apache.hadoop.hbase.security.access.TablePermission-">tableFieldsEqual</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;tp)</code>
+<div class="block">Check if fields of table in table permission equals.</div>
+</td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#write-java.io.DataOutput-">write</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)</code>&nbsp;</td>
 </tr>
@@ -395,7 +366,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getActions--">getActions</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getVersion--">getVersion</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#implies-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#setActions-org.apache.hadoop.hbase.security.access.Permission.Action:A-">setActions</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getAccessScope--">getAccessScope</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getActions--">getActions</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getVersion--">getVersion</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#implies-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#setActions-org.apache.hadoop.hbase.security.access.Permission.Action:A-">setActions</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -439,21 +410,12 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <a name="qualifier">
 <!--   -->
 </a>
-<ul class="blockList">
+<ul class="blockListLast">
 <li class="blockList">
 <h4>qualifier</h4>
 <pre>private&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.42">qualifier</a></pre>
 </li>
 </ul>
-<a name="namespace">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>namespace</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.46">namespace</a></pre>
-</li>
-</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -468,144 +430,115 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <ul class="blockList">
 <li class="blockList">
 <h4>TablePermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.49">TablePermission</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.45">TablePermission</a>()</pre>
 <div class="block">Nullary constructor for Writable, do not use</div>
 </li>
 </ul>
-<a name="TablePermission-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">
+<a name="TablePermission-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action...-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>TablePermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.60">TablePermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                       byte[]&nbsp;family,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.55">TablePermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                        <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
-<div class="block">Create a new permission for the given table and (optionally) column family,
- allowing the given actions.</div>
+<div class="block">Construct a table permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>table</code> - the table</dd>
-<dd><code>family</code> - the family, can be null if a global permission on the table</dd>
-<dd><code>assigned</code> - the list of allowed actions</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>assigned</code> - assigned actions</dd>
 </dl>
 </li>
 </ul>
-<a name="TablePermission-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">
+<a name="TablePermission-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>TablePermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.71">TablePermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.65">TablePermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                        byte[]&nbsp;family,
-                       byte[]&nbsp;qualifier,
                        <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
-<div class="block">Creates a new permission for the given table, restricted to the given
- column family and qualifier, allowing the assigned actions to be performed.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>table</code> - the table</dd>
-<dd><code>family</code> - the family, can be null if a global permission on the table</dd>
-<dd><code>assigned</code> - the list of allowed actions</dd>
-</dl>
-</li>
-</ul>
-<a name="TablePermission-org.apache.hadoop.hbase.TableName-byte:A-byte:A-byte:A-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>TablePermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.86">TablePermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                       byte[]&nbsp;family,
-                       byte[]&nbsp;qualifier,
-                       byte[]&nbsp;actionCodes)</pre>
-<div class="block">Creates a new permission for the given table, family and column qualifier,
- allowing the actions matching the provided byte codes to be performed.</div>
+<div class="block">Construct a table:family permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>table</code> - the table</dd>
-<dd><code>family</code> - the family, can be null if a global permission on the table</dd>
-<dd><code>actionCodes</code> - the list of allowed action codes</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>family</code> - family name</dd>
+<dd><code>assigned</code> - assigned actions</dd>
 </dl>
 </li>
 </ul>
-<a name="TablePermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">
+<a name="TablePermission-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>TablePermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.102">TablePermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                       <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.76">TablePermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                        byte[]&nbsp;family,
                        byte[]&nbsp;qualifier,
                        <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
-<div class="block">Creates a new permission for the given namespace or table, restricted to the given
- column family and qualifier, allowing the assigned actions to be performed.</div>
+<div class="block">Construct a table:family:qualifier permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>namespace</code> - </dd>
-<dd><code>table</code> - the table</dd>
-<dd><code>family</code> - the family, can be null if a global permission on the table</dd>
-<dd><code>assigned</code> - the list of allowed actions</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>family</code> - family name</dd>
+<dd><code>qualifier</code> - qualifier name</dd>
+<dd><code>assigned</code> - assigned actions</dd>
 </dl>
 </li>
 </ul>
-<a name="TablePermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-byte:A-">
+<a name="TablePermission-org.apache.hadoop.hbase.TableName-byte:A-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>TablePermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.119">TablePermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                       <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                       byte[]&nbsp;family,
-                       byte[]&nbsp;qualifier,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.89">TablePermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                        byte[]&nbsp;actionCodes)</pre>
-<div class="block">Creates a new permission for the given namespace or table, family and column qualifier,
- allowing the actions matching the provided byte codes to be performed.</div>
+<div class="block">Construct a table permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>namespace</code> - </dd>
-<dd><code>table</code> - the table</dd>
-<dd><code>family</code> - the family, can be null if a global permission on the table</dd>
-<dd><code>actionCodes</code> - the list of allowed action codes</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>actionCodes</code> - assigned actions</dd>
 </dl>
 </li>
 </ul>
-<a name="TablePermission-java.lang.String-byte:A-">
+<a name="TablePermission-org.apache.hadoop.hbase.TableName-byte:A-byte:A-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>TablePermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.134">TablePermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.99">TablePermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                       byte[]&nbsp;family,
                        byte[]&nbsp;actionCodes)</pre>
-<div class="block">Creates a new permission for the given namespace,
- allowing the actions matching the provided byte codes to be performed.</div>
+<div class="block">Construct a table:family permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>namespace</code> - </dd>
-<dd><code>actionCodes</code> - the list of allowed action codes</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>family</code> - family name</dd>
+<dd><code>actionCodes</code> - assigned actions</dd>
 </dl>
 </li>
 </ul>
-<a name="TablePermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">
+<a name="TablePermission-org.apache.hadoop.hbase.TableName-byte:A-byte:A-byte:A-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TablePermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.145">TablePermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                       <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
-<div class="block">Create a new permission for the given namespace,
- allowing the given actions.</div>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.110">TablePermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                       byte[]&nbsp;family,
+                       byte[]&nbsp;qualifier,
+                       byte[]&nbsp;actionCodes)</pre>
+<div class="block">Construct a table:family:qualifier permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>namespace</code> - </dd>
-<dd><code>assigned</code> - the list of allowed actions</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>family</code> - family name</dd>
+<dd><code>qualifier</code> - qualifier name</dd>
+<dd><code>actionCodes</code> - assigned actions</dd>
 </dl>
 </li>
 </ul>
@@ -617,22 +550,13 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="hasTable--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>hasTable</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.150">hasTable</a>()</pre>
-</li>
-</ul>
 <a name="getTableName--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableName</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.154">getTableName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.118">getTableName</a>()</pre>
 </li>
 </ul>
 <a name="setTableName-org.apache.hadoop.hbase.TableName-">
@@ -641,7 +565,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <ul class="blockList">
 <li class="blockList">
 <h4>setTableName</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.158">setTableName</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.122">setTableName</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
 </li>
 </ul>
 <a name="hasFamily--">
@@ -650,7 +574,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <ul class="blockList">
 <li class="blockList">
 <h4>hasFamily</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.162">hasFamily</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.126">hasFamily</a>()</pre>
 </li>
 </ul>
 <a name="getFamily--">
@@ -659,7 +583,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamily</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.166">getFamily</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.130">getFamily</a>()</pre>
 </li>
 </ul>
 <a name="hasQualifier--">
@@ -668,7 +592,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <ul class="blockList">
 <li class="blockList">
 <h4>hasQualifier</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.170">hasQualifier</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.134">hasQualifier</a>()</pre>
 </li>
 </ul>
 <a name="getQualifier--">
@@ -677,16 +601,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <ul class="blockList">
 <li class="blockList">
 <h4>getQualifier</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.174">getQualifier</a>()</pre>
-</li>
-</ul>
-<a name="hasNamespace--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>hasNamespace</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.178">hasNamespace</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.138">getQualifier</a>()</pre>
 </li>
 </ul>
 <a name="getNamespace--">
@@ -695,62 +610,85 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <ul class="blockList">
 <li class="blockList">
 <h4>getNamespace</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.182">getNamespace</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.142">getNamespace</a>()</pre>
 </li>
 </ul>
-<a name="implies-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<a name="implies-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>implies</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.195">implies</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.154">implies</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                       byte[]&nbsp;family,
+                       byte[]&nbsp;qualifier,
                        <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-<div class="block">Checks that a given table operation is authorized by this permission
- instance.</div>
+<div class="block">Check if given action can performs on given table:family:qualifier.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>namespace</code> - the namespace where the operation is being performed</dd>
-<dd><code>action</code> - the action being requested</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>family</code> - family name</dd>
+<dd><code>qualifier</code> - qualifier name</dd>
+<dd><code>action</code> - one of [Read, Write, Create, Exec, Admin]</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd><code>true</code> if the action within the given scope is allowed
-   by this permission, <code>false</code></dd>
+<dd>true if can, false otherwise</dd>
 </dl>
 </li>
 </ul>
-<a name="implies-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<a name="implies-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>implies</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.217">implies</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.174">implies</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                        byte[]&nbsp;family,
-                       byte[]&nbsp;qualifier,
                        <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-<div class="block">Checks that a given table operation is authorized by this permission
- instance.</div>
+<div class="block">Check if given action can performs on given table:family.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>table</code> - the table where the operation is being performed</dd>
-<dd><code>family</code> - the column family to which the operation is restricted,
-   if <code>null</code> implies "all"</dd>
-<dd><code>qualifier</code> - the column qualifier to which the action is restricted,
-   if <code>null</code> implies "all"</dd>
-<dd><code>action</code> - the action being requested</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>family</code> - family name</dd>
+<dd><code>action</code> - one of [Read, Write, Create, Exec, Admin]</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd><code>true</code> if the action within the given scope is allowed
-   by this permission, <code>false</code></dd>
+<dd>true if can, false otherwise</dd>
 </dl>
 </li>
 </ul>
+<a name="failCheckTable-org.apache.hadoop.hbase.TableName-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>failCheckTable</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.184">failCheckTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
+</li>
+</ul>
+<a name="failCheckFamily-byte:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>failCheckFamily</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.188">failCheckFamily</a>(byte[]&nbsp;family)</pre>
+</li>
+</ul>
+<a name="failCheckQualifier-byte:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>failCheckQualifier</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.192">failCheckQualifier</a>(byte[]&nbsp;qual)</pre>
+</li>
+</ul>
 <a name="implies-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.KeyValue-org.apache.hadoop.hbase.security.access.Permission.Action-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>implies</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.248">implies</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.205">implies</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                        <a href="../../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;kv,
                        <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
 <div class="block">Checks if this permission grants access to perform the given action on
@@ -766,53 +704,41 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 </dl>
 </li>
 </ul>
-<a name="matchesFamily-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>matchesFamily</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.273">matchesFamily</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                             byte[]&nbsp;family,
-                             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-<div class="block">Returns <code>true</code> if this permission matches the given column
- family at least.  This only indicates a partial match against the table
- and column family, however, and does not guarantee that implies() for the
- column same family would return <code>true</code>.  In the case of a
- column-qualifier specific permission, for example, implies() would still
- return false.</div>
-</li>
-</ul>
-<a name="matchesFamilyQualifier-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<a name="tableFieldsEqual-org.apache.hadoop.hbase.security.access.TablePermission-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>matchesFamilyQualifier</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.298">matchesFamilyQualifier</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                                      byte[]&nbsp;family,
-                                      byte[]&nbsp;qualifier,
-                                      <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-<div class="block">Returns if the given permission matches the given qualifier.</div>
+<h4>tableFieldsEqual</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.227">tableFieldsEqual</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;tp)</pre>
+<div class="block">Check if fields of table in table permission equals.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>table</code> - the table name to match</dd>
-<dd><code>family</code> - the column family to match</dd>
-<dd><code>qualifier</code> - the qualifier name to match</dd>
-<dd><code>action</code> - the action requested</dd>
+<dd><code>tp</code> - to be checked table permission</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd><code>true</code> if the table, family and qualifier match,
-   otherwise <code>false</code></dd>
+<dd>true if equals, false otherwise</dd>
 </dl>
 </li>
 </ul>
-<a name="tableFieldsEqual-org.apache.hadoop.hbase.security.access.TablePermission-">
+<a name="equalsExceptActions-java.lang.Object-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>tableFieldsEqual</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.312">tableFieldsEqual</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;other)</pre>
+<h4>equalsExceptActions</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.240">equalsExceptActions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#equalsExceptActions-java.lang.Object-">Permission</a></code></span></div>
+<div class="block">Check if two permission equals regardless of actions. It is useful when
+ merging a new permission with an existed permission which needs to check two permissions's
+ fields.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#equalsExceptActions-java.lang.Object-">equalsExceptActions</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>obj</code> - instance</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if equals, false otherwise</dd>
+</dl>
 </li>
 </ul>
 <a name="equals-java.lang.Object-">
@@ -821,7 +747,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.330">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.249">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#equals-java.lang.Object-">equals</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
@@ -834,7 +760,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.345">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.254">hashCode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#hashCode--">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
@@ -847,20 +773,33 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.364">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.270">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#toString--">toString</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
 </dl>
 </li>
 </ul>
+<a name="rawExpression--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rawExpression</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.275">rawExpression</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#rawExpression--">rawExpression</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="readFields-java.io.DataInput-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>readFields</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.395">readFields</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.287">readFields</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -878,7 +817,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.413">write</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TablePermission.html#line.302">write</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -918,7 +857,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permi
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">


[43/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlLists.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlLists.html b/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlLists.html
index 2e59d6f..22cd830 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlLists.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlLists.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9,"i14":9,"i15":9,"i16":9,"i17":9,"i18":9,"i19":9,"i20":9,"i21":9,"i22":9,"i23":9,"i24":9,"i25":9,"i26":9,"i27":9,"i28":9,"i29":9,"i30":9,"i31":9,"i32":9,"i33":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9,"i14":9,"i15":9,"i16":9,"i17":9,"i18":9,"i19":9,"i20":9,"i21":9,"i22":9,"i23":9,"i24":9,"i25":9,"i26":9,"i27":9,"i28":9,"i29":9,"i30":9,"i31":9,"i32":9,"i33":9,"i34":9,"i35":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -266,12 +266,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                          <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
 </tr>
 <tr id="i5" class="rowColor">
-<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getNamespacePermissions-org.apache.hadoop.conf.Configuration-java.lang.String-">getNamespacePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</code>&nbsp;</td>
 </tr>
 <tr id="i6" class="altColor">
-<td class="colFirst"><code>(package private) static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colFirst"><code>(package private) static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getPermissions-org.apache.hadoop.conf.Configuration-byte:A-org.apache.hadoop.hbase.client.Table-byte:A-byte:A-java.lang.String-boolean-">getPermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
               byte[]&nbsp;entryName,
               <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
@@ -284,7 +284,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </td>
 </tr>
 <tr id="i7" class="rowColor">
-<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getTablePermissions-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-">getTablePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                    <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
@@ -337,28 +337,32 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i13" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#isNamespaceEntry-byte:A-">isNamespaceEntry</a></span>(byte[]&nbsp;entryName)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#isGlobalEntry-byte:A-">isGlobalEntry</a></span>(byte[]&nbsp;entryName)</code>&nbsp;</td>
 </tr>
 <tr id="i14" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#isNamespaceEntry-java.lang.String-">isNamespaceEntry</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;entryName)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#isNamespaceEntry-byte:A-">isNamespaceEntry</a></span>(byte[]&nbsp;entryName)</code>&nbsp;</td>
 </tr>
 <tr id="i15" class="rowColor">
-<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#isNamespaceEntry-java.lang.String-">isNamespaceEntry</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;entryName)</code>&nbsp;</td>
+</tr>
+<tr id="i16" class="altColor">
+<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#loadAll-org.apache.hadoop.conf.Configuration-">loadAll</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">Load all permissions from the region server holding <code>_acl_</code>,
  primarily intended for testing purposes.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
-<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
+<tr id="i17" class="rowColor">
+<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#loadAll-org.apache.hadoop.hbase.regionserver.Region-">loadAll</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;aclRegion)</code>
 <div class="block">Loads all of the permission grants stored in a region of the <code>_acl_</code>
  table.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
-<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<tr id="i18" class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#parsePermissionRecord-byte:A-org.apache.hadoop.hbase.Cell-byte:A-byte:A-boolean-java.lang.String-">parsePermissionRecord</a></span>(byte[]&nbsp;entryName,
                      <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv,
                      byte[]&nbsp;cf,
@@ -366,8 +370,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                      boolean&nbsp;filterPerms,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filterUser)</code>&nbsp;</td>
 </tr>
-<tr id="i18" class="altColor">
-<td class="colFirst"><code>private static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<tr id="i19" class="rowColor">
+<td class="colFirst"><code>private static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#parsePermissions-byte:A-org.apache.hadoop.hbase.client.Result-byte:A-byte:A-java.lang.String-boolean-">parsePermissions</a></span>(byte[]&nbsp;entryName,
                 <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
                 byte[]&nbsp;cf,
@@ -378,20 +382,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  name.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
-<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#readPermissions-byte:A-org.apache.hadoop.conf.Configuration-">readPermissions</a></span>(byte[]&nbsp;data,
-               org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block">Reads a set of permissions as <code>Writable</code> instances from the input
- stream.</div>
-</td>
-</tr>
 <tr id="i20" class="altColor">
-<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#readWritablePermissions-java.io.DataInput-org.apache.hadoop.conf.Configuration-">readWritablePermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in,
-                       org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#readPermissions-byte:A-org.apache.hadoop.conf.Configuration-">readPermissions</a></span>(byte[]&nbsp;data,
+               org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
 <tr id="i21" class="rowColor">
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#readUserPermission-byte:A-org.apache.hadoop.conf.Configuration-">readUserPermission</a></span>(byte[]&nbsp;data,
+                  org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+</tr>
+<tr id="i22" class="altColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#readWritableUserPermission-java.io.DataInput-org.apache.hadoop.conf.Configuration-">readWritableUserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in,
+                          org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+</tr>
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>(package private) static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#removeNamespacePermissions-org.apache.hadoop.conf.Configuration-java.lang.String-org.apache.hadoop.hbase.client.Table-">removeNamespacePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
@@ -399,13 +405,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="block">Remove specified namespace from the acl table.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#removePermissionRecord-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.security.access.UserPermission-org.apache.hadoop.hbase.client.Table-">removePermissionRecord</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                       <a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;userPerm,
                       <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t)</code>&nbsp;</td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>(package private) static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#removeTablePermissions-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.Table-">removeTablePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                       <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -414,7 +420,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="block">Remove specified table column from the acl table.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>(package private) static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#removeTablePermissions-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.Table-">removeTablePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                       <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -422,14 +428,14 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="block">Remove specified table from the _acl_ table.</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#removeTablePermissions-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.Table-boolean-">removeTablePermissions</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                       byte[]&nbsp;column,
                       <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                       boolean&nbsp;closeTable)</code>&nbsp;</td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>(package private) static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#removeUserPermission-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.security.access.UserPermission-org.apache.hadoop.hbase.client.Table-">removeUserPermission</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                     <a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;userPerm,
@@ -438,43 +444,43 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  lists.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#toNamespaceEntry-byte:A-">toNamespaceEntry</a></span>(byte[]&nbsp;namespace)</code>&nbsp;</td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#toNamespaceEntry-java.lang.String-">toNamespaceEntry</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</code>&nbsp;</td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>(package private) static byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#userPermissionKey-org.apache.hadoop.hbase.security.access.UserPermission-">userPermissionKey</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;userPerm)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#userPermissionKey-org.apache.hadoop.hbase.security.access.UserPermission-">userPermissionKey</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;permission)</code>
 <div class="block">Build qualifier key from user permission:
   username
   username,family
   username,family,qualifier</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>(package private) static byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#userPermissionRowKey-org.apache.hadoop.hbase.security.access.UserPermission-">userPermissionRowKey</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;userPerm)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#userPermissionRowKey-org.apache.hadoop.hbase.security.access.Permission-">userPermissionRowKey</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;permission)</code>&nbsp;</td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>private static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#validateCFAndCQ-byte:A-byte:A-byte:A-byte:A-">validateCFAndCQ</a></span>(byte[]&nbsp;permFamily,
                byte[]&nbsp;cf,
                byte[]&nbsp;permQualifier,
                byte[]&nbsp;cq)</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>private static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#validateFilterUser-java.lang.String-java.lang.String-java.util.List-">validateFilterUser</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filterUser,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;filterUserGroups)</code>&nbsp;</td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#writePermissionsAsBytes-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hadoop.conf.Configuration-">writePermissionsAsBytes</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#writePermissionsAsBytes-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hadoop.conf.Configuration-">writePermissionsAsBytes</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;perms,
                        org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">Writes a set of permissions as <code>Writable</code> instances and returns the
  resulting byte array.</div>
@@ -601,7 +607,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LIST_CODE</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.747">LIST_CODE</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.756">LIST_CODE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.security.access.AccessControlLists.LIST_CODE">Constant Field Values</a></dd>
@@ -614,7 +620,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>WRITABLE_CODE</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.749">WRITABLE_CODE</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.758">WRITABLE_CODE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.security.access.AccessControlLists.WRITABLE_CODE">Constant Field Values</a></dd>
@@ -627,7 +633,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WRITABLE_NOT_ENCODED</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.751">WRITABLE_NOT_ENCODED</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.760">WRITABLE_NOT_ENCODED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.security.access.AccessControlLists.WRITABLE_NOT_ENCODED">Constant Field Values</a></dd>
@@ -687,7 +693,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addUserPermission</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.207">addUserPermission</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.206">addUserPermission</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                               <a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;userPerm,
                               <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -703,7 +709,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeUserPermission</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.226">removeUserPermission</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.225">removeUserPermission</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                  <a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;userPerm,
                                  <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -730,7 +736,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removePermissionRecord</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.259">removePermissionRecord</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.261">removePermissionRecord</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                            <a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;userPerm,
                                            <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -746,7 +752,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeTablePermissions</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.273">removeTablePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.275">removeTablePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                    <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                    <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -763,7 +769,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeNamespacePermissions</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.290">removeNamespacePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.292">removeNamespacePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
                                        <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -780,7 +786,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeTablePermissions</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.305">removeTablePermissions</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.307">removeTablePermissions</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                            byte[]&nbsp;column,
                                            <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                                            boolean&nbsp;closeTable)
@@ -797,7 +803,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeTablePermissions</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.342">removeTablePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.344">removeTablePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                    <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                    byte[]&nbsp;column,
                                    <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t)
@@ -809,13 +815,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
-<a name="userPermissionRowKey-org.apache.hadoop.hbase.security.access.UserPermission-">
+<a name="userPermissionRowKey-org.apache.hadoop.hbase.security.access.Permission-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>userPermissionRowKey</h4>
-<pre>static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.351">userPermissionRowKey</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;userPerm)</pre>
+<pre>static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.353">userPermissionRowKey</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;permission)</pre>
 </li>
 </ul>
 <a name="userPermissionKey-org.apache.hadoop.hbase.security.access.UserPermission-">
@@ -824,7 +830,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>userPermissionKey</h4>
-<pre>static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.369">userPermissionKey</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;userPerm)</pre>
+<pre>static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.374">userPermissionKey</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;permission)</pre>
 <div class="block">Build qualifier key from user permission:
   username
   username,family
@@ -837,7 +843,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isAclRegion</h4>
-<pre>static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.388">isAclRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
+<pre>static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.398">isAclRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
 <div class="block">Returns <code>true</code> if the given region is part of the <code>_acl_</code>
  metadata table.</div>
 </li>
@@ -848,7 +854,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isAclTable</h4>
-<pre>static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.395">isAclTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
+<pre>static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.405">isAclTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 <div class="block">Returns <code>true</code> if the given table is <code>_acl_</code> metadata table.</div>
 </li>
 </ul>
@@ -858,8 +864,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>loadAll</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.407">loadAll</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;aclRegion)
-                                                                                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.417">loadAll</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;aclRegion)
+                                                                                                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Loads all of the permission grants stored in a region of the <code>_acl_</code>
  table.</div>
 <dl>
@@ -878,8 +884,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>loadAll</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.463">loadAll</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
-                                                                                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.474">loadAll</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+                                                                                                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Load all permissions from the region server holding <code>_acl_</code>,
  primarily intended for testing purposes.</div>
 <dl>
@@ -894,9 +900,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTablePermissions</h4>
-<pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.492">getTablePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
-                                                                                                                             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
-                                                                                                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.504">getTablePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+                                                                                                                            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+                                                                                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
@@ -909,9 +915,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getNamespacePermissions</h4>
-<pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.499">getNamespacePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
-                                                                                                                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)
-                                                                                                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.511">getNamespacePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+                                                                                                                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)
+                                                                                                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
@@ -924,14 +930,14 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getPermissions</h4>
-<pre>static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.512">getPermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
-                                                                                                                 byte[]&nbsp;entryName,
-                                                                                                                 <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
-                                                                                                                 byte[]&nbsp;cf,
-                                                                                                                 byte[]&nbsp;cq,
-                                                                                                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
-                                                                                                                 boolean&nbsp;hasFilterUser)
-                                                                                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.524">getPermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+                                                                                                                byte[]&nbsp;entryName,
+                                                                                                                <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
+                                                                                                                byte[]&nbsp;cf,
+                                                                                                                byte[]&nbsp;cq,
+                                                                                                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+                                                                                                                boolean&nbsp;hasFilterUser)
+                                                                                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Reads user permission assignments stored in the <code>l:</code> column family of the first
  table row in <code>_acl_</code>.
  <p>
@@ -949,7 +955,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUserTablePermissions</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.543">getUserTablePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.555">getUserTablePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                     <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                     byte[]&nbsp;cf,
                                                     byte[]&nbsp;cq,
@@ -970,7 +976,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUserNamespacePermissions</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.553">getUserNamespacePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.565">getUserNamespacePermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
                                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                                                         boolean&nbsp;hasFilterUser)
@@ -989,7 +995,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUserPermissions</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.571">getUserPermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.583">getUserPermissions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                byte[]&nbsp;entryName,
                                                byte[]&nbsp;cf,
                                                byte[]&nbsp;cq,
@@ -1019,12 +1025,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>parsePermissions</h4>
-<pre>private static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.599">parsePermissions</a>(byte[]&nbsp;entryName,
-                                                                                                                           <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
-                                                                                                                           byte[]&nbsp;cf,
-                                                                                                                           byte[]&nbsp;cq,
-                                                                                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
-                                                                                                                           boolean&nbsp;hasFilterUser)</pre>
+<pre>private static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.598">parsePermissions</a>(byte[]&nbsp;entryName,
+                                                                                                                          <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
+                                                                                                                          byte[]&nbsp;cf,
+                                                                                                                          byte[]&nbsp;cq,
+                                                                                                                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+                                                                                                                          boolean&nbsp;hasFilterUser)</pre>
 <div class="block">Parse and filter permission based on the specified column family, column qualifier and user
  name.</div>
 </li>
@@ -1035,12 +1041,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>parsePermissionRecord</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.617">parsePermissionRecord</a>(byte[]&nbsp;entryName,
-                                                                  <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv,
-                                                                  byte[]&nbsp;cf,
-                                                                  byte[]&nbsp;cq,
-                                                                  boolean&nbsp;filterPerms,
-                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filterUser)</pre>
+<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.616">parsePermissionRecord</a>(byte[]&nbsp;entryName,
+                                                             <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv,
+                                                             byte[]&nbsp;cf,
+                                                             byte[]&nbsp;cq,
+                                                             boolean&nbsp;filterPerms,
+                                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filterUser)</pre>
 </li>
 </ul>
 <a name="validateFilterUser-java.lang.String-java.lang.String-java.util.List-">
@@ -1049,7 +1055,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>validateFilterUser</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.700">validateFilterUser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.709">validateFilterUser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filterUser,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;filterUserGroups)</pre>
 </li>
@@ -1060,7 +1066,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>validateCFAndCQ</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.720">validateCFAndCQ</a>(byte[]&nbsp;permFamily,
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.729">validateCFAndCQ</a>(byte[]&nbsp;permFamily,
                                        byte[]&nbsp;cf,
                                        byte[]&nbsp;permQualifier,
                                        byte[]&nbsp;cq)</pre>
@@ -1072,22 +1078,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writePermissionsAsBytes</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.741">writePermissionsAsBytes</a>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.750">writePermissionsAsBytes</a>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;perms,
                                              org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Writes a set of permissions as <code>Writable</code> instances and returns the
  resulting byte array. Writes a set of permission [user: table permission]</div>
 </li>
 </ul>
-<a name="readWritablePermissions-java.io.DataInput-org.apache.hadoop.conf.Configuration-">
+<a name="readWritableUserPermission-java.io.DataInput-org.apache.hadoop.conf.Configuration-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>readWritablePermissions</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.753">readWritablePermissions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in,
-                                                             org.apache.hadoop.conf.Configuration&nbsp;conf)
-                                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
-                                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</a></pre>
+<h4>readWritableUserPermission</h4>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.762">readWritableUserPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in,
+                                                           org.apache.hadoop.conf.Configuration&nbsp;conf)
+                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
@@ -1095,30 +1101,52 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="readUserPermission-byte:A-org.apache.hadoop.conf.Configuration-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>readUserPermission</h4>
+<pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.780">readUserPermission</a>(byte[]&nbsp;data,
+                                                                                                                           org.apache.hadoop.conf.Configuration&nbsp;conf)
+                                                                                                                    throws <a href="../../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="readPermissions-byte:A-org.apache.hadoop.conf.Configuration-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>readPermissions</h4>
-<pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.774">readPermissions</a>(byte[]&nbsp;data,
-                                                                                                                         org.apache.hadoop.conf.Configuration&nbsp;conf)
-                                                                                                                  throws <a href="../../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></pre>
-<div class="block">Reads a set of permissions as <code>Writable</code> instances from the input
- stream.</div>
+<pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.813">readPermissions</a>(byte[]&nbsp;data,
+                                                                                                                    org.apache.hadoop.conf.Configuration&nbsp;conf)
+                                                                                                             throws <a href="../../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></code></dd>
 </dl>
 </li>
 </ul>
+<a name="isGlobalEntry-byte:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isGlobalEntry</h4>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.843">isGlobalEntry</a>(byte[]&nbsp;entryName)</pre>
+</li>
+</ul>
 <a name="isNamespaceEntry-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>isNamespaceEntry</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.805">isNamespaceEntry</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;entryName)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.847">isNamespaceEntry</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;entryName)</pre>
 </li>
 </ul>
 <a name="isNamespaceEntry-byte:A-">
@@ -1127,7 +1155,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isNamespaceEntry</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.809">isNamespaceEntry</a>(byte[]&nbsp;entryName)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.851">isNamespaceEntry</a>(byte[]&nbsp;entryName)</pre>
 </li>
 </ul>
 <a name="toNamespaceEntry-java.lang.String-">
@@ -1136,7 +1164,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toNamespaceEntry</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.813">toNamespaceEntry</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.855">toNamespaceEntry</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</pre>
 </li>
 </ul>
 <a name="fromNamespaceEntry-java.lang.String-">
@@ -1145,7 +1173,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>fromNamespaceEntry</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.817">fromNamespaceEntry</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.859">fromNamespaceEntry</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</pre>
 </li>
 </ul>
 <a name="toNamespaceEntry-byte:A-">
@@ -1154,7 +1182,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toNamespaceEntry</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.823">toNamespaceEntry</a>(byte[]&nbsp;namespace)</pre>
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.865">toNamespaceEntry</a>(byte[]&nbsp;namespace)</pre>
 </li>
 </ul>
 <a name="fromNamespaceEntry-byte:A-">
@@ -1163,7 +1191,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>fromNamespaceEntry</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.830">fromNamespaceEntry</a>(byte[]&nbsp;namespace)</pre>
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.872">fromNamespaceEntry</a>(byte[]&nbsp;namespace)</pre>
 </li>
 </ul>
 <a name="getCellPermissionsForUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.Cell-">
@@ -1172,7 +1200,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getCellPermissionsForUser</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.838">getCellPermissionsForUser</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html#line.880">getCellPermissionsForUser</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                                                          <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>


[24/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html
index 69565e9..3e1345c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html
@@ -55,7 +55,7 @@
 <span class="sourceLineNo">047</span>  private AccessControlUtil() {}<a name="line.47"></a>
 <span class="sourceLineNo">048</span><a name="line.48"></a>
 <span class="sourceLineNo">049</span>  /**<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * Create a request to grant user permissions.<a name="line.50"></a>
+<span class="sourceLineNo">050</span>   * Create a request to grant user table permissions.<a name="line.50"></a>
 <span class="sourceLineNo">051</span>   *<a name="line.51"></a>
 <span class="sourceLineNo">052</span>   * @param username the short user name who to grant permissions<a name="line.52"></a>
 <span class="sourceLineNo">053</span>   * @param tableName optional table name the permissions apply<a name="line.53"></a>
@@ -96,7 +96,7 @@
 <span class="sourceLineNo">088</span>  }<a name="line.88"></a>
 <span class="sourceLineNo">089</span><a name="line.89"></a>
 <span class="sourceLineNo">090</span>  /**<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * Create a request to grant user permissions.<a name="line.91"></a>
+<span class="sourceLineNo">091</span>   * Create a request to grant user namespace permissions.<a name="line.91"></a>
 <span class="sourceLineNo">092</span>   *<a name="line.92"></a>
 <span class="sourceLineNo">093</span>   * @param username the short user name who to grant permissions<a name="line.93"></a>
 <span class="sourceLineNo">094</span>   * @param namespace optional table name the permissions apply<a name="line.94"></a>
@@ -127,7 +127,7 @@
 <span class="sourceLineNo">119</span>  }<a name="line.119"></a>
 <span class="sourceLineNo">120</span><a name="line.120"></a>
 <span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * Create a request to revoke user permissions.<a name="line.122"></a>
+<span class="sourceLineNo">122</span>   * Create a request to revoke user global permissions.<a name="line.122"></a>
 <span class="sourceLineNo">123</span>   *<a name="line.123"></a>
 <span class="sourceLineNo">124</span>   * @param username the short user name whose permissions to be revoked<a name="line.124"></a>
 <span class="sourceLineNo">125</span>   * @param actions the permissions to be revoked<a name="line.125"></a>
@@ -153,7 +153,7 @@
 <span class="sourceLineNo">145</span>  }<a name="line.145"></a>
 <span class="sourceLineNo">146</span><a name="line.146"></a>
 <span class="sourceLineNo">147</span>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Create a request to revoke user permissions.<a name="line.148"></a>
+<span class="sourceLineNo">148</span>   * Create a request to revoke user namespace permissions.<a name="line.148"></a>
 <span class="sourceLineNo">149</span>   *<a name="line.149"></a>
 <span class="sourceLineNo">150</span>   * @param username the short user name whose permissions to be revoked<a name="line.150"></a>
 <span class="sourceLineNo">151</span>   * @param namespace optional table name the permissions apply<a name="line.151"></a>
@@ -184,7 +184,7 @@
 <span class="sourceLineNo">176</span>  }<a name="line.176"></a>
 <span class="sourceLineNo">177</span><a name="line.177"></a>
 <span class="sourceLineNo">178</span>  /**<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * Create a request to grant user permissions.<a name="line.179"></a>
+<span class="sourceLineNo">179</span>   * Create a request to grant user global permissions.<a name="line.179"></a>
 <span class="sourceLineNo">180</span>   *<a name="line.180"></a>
 <span class="sourceLineNo">181</span>   * @param username the short user name who to grant permissions<a name="line.181"></a>
 <span class="sourceLineNo">182</span>   * @param actions the permissions to be granted<a name="line.182"></a>
@@ -248,669 +248,661 @@
 <span class="sourceLineNo">240</span>    return result;<a name="line.240"></a>
 <span class="sourceLineNo">241</span>  }<a name="line.241"></a>
 <span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * Converts a Permission proto to a client Permission object.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   *<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * @param proto the protobuf Permission<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * @return the converted Permission<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  public static Permission toPermission(AccessControlProtos.Permission proto) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    if (proto.getType() != AccessControlProtos.Permission.Type.Global) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      return toTablePermission(proto);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      List&lt;Permission.Action&gt; actions = toPermissionActions(<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          proto.getGlobalPermission().getActionList());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return new Permission(actions.toArray(new Permission.Action[actions.size()]));<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>  /**<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * Converts a TablePermission proto to a client TablePermission object.<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * @param proto the protobuf TablePermission<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * @return the converted TablePermission<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  public static TablePermission toTablePermission(AccessControlProtos.TablePermission proto) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    List&lt;Permission.Action&gt; actions = toPermissionActions(proto.getActionList());<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    TableName table = null;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    byte[] qualifier = null;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    byte[] family = null;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    if (!proto.hasTableName()) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      throw new IllegalStateException("TableName cannot be empty");<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    table = ProtobufUtil.toTableName(proto.getTableName());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    if (proto.hasFamily()) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      family = proto.getFamily().toByteArray();<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    if (proto.hasQualifier()) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      qualifier = proto.getQualifier().toByteArray();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    return new TablePermission(table, family, qualifier,<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        actions.toArray(new Permission.Action[actions.size()]));<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Converts a Permission proto to a client TablePermission object.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @param proto the protobuf Permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * @return the converted TablePermission<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   */<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  public static TablePermission toTablePermission(AccessControlProtos.Permission proto) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    if(proto.getType() == AccessControlProtos.Permission.Type.Global) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      AccessControlProtos.GlobalPermission perm = proto.getGlobalPermission();<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      List&lt;Permission.Action&gt; actions = toPermissionActions(perm.getActionList());<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>      return new TablePermission(null, null, null,<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          actions.toArray(new Permission.Action[actions.size()]));<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if(proto.getType() == AccessControlProtos.Permission.Type.Namespace) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      AccessControlProtos.NamespacePermission perm = proto.getNamespacePermission();<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      List&lt;Permission.Action&gt; actions = toPermissionActions(perm.getActionList());<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>      if(!proto.hasNamespacePermission()) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        throw new IllegalStateException("Namespace must not be empty in NamespacePermission");<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      String namespace = perm.getNamespaceName().toStringUtf8();<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      return new TablePermission(namespace, actions.toArray(new Permission.Action[actions.size()]));<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    if(proto.getType() == AccessControlProtos.Permission.Type.Table) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      AccessControlProtos.TablePermission perm = proto.getTablePermission();<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      List&lt;Permission.Action&gt; actions = toPermissionActions(perm.getActionList());<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>      byte[] qualifier = null;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      byte[] family = null;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      TableName table = null;<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>      if (!perm.hasTableName()) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        throw new IllegalStateException("TableName cannot be empty");<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      table = ProtobufUtil.toTableName(perm.getTableName());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>      if (perm.hasFamily()) family = perm.getFamily().toByteArray();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      if (perm.hasQualifier()) qualifier = perm.getQualifier().toByteArray();<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return new TablePermission(table, family, qualifier,<a name="line.323"></a>
-<span class="sourceLineNo">324</span>          actions.toArray(new Permission.Action[actions.size()]));<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    throw new IllegalStateException("Unrecognize Perm Type: "+proto.getType());<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>  /**<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * Convert a client Permission to a Permission proto<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   *<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param perm the client Permission<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * @return the protobuf Permission<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public static AccessControlProtos.Permission toPermission(Permission perm) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    AccessControlProtos.Permission.Builder ret = AccessControlProtos.Permission.newBuilder();<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    if (perm instanceof TablePermission) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      TablePermission tablePerm = (TablePermission)perm;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      if(tablePerm.hasNamespace()) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        ret.setType(AccessControlProtos.Permission.Type.Namespace);<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span>        AccessControlProtos.NamespacePermission.Builder builder =<a name="line.342"></a>
-<span class="sourceLineNo">343</span>            AccessControlProtos.NamespacePermission.newBuilder();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        builder.setNamespaceName(ByteString.copyFromUtf8(tablePerm.getNamespace()));<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        Permission.Action[] actions = perm.getActions();<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        if (actions != null) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          for (Permission.Action a : actions) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            builder.addAction(toPermissionAction(a));<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        ret.setNamespacePermission(builder);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        return ret.build();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      } else if (tablePerm.hasTable()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        ret.setType(AccessControlProtos.Permission.Type.Table);<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>        AccessControlProtos.TablePermission.Builder builder =<a name="line.356"></a>
-<span class="sourceLineNo">357</span>            AccessControlProtos.TablePermission.newBuilder();<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        builder.setTableName(ProtobufUtil.toProtoTableName(tablePerm.getTableName()));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        if (tablePerm.hasFamily()) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>          builder.setFamily(ByteStringer.wrap(tablePerm.getFamily()));<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        if (tablePerm.hasQualifier()) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          builder.setQualifier(ByteStringer.wrap(tablePerm.getQualifier()));<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        Permission.Action actions[] = perm.getActions();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        if (actions != null) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>          for (Permission.Action a : actions) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            builder.addAction(toPermissionAction(a));<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        ret.setTablePermission(builder);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        return ret.build();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>    ret.setType(AccessControlProtos.Permission.Type.Global);<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    AccessControlProtos.GlobalPermission.Builder builder =<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        AccessControlProtos.GlobalPermission.newBuilder();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    Permission.Action actions[] = perm.getActions();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    if (actions != null) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      for (Permission.Action a: actions) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        builder.addAction(toPermissionAction(a));<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    ret.setGlobalPermission(builder);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    return ret.build();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * Converts a list of Permission.Action proto to a list of client Permission.Action objects.<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   *<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   * @param protoActions the list of protobuf Actions<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * @return the converted list of Actions<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  public static List&lt;Permission.Action&gt; toPermissionActions(<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      List&lt;AccessControlProtos.Permission.Action&gt; protoActions) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    List&lt;Permission.Action&gt; actions = new ArrayList&lt;&gt;(protoActions.size());<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    for (AccessControlProtos.Permission.Action a : protoActions) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      actions.add(toPermissionAction(a));<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return actions;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>  /**<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * Converts a Permission.Action proto to a client Permission.Action object.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   *<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * @param action the protobuf Action<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * @return the converted Action<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  public static Permission.Action toPermissionAction(<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      AccessControlProtos.Permission.Action action) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    switch (action) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    case READ:<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      return Permission.Action.READ;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    case WRITE:<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      return Permission.Action.WRITE;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    case EXEC:<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      return Permission.Action.EXEC;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    case CREATE:<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      return Permission.Action.CREATE;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    case ADMIN:<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      return Permission.Action.ADMIN;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    throw new IllegalArgumentException("Unknown action value "+action.name());<a name="line.425"></a>
-<span class="sourceLineNo">426</span>  }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  /**<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   * Convert a client Permission.Action to a Permission.Action proto<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   *<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   * @param action the client Action<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   * @return the protobuf Action<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   */<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  public static AccessControlProtos.Permission.Action toPermissionAction(<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      Permission.Action action) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    switch (action) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    case READ:<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      return AccessControlProtos.Permission.Action.READ;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    case WRITE:<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      return AccessControlProtos.Permission.Action.WRITE;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    case EXEC:<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      return AccessControlProtos.Permission.Action.EXEC;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    case CREATE:<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      return AccessControlProtos.Permission.Action.CREATE;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    case ADMIN:<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      return AccessControlProtos.Permission.Action.ADMIN;<a name="line.446"></a>
+<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   * Converts a TablePermission proto to a client TablePermission object.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * @param proto the protobuf TablePermission<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @return the converted TablePermission<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  public static TablePermission toTablePermission(AccessControlProtos.TablePermission proto) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    List&lt;Permission.Action&gt; actions = toPermissionActions(proto.getActionList());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    TableName table = null;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    byte[] qualifier = null;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    byte[] family = null;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    if (!proto.hasTableName()) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      throw new IllegalStateException("TableName cannot be empty");<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    table = ProtobufUtil.toTableName(proto.getTableName());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    if (proto.hasFamily()) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      family = proto.getFamily().toByteArray();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    if (proto.hasQualifier()) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      qualifier = proto.getQualifier().toByteArray();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    return new TablePermission(table, family, qualifier,<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        actions.toArray(new Permission.Action[actions.size()]));<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  /**<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   * Converts a Permission proto to a client Permission object.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * @param proto the protobuf Permission<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * @return the converted Permission<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  public static Permission toPermission(AccessControlProtos.Permission proto) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    if (proto.getType() == AccessControlProtos.Permission.Type.Global) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      AccessControlProtos.GlobalPermission perm = proto.getGlobalPermission();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      List&lt;Permission.Action&gt; actions = toPermissionActions(perm.getActionList());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      return new GlobalPermission(actions.toArray(new Permission.Action[actions.size()]));<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    if (proto.getType() == AccessControlProtos.Permission.Type.Namespace) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      AccessControlProtos.NamespacePermission perm = proto.getNamespacePermission();<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      List&lt;Permission.Action&gt; actions = toPermissionActions(perm.getActionList());<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      if (!proto.hasNamespacePermission()) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        throw new IllegalStateException("Namespace must not be empty in NamespacePermission");<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      return new NamespacePermission(perm.getNamespaceName().toStringUtf8(),<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        actions.toArray(new Permission.Action[actions.size()]));<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (proto.getType() == AccessControlProtos.Permission.Type.Table) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      AccessControlProtos.TablePermission perm = proto.getTablePermission();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      List&lt;Permission.Action&gt; actions = toPermissionActions(perm.getActionList());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      byte[] qualifier = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      byte[] family = null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      TableName table = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      if (!perm.hasTableName()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>        throw new IllegalStateException("TableName cannot be empty");<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      }<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      table = ProtobufUtil.toTableName(perm.getTableName());<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (perm.hasFamily()) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        family = perm.getFamily().toByteArray();<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      if (perm.hasQualifier()) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        qualifier = perm.getQualifier().toByteArray();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      return new TablePermission(table, family, qualifier,<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        actions.toArray(new Permission.Action[actions.size()]));<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    throw new IllegalStateException("Unrecognize Perm Type: " + proto.getType());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>  /**<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * Convert a client Permission to a Permission proto<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   *<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @param perm the client Permission<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * @return the protobuf Permission<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  public static AccessControlProtos.Permission toPermission(Permission perm) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    AccessControlProtos.Permission.Builder ret = AccessControlProtos.Permission.newBuilder();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    if (perm instanceof NamespacePermission) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      NamespacePermission namespace = (NamespacePermission) perm;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      ret.setType(AccessControlProtos.Permission.Type.Namespace);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      AccessControlProtos.NamespacePermission.Builder builder =<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        AccessControlProtos.NamespacePermission.newBuilder();<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      builder.setNamespaceName(ByteString.copyFromUtf8(namespace.getNamespace()));<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      Permission.Action[] actions = perm.getActions();<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      if (actions != null) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        for (Permission.Action a : actions) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>          builder.addAction(toPermissionAction(a));<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        }<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      ret.setNamespacePermission(builder);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    } else if (perm instanceof TablePermission) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      TablePermission table = (TablePermission) perm;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      ret.setType(AccessControlProtos.Permission.Type.Table);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      AccessControlProtos.TablePermission.Builder builder =<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        AccessControlProtos.TablePermission.newBuilder();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      builder.setTableName(ProtobufUtil.toProtoTableName(table.getTableName()));<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      if (table.hasFamily()) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        builder.setFamily(ByteStringer.wrap(table.getFamily()));<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      if (table.hasQualifier()) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        builder.setQualifier(ByteStringer.wrap(table.getQualifier()));<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      Permission.Action[] actions = perm.getActions();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      if (actions != null) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        for (Permission.Action a : actions) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>          builder.addAction(toPermissionAction(a));<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        }<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      ret.setTablePermission(builder);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    } else {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      // perm instanceof GlobalPermission<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      ret.setType(AccessControlProtos.Permission.Type.Global);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      AccessControlProtos.GlobalPermission.Builder builder =<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        AccessControlProtos.GlobalPermission.newBuilder();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      Permission.Action[] actions = perm.getActions();<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      if (actions != null) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        for (Permission.Action a: actions) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          builder.addAction(toPermissionAction(a));<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      ret.setGlobalPermission(builder);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    return ret.build();<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  }<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * Converts a list of Permission.Action proto to a list of client Permission.Action objects.<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   *<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * @param protoActions the list of protobuf Actions<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * @return the converted list of Actions<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   */<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  public static List&lt;Permission.Action&gt; toPermissionActions(<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      List&lt;AccessControlProtos.Permission.Action&gt; protoActions) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    List&lt;Permission.Action&gt; actions = new ArrayList&lt;&gt;(protoActions.size());<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    for (AccessControlProtos.Permission.Action a : protoActions) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      actions.add(toPermissionAction(a));<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    return actions;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
+<span class="sourceLineNo">379</span><a name="line.379"></a>
+<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * Converts a Permission.Action proto to a client Permission.Action object.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   *<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * @param action the protobuf Action<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * @return the converted Action<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  public static Permission.Action toPermissionAction(<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      AccessControlProtos.Permission.Action action) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    switch (action) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    case READ:<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      return Permission.Action.READ;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    case WRITE:<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      return Permission.Action.WRITE;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    case EXEC:<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      return Permission.Action.EXEC;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    case CREATE:<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      return Permission.Action.CREATE;<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    case ADMIN:<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      return Permission.Action.ADMIN;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    throw new IllegalArgumentException("Unknown action value "+action.name());<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  /**<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * Convert a client Permission.Action to a Permission.Action proto<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   *<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * @param action the client Action<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * @return the protobuf Action<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   */<a name="line.408"></a>
+<span class="sourceLineNo">409</span>  public static AccessControlProtos.Permission.Action toPermissionAction(<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      Permission.Action action) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    switch (action) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    case READ:<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      return AccessControlProtos.Permission.Action.READ;<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    case WRITE:<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      return AccessControlProtos.Permission.Action.WRITE;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    case EXEC:<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return AccessControlProtos.Permission.Action.EXEC;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    case CREATE:<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      return AccessControlProtos.Permission.Action.CREATE;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    case ADMIN:<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      return AccessControlProtos.Permission.Action.ADMIN;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    throw new IllegalArgumentException("Unknown action value "+action.name());<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  }<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>  /**<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * Convert a client user permission to a user permission proto<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   *<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @param perm the client UserPermission<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   * @return the protobuf UserPermission<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   */<a name="line.431"></a>
+<span class="sourceLineNo">432</span>  public static AccessControlProtos.UserPermission toUserPermission(UserPermission perm) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    return AccessControlProtos.UserPermission.newBuilder()<a name="line.433"></a>
+<span class="sourceLineNo">434</span>        .setUser(ByteString.copyFromUtf8(perm.getUser()))<a name="line.434"></a>
+<span class="sourceLineNo">435</span>        .setPermission(toPermission(perm.getPermission()))<a name="line.435"></a>
+<span class="sourceLineNo">436</span>        .build();<a name="line.436"></a>
+<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
+<span class="sourceLineNo">440</span>   * Converts the permissions list into a protocol buffer GetUserPermissionsResponse<a name="line.440"></a>
+<span class="sourceLineNo">441</span>   */<a name="line.441"></a>
+<span class="sourceLineNo">442</span>  public static GetUserPermissionsResponse buildGetUserPermissionsResponse(<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      final List&lt;UserPermission&gt; permissions) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    GetUserPermissionsResponse.Builder builder = GetUserPermissionsResponse.newBuilder();<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    for (UserPermission perm : permissions) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      builder.addUserPermission(toUserPermission(perm));<a name="line.446"></a>
 <span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    throw new IllegalArgumentException("Unknown action value "+action.name());<a name="line.448"></a>
+<span class="sourceLineNo">448</span>    return builder.build();<a name="line.448"></a>
 <span class="sourceLineNo">449</span>  }<a name="line.449"></a>
 <span class="sourceLineNo">450</span><a name="line.450"></a>
 <span class="sourceLineNo">451</span>  /**<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * Convert a client user permission to a user permission proto<a name="line.452"></a>
+<span class="sourceLineNo">452</span>   * Converts a user permission proto to a client user permission object.<a name="line.452"></a>
 <span class="sourceLineNo">453</span>   *<a name="line.453"></a>
-<span class="sourceLineNo">454</span>   * @param perm the client UserPermission<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * @return the protobuf UserPermission<a name="line.455"></a>
+<span class="sourceLineNo">454</span>   * @param proto the protobuf UserPermission<a name="line.454"></a>
+<span class="sourceLineNo">455</span>   * @return the converted UserPermission<a name="line.455"></a>
 <span class="sourceLineNo">456</span>   */<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public static AccessControlProtos.UserPermission toUserPermission(UserPermission perm) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    return AccessControlProtos.UserPermission.newBuilder()<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        .setUser(ByteStringer.wrap(perm.getUser()))<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        .setPermission(toPermission(perm))<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        .build();<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>  /**<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * Converts the permissions list into a protocol buffer GetUserPermissionsResponse<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  public static GetUserPermissionsResponse buildGetUserPermissionsResponse(<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;UserPermission&gt; permissions) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    GetUserPermissionsResponse.Builder builder = GetUserPermissionsResponse.newBuilder();<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    for (UserPermission perm : permissions) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      builder.addUserPermission(toUserPermission(perm));<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    return builder.build();<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   * Converts a user permission proto to a client user permission object.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   *<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * @param proto the protobuf UserPermission<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * @return the converted UserPermission<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   */<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  public static UserPermission toUserPermission(AccessControlProtos.UserPermission proto) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    return new UserPermission(proto.getUser().toByteArray(),<a name="line.483"></a>
-<span class="sourceLineNo">484</span>        toTablePermission(proto.getPermission()));<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  }<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>  /**<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * Convert a ListMultimap&amp;lt;String, TablePermission&amp;gt; where key is username<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * to a protobuf UserPermission<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   *<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * @param perm the list of user and table permissions<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @return the protobuf UserTablePermissions<a name="line.492"></a>
+<span class="sourceLineNo">457</span>  public static UserPermission toUserPermission(AccessControlProtos.UserPermission proto) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    return new UserPermission(proto.getUser().toStringUtf8(), toPermission(proto.getPermission()));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>  /**<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * Convert a ListMultimap&amp;lt;String, TablePermission&amp;gt; where key is username<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * to a protobuf UserPermission<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param perm the list of user and table permissions<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @return the protobuf UserTablePermissions<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   */<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  public static AccessControlProtos.UsersAndPermissions toUserTablePermissions(<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      ListMultimap&lt;String, UserPermission&gt; perm) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    AccessControlProtos.UsersAndPermissions.Builder builder =<a name="line.470"></a>
+<span class="sourceLineNo">471</span>        AccessControlProtos.UsersAndPermissions.newBuilder();<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    for (Map.Entry&lt;String, Collection&lt;UserPermission&gt;&gt; entry : perm.asMap().entrySet()) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      AccessControlProtos.UsersAndPermissions.UserPermissions.Builder userPermBuilder =<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          AccessControlProtos.UsersAndPermissions.UserPermissions.newBuilder();<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      userPermBuilder.setUser(ByteString.copyFromUtf8(entry.getKey()));<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      for (UserPermission userPerm: entry.getValue()) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        userPermBuilder.addPermissions(toPermission(userPerm.getPermission()));<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      builder.addUserPermissions(userPermBuilder.build());<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return builder.build();<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>  /**<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   * A utility used to grant a user global permissions.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * &lt;p&gt;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   * It's also called by the shell, in case you want to find references.<a name="line.487"></a>
+<span class="sourceLineNo">488</span>   *<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * @param protocol the AccessControlService protocol proxy<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * @param userShortName the short name of the user to grant permissions<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   * @param actions the permissions to be granted<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * @throws ServiceException<a name="line.492"></a>
 <span class="sourceLineNo">493</span>   */<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  public static AccessControlProtos.UsersAndPermissions toUserTablePermissions(<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      ListMultimap&lt;String, TablePermission&gt; perm) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    AccessControlProtos.UsersAndPermissions.Builder builder =<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        AccessControlProtos.UsersAndPermissions.newBuilder();<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    for (Map.Entry&lt;String, Collection&lt;TablePermission&gt;&gt; entry : perm.asMap().entrySet()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      AccessControlProtos.UsersAndPermissions.UserPermissions.Builder userPermBuilder =<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          AccessControlProtos.UsersAndPermissions.UserPermissions.newBuilder();<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      userPermBuilder.setUser(ByteString.copyFromUtf8(entry.getKey()));<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      for (TablePermission tablePerm: entry.getValue()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        userPermBuilder.addPermissions(toPermission(tablePerm));<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      builder.addUserPermissions(userPermBuilder.build());<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    return builder.build();<a name="line.507"></a>
-<span class="sourceLineNo">508</span>  }<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>  /**<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * A utility used to grant a user global permissions.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * &lt;p&gt;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * It's also called by the shell, in case you want to find references.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   *<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * @param protocol the AccessControlService protocol proxy<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   * @param userShortName the short name of the user to grant permissions<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   * @param actions the permissions to be granted<a name="line.517"></a>
-<span class="sourceLineNo">518</span>   * @throws ServiceException<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   */<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  public static void grant(RpcController controller,<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      AccessControlService.BlockingInterface protocol, String userShortName, boolean mergeExistingPermissions,<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      Permission.Action... actions) throws ServiceException {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    List&lt;AccessControlProtos.Permission.Action&gt; permActions =<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        Lists.newArrayListWithCapacity(actions.length);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    for (Permission.Action a : actions) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      permActions.add(toPermissionAction(a));<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    AccessControlProtos.GrantRequest request = buildGrantRequest(userShortName, mergeExistingPermissions,<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        permActions.toArray(new AccessControlProtos.Permission.Action[actions.length]));<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    protocol.grant(controller, request);<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>  /**<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * A utility used to grant a user table permissions. The permissions will<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   * be for a table table/column family/qualifier.<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   * &lt;p&gt;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>   * It's also called by the shell, in case you want to find references.<a name="line.537"></a>
-<span class="sourceLineNo">538</span>   *<a name="line.538"></a>
-<span class="sourceLineNo">539</span>   * @param protocol the AccessControlService protocol proxy<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * @param userShortName the short name of the user to grant permissions<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * @param tableName optional table name<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * @param f optional column family<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param q optional qualifier<a name="line.543"></a>
+<span class="sourceLineNo">494</span>  public static void grant(RpcController controller,<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      AccessControlService.BlockingInterface protocol, String userShortName, boolean mergeExistingPermissions,<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      Permission.Action... actions) throws ServiceException {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    List&lt;AccessControlProtos.Permission.Action&gt; permActions =<a name="line.497"></a>
+<span class="sourceLineNo">498</span>        Lists.newArrayListWithCapacity(actions.length);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    for (Permission.Action a : actions) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      permActions.add(toPermissionAction(a));<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    AccessControlProtos.GrantRequest request = buildGrantRequest(userShortName, mergeExistingPermissions,<a name="line.502"></a>
+<span class="sourceLineNo">503</span>        permActions.toArray(new AccessControlProtos.Permission.Action[actions.length]));<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    protocol.grant(controller, request);<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  }<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>  /**<a name="line.507"></a>
+<span class="sourceLineNo">508</span>   * A utility used to grant a user table permissions. The permissions will<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * be for a table table/column family/qualifier.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * &lt;p&gt;<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * It's also called by the shell, in case you want to find references.<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   *<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * @param protocol the AccessControlService protocol proxy<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * @param userShortName the short name of the user to grant permissions<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param tableName optional table name<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param f optional column family<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param q optional qualifier<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param actions the permissions to be granted<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @throws ServiceException<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   */<a name="line.520"></a>
+<span class="sourceLineNo">521</span>  public static void grant(RpcController controller,<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      AccessControlService.BlockingInterface protocol, String userShortName, TableName tableName,<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      byte[] f, byte[] q, boolean mergeExistingPermissions, Permission.Action... actions)<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      throws ServiceException {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    List&lt;AccessControlProtos.Permission.Action&gt; permActions =<a name="line.525"></a>
+<span class="sourceLineNo">526</span>        Lists.newArrayListWithCapacity(actions.length);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    for (Permission.Action a : actions) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      permActions.add(toPermissionAction(a));<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    AccessControlProtos.GrantRequest request =<a name="line.530"></a>
+<span class="sourceLineNo">531</span>        buildGrantRequest(userShortName, tableName, f, q, mergeExistingPermissions,<a name="line.531"></a>
+<span class="sourceLineNo">532</span>          permActions.toArray(new AccessControlProtos.Permission.Action[actions.length]));<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    protocol.grant(controller, request);<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  /**<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * A utility used to grant a user namespace permissions.<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   * &lt;p&gt;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>   * It's also called by the shell, in case you want to find references.<a name="line.539"></a>
+<span class="sourceLineNo">540</span>   *<a name="line.540"></a>
+<span class="sourceLineNo">541</span>   * @param controller RpcController<a name="line.541"></a>
+<span class="sourceLineNo">542</span>   * @param protocol the AccessControlService protocol proxy<a name="line.542"></a>
+<span class="sourceLineNo">543</span>   * @param namespace the short name of the user to grant permissions<a name="line.543"></a>
 <span class="sourceLineNo">544</span>   * @param actions the permissions to be granted<a name="line.544"></a>
 <span class="sourceLineNo">545</span>   * @throws ServiceException<a name="line.545"></a>
 <span class="sourceLineNo">546</span>   */<a name="line.546"></a>
 <span class="sourceLineNo">547</span>  public static void grant(RpcController controller,<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      AccessControlService.BlockingInterface protocol, String userShortName, TableName tableName,<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      byte[] f, byte[] q, boolean mergeExistingPermissions, Permission.Action... actions)<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      throws ServiceException {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    List&lt;AccessControlProtos.Permission.Action&gt; permActions =<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        Lists.newArrayListWithCapacity(actions.length);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    for (Permission.Action a : actions) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      permActions.add(toPermissionAction(a));<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    }<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    AccessControlProtos.GrantRequest request =<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        buildGrantRequest(userShortName, tableName, f, q, mergeExistingPermissions,<a name="line.557"></a>
-<span class="sourceLineNo">558</span>          permActions.toArray(new AccessControlProtos.Permission.Action[actions.length]));<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    protocol.grant(controller, request);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  }<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>  /**<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * A utility used to grant a user namespace permissions.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * &lt;p&gt;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * It's also called by the shell, in case you want to find references.<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   *<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * @param controller RpcController<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   * @param protocol the AccessControlService protocol proxy<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * @param namespace the short name of the user to grant permissions<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * @param actions the permissions to be granted<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * @throws ServiceException<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public static void grant(RpcController controller,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      AccessControlService.BlockingInterface protocol, String userShortName, String namespace,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      boolean mergeExistingPermissions, Permission.Action... actions) throws ServiceException {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    List&lt;AccessControlProtos.Permission.Action&gt; permActions =<a name="line.576"></a>
-<span class="sourceLineNo">577</span>        Lists.newArrayListWithCapacity(actions.length);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    for (Permission.Action a : actions) {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      permActions.add(toPermissionAction(a));<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    AccessControlProtos.GrantRequest request = buildGrantRequest(userShortName, namespace, mergeExistingPermissions,<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        permActions.toArray(new AccessControlProtos.Permission.Action[actions.length]));<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    protocol.grant(controller, request);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * A utility used to revoke a user's global permissions.<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   * &lt;p&gt;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>   * It's also called by the shell, in case you want to find references.<a name="line.589"></a>
-<span class="sourceLineNo">590</span>   *<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * @param controller RpcController<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * @param protocol the AccessControlService protocol proxy<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * @param userShortName the short name of the user to revoke permissions<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param actions the permissions to be revoked<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @throws ServiceException on failure<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   */<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  public static void revoke(RpcController controller,<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      AccessControlService.BlockingInterface protocol, String userShortName,<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      Permission.Action... actions) throws ServiceException {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    List&lt;AccessControlProtos.Permission.Action&gt; permActions =<a name="line.600"></a>
-<span class="sourceLineNo">601</span>        Lists.newArrayListWithCapacity(actions.length);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    for (Permission.Action a : actions) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      permActions.add(toPermissionAction(a));<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    AccessControlProtos.RevokeRequest request = buildRevokeRequest(userShortName,<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        permActions.toArray(new AccessControlProtos.Permission.Action[actions.length]));<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    protocol.revoke(controller, request);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>  /**<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * A utility used to revoke a user's table permissions. The permissions will<a name="line.611"></a>
-<span class="sourceLineNo">612</span>   * be for a table/column family/qualifier.<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * &lt;p&gt;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * It's also called by the shell, in case you want to find references.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   *<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @param controller RpcController<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * @param protocol the AccessControlService protocol proxy<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * @param userShortName the short name of the user to revoke permissions<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * @param tableName optional table name<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   * @param f optional column family<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * @param q optional qualifier<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * @param actions the permissions to be revoked<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * @throws ServiceException on failure<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   */<a name="line.624"></a>
-<span class="sourceLineNo">625</span>  public static void revoke(RpcController controller,<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      AccessControlService.BlockingInterface protocol, String userShortName, TableName tableName,<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      byte[] f, byte[] q, Permission.Action... actions) throws ServiceException {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    List&lt;AccessControlProtos.Permission.Action&gt; permActions =<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        Lists.newArrayListWithCapacity(actions.length);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    for (Permission.Action a : actions) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      permActions.add(toPermissionAction(a));<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    }<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    AccessControlProtos.RevokeRequest request = buildRevokeRequest(userShortName, tableName, f, q,<a name="line.633"></a>
-<span class="sourceLineNo">634</span>        permActions.toArray(new AccessControlProtos.Permission.Action[actions.length]));<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    protocol.revoke(controller, request);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  }<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * A utility used to revoke a user's namespace permissions.<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * &lt;p&gt;<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   * It's also called by the shell, in case you want to find references.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param controller RpcController<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param protocol the AccessControlService protocol proxy<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   * @param userShortName the short name of the user to revoke permissions<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @param namespace optional table name<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @param actions the permissions to be revoked<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * @throws ServiceException on failure<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  public static void revoke(RpcController controller,<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      AccessControlService.BlockingInterface protocol, String userShortName, String namespace,<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      Permission.Action... actions) throws ServiceException {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    List&lt;AccessControlProtos.Permission.Action&gt; permActions =<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        Lists.newArrayListWithCapacity(actions.length);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    for (Permission.Action a : actions) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      permActions.add(toPermissionAction(a));<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    }<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    AccessControlProtos.RevokeRequest request = buildRevokeRequest(userShortName, namespace,<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        permActions.toArray(new AccessControlProtos.Permission.Action[actions.length]));<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    protocol.revoke(controller, request);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * A utility used to get user's global permissions.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   * &lt;p&gt;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   * It's also called by the shell, in case you want to find references.<a name="line.666"></a>
-<span class="sourceLineNo">667</span>   *<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   * @param controller RpcController<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   * @param protocol the AccessControlService protocol proxy<a name="line.669"></a>
-<span class="sourceLineNo">670</span>   * @throws ServiceException on failure<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   */<a name="line.671"></a>
-<span class="sourceLineNo">672</span>  public static List&lt;UserPermission&gt; getUserPermissions(RpcController controller,<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      AccessControlService.BlockingInterface protocol) throws ServiceException {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    return getUserPermissions(controller, protocol, HConstants.EMPTY_STRING);<a name="line.674"></a>
+<span class="sourceLineNo">548</span>      AccessControlService.BlockingInterface protocol, String userShortName, String namespace,<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      boolean mergeExistingPermissions, Permission.Action... actions) throws ServiceException {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    List&lt;AccessControlProtos.Permission.Action&gt; permActions =<a name="line.550"></a>
+<span class="sourceLineNo">551</span>        Lists.newArrayListWithCapacity(actions.length);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (Permission.Action a : actions) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      permActions.add(toPermissionAction(a));<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    AccessControlProtos.GrantRequest request = buildGrantRequest(userShortName, namespace, mergeExistingPermissions,<a name="line.555"></a>
+<span class="sourceLineNo">556</span>        permActions.toArray(new AccessControlProtos.Permission.Action[actions.length]));<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    protocol.grant(controller, request);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>  /**<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   * A utility used to revoke a user's global permissions.<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   * &lt;p&gt;<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   * It's also called by the shell, in case you want to find references.<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   *<a name="line.564"></a>
+<span class="sourceLineNo">565</span>   * @param controller RpcController<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   * @param protocol the AccessControlService protocol proxy<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @param userShortName the short name of the user to revoke permissions<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   * @param actions the permissions to be revoked<a name="line.568"></a>
+<span class="sourceLineNo">569</span>   * @throws ServiceException on failure<a name="line.569"></a>
+<span class="sourceLineNo">570</span>   */<a name="line.570"></a>
+<span class="sourceLineNo">571</span>  public static void revoke(RpcController controller,<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      AccessControlService.BlockingInterface protocol, String userShortName,<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      Permission.Action... actions) throws ServiceException {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    List&lt;AccessControlProtos.Permission.Action&gt; permActions =<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        Lists.newArrayListWithCapacity(actions.length);<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    for (Permission.Action a : actions) {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      permActions.add(toPermissionAction(a));<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    }<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    AccessControlProtos.RevokeRequest request = buildRevokeRequest(userShortName,<a name="line.579"></a>
+<span class="sourceLineNo">580</span>        permActions.toArray(new AccessControlProtos.Permission.Action[actions.length]));<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    protocol.revoke(controller, request);<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * A utility used to revoke a user's table permissions. The permissions will<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   * be for a table/column family/qualifier.<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * &lt;p&gt;<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * It's also called by the shell, in case you want to find references.<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   *<a name="line.589"></a>
+<span class="sourceLineNo">590</span>   * @param controller RpcController<a name="line.590"></a>
+<span class="sourceLineNo">591</span>   * @param protocol the AccessControlService protocol proxy<a name="line.591"></a>
+<span class="sourceLineNo">592</span>   * @param userShortName the short name of the user to revoke permissions<a name="line.592"></a>
+<span class="sourceLineNo">593</span>   * @param tableName optional table name<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @param f optional column family<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   * @param q optional qualifier<a name="line.595"></a>
+<span class="sourceLineNo">596</span>   * @param actions the permissions to be revoked<a name="line.596"></a>
+<span class="sourceLineNo">597</span>   * @throws ServiceException on failure<a name="line.597"></a>
+<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
+<span class="sourceLineNo">599</span>  public static void revoke(RpcController controller,<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      AccessControlService.BlockingInterface protocol, String userShortName, TableName tableName,<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      byte[] f, byte[] q, Permission.Action... actions) throws ServiceException {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    List&lt;AccessControlProtos.Permission.Action&gt; permActions =<a name="line.602"></a>
+<span class="sourceLineNo">603</span>        Lists.newArrayListWithCapacity(actions.length);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    for (Permission.Action a : actions) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>      permActions.add(toPermissionAction(a));<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    AccessControlProtos.RevokeRequest request = buildRevokeRequest(userShortName, tableName, f, q,<a name="line.607"></a>
+<span class="sourceLineNo">608</span>        permActions.toArray(new AccessControlProtos.Permission.Action[actions.length]));<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    protocol.revoke(controller, request);<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>  /**<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   * A utility used to revoke a user's namespace permissions.<a name="line.613"></a>
+<span class="sourceLineNo">614</span>   * &lt;p&gt;<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * It's also called by the shell, in case you want to find references.<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   *<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   * @param controller RpcController<a name="line.617"></a>
+<span class="sourceLineNo">618</span>   * @param protocol the AccessControlService protocol proxy<a name="line.618"></a>
+<span class="sourceLineNo">619</span>   * @param userShortName the short name of the user to revoke permissions<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * @param namespace optional table name<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * @param actions the permissions to be revoked<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @throws ServiceException on failure<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   */<a name="line.623"></a>
+<span class="sourceLineNo">624</span>  public static void revoke(RpcController controller,<a name="line.624"></a>
+<span class="sourceLineNo">625</span>      AccessControlService.BlockingInterface protocol, String userShortName, String namespace,<a name="line.625"></a>
+<span class="sourceLineNo">626</span>      Permission.Action... actions) throws ServiceException {<a name="line.626"></a>
+<span class="sourceLineNo">627</span>    List&lt;AccessControlProtos.Permission.Action&gt; permActions =<a name="line.627"></a>
+<span class="sourceLineNo">628</span>        Lists.newArrayListWithCapacity(actions.length);<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    for (Permission.Action a : actions) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      permActions.add(toPermissionAction(a));<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    }<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    AccessControlProtos.RevokeRequest request = buildRevokeRequest(userShortName, namespace,<a name="line.632"></a>
+<span class="sourceLineNo">633</span>        permActions.toArray(new AccessControlProtos.Permission.Action[actions.length]));<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    protocol.revoke(controller, request);<a name="line.634"></a>
+<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
+<span class="sourceLineNo">636</span><a name="line.636"></a>
+<span class="sourceLineNo">637</span>  /**<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * A utility used to get user's global permissions.<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   * &lt;p&gt;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>   * It's also called by the shell, in case you want to find references.<a name="line.640"></a>
+<span class="sourceLineNo">641</span>   *<a name="line.641"></a>
+<span class="sourceLineNo">642</span>   * @param controller RpcController<a name="line.642"></a>
+<span class="sourceLineNo">643</span>   * @param protocol the AccessControlService protocol proxy<a name="line.643"></a>
+<span class="sourceLineNo">644</span>   * @throws ServiceException on failure<a name="line.644"></a>
+<span class="sourceLineNo">645</span>   */<a name="line.645"></a>
+<span class="sourceLineNo">646</span>  public static List&lt;UserPermission&gt; getUserPermissions(RpcController controller,<a name="line.646"></a>
+<span class="sour

<TRUNCATED>

[10/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html b/testdevapidocs/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html
index 022325c..48a55d3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":9,"i2":10,"i3":9,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10};
+var methods = {"i0":10,"i1":9,"i2":10,"i3":9,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.68">TestDataBlockEncoders</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.70">TestDataBlockEncoders</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Test all of the data block encoding algorithms for correctness. Most of the
  class generate data which will test different branches in code.</div>
@@ -274,11 +274,15 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i11" class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#testRowIndexWithTagsButNoTagsInCell--">testRowIndexWithTagsButNoTagsInCell</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i12" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#testSeekingOnSample--">testSeekingOnSample</a></span>()</code>
 <div class="block">Test seeking while file is encoded.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#testZeroByte--">testZeroByte</a></span>()</code>&nbsp;</td>
 </tr>
@@ -310,7 +314,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.71">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.73">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -319,7 +323,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.74">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.76">LOG</a></pre>
 </li>
 </ul>
 <a name="NUMBER_OF_KV">
@@ -328,7 +332,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>NUMBER_OF_KV</h4>
-<pre>private static&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.76">NUMBER_OF_KV</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.78">NUMBER_OF_KV</a></pre>
 </li>
 </ul>
 <a name="NUM_RANDOM_SEEKS">
@@ -337,7 +341,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>NUM_RANDOM_SEEKS</h4>
-<pre>private static&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.77">NUM_RANDOM_SEEKS</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.79">NUM_RANDOM_SEEKS</a></pre>
 </li>
 </ul>
 <a name="ENCODED_DATA_OFFSET">
@@ -346,7 +350,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>ENCODED_DATA_OFFSET</h4>
-<pre>private static&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.79">ENCODED_DATA_OFFSET</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.81">ENCODED_DATA_OFFSET</a></pre>
 </li>
 </ul>
 <a name="HFILEBLOCK_DUMMY_HEADER">
@@ -355,7 +359,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>HFILEBLOCK_DUMMY_HEADER</h4>
-<pre>static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.81">HFILEBLOCK_DUMMY_HEADER</a></pre>
+<pre>static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.83">HFILEBLOCK_DUMMY_HEADER</a></pre>
 </li>
 </ul>
 <a name="generator">
@@ -364,7 +368,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>generator</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/RedundantKVGenerator.html" title="class in org.apache.hadoop.hbase.util">RedundantKVGenerator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.83">generator</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/RedundantKVGenerator.html" title="class in org.apache.hadoop.hbase.util">RedundantKVGenerator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.85">generator</a></pre>
 </li>
 </ul>
 <a name="randomizer">
@@ -373,7 +377,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>randomizer</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.84">randomizer</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.86">randomizer</a></pre>
 </li>
 </ul>
 <a name="includesMemstoreTS">
@@ -382,7 +386,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>includesMemstoreTS</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.86">includesMemstoreTS</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.88">includesMemstoreTS</a></pre>
 </li>
 </ul>
 <a name="includesTags">
@@ -391,7 +395,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>includesTags</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.87">includesTags</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.89">includesTags</a></pre>
 </li>
 </ul>
 <a name="useOffheapData">
@@ -400,7 +404,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>useOffheapData</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.88">useOffheapData</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.90">useOffheapData</a></pre>
 </li>
 </ul>
 </li>
@@ -417,7 +421,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestDataBlockEncoders</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.95">TestDataBlockEncoders</a>(boolean&nbsp;includesMemstoreTS,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.97">TestDataBlockEncoders</a>(boolean&nbsp;includesMemstoreTS,
                              boolean&nbsp;includesTag,
                              boolean&nbsp;useOffheapData)</pre>
 </li>
@@ -436,7 +440,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>parameters</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.91">parameters</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.93">parameters</a>()</pre>
 </li>
 </ul>
 <a name="getEncodingContext-org.apache.hadoop.hbase.io.compress.Compression.Algorithm-org.apache.hadoop.hbase.io.encoding.DataBlockEncoding-">
@@ -445,7 +449,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getEncodingContext</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.102">getEncodingContext</a>(org.apache.hadoop.hbase.io.compress.Compression.Algorithm&nbsp;algo,
+<pre>private&nbsp;org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.104">getEncodingContext</a>(org.apache.hadoop.hbase.io.compress.Compression.Algorithm&nbsp;algo,
                                                                                          org.apache.hadoop.hbase.io.encoding.DataBlockEncoding&nbsp;encoding)</pre>
 </li>
 </ul>
@@ -455,7 +459,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testEmptyKeyValues</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.124">testEmptyKeyValues</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.126">testEmptyKeyValues</a>()
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test data block encoding of empty KeyValue.</div>
 <dl>
@@ -470,7 +474,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testNegativeTimestamps</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.151">testNegativeTimestamps</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.153">testNegativeTimestamps</a>()
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test KeyValues with negative timestamp.</div>
 <dl>
@@ -485,7 +489,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testExecutionOnSample</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.178">testExecutionOnSample</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.180">testExecutionOnSample</a>()
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test whether compression -> decompression gives the consistent results on
  pseudorandom sample.</div>
@@ -501,7 +505,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSeekingOnSample</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.187">testSeekingOnSample</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.189">testSeekingOnSample</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test seeking while file is encoded.</div>
 <dl>
@@ -516,7 +520,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>encodeKeyValues</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.241">encodeKeyValues</a>(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding&nbsp;encoding,
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.243">encodeKeyValues</a>(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding&nbsp;encoding,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.KeyValue&gt;&nbsp;kvs,
                                   org.apache.hadoop.hbase.io.encoding.HFileBlockEncodingContext&nbsp;encodingContext,
                                   boolean&nbsp;useOffheapData)
@@ -533,7 +537,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testNextOnSample</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.264">testNextOnSample</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.266">testNextOnSample</a>()
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -547,7 +551,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testFirstKeyInBlockOnSample</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.307">testFirstKeyInBlockOnSample</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.309">testFirstKeyInBlockOnSample</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test whether the decompression of first key is implemented correctly.</div>
 <dl>
@@ -556,13 +560,27 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="testRowIndexWithTagsButNoTagsInCell--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testRowIndexWithTagsButNoTagsInCell</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.329">testRowIndexWithTagsButNoTagsInCell</a>()
+                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="checkSeekingConsistency-java.util.List-boolean-org.apache.hadoop.hbase.Cell-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>checkSeekingConsistency</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.326">checkSeekingConsistency</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.io.encoding.DataBlockEncoder.EncodedSeeker&gt;&nbsp;encodedSeekers,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.351">checkSeekingConsistency</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.io.encoding.DataBlockEncoder.EncodedSeeker&gt;&nbsp;encodedSeekers,
                                      boolean&nbsp;seekBefore,
                                      org.apache.hadoop.hbase.Cell&nbsp;keyValue)</pre>
 </li>
@@ -573,7 +591,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testEncodersOnDataset</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.360">testEncodersOnDataset</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.KeyValue&gt;&nbsp;kvList,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.385">testEncodersOnDataset</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.KeyValue&gt;&nbsp;kvList,
                                    boolean&nbsp;includesMemstoreTS,
                                    boolean&nbsp;includesTags)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -589,7 +607,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testZeroByte</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.389">testZeroByte</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.414">testZeroByte</a>()
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -603,7 +621,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testAlgorithm</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.409">testAlgorithm</a>(byte[]&nbsp;encodedData,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#line.434">testAlgorithm</a>(byte[]&nbsp;encodedData,
                            <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;unencodedDataBuf,
                            org.apache.hadoop.hbase.io.encoding.DataBlockEncoder&nbsp;encoder)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 4837d80..ec56445 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -158,8 +158,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TagUsage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TagUsage</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html
index edb0989..3ae664c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html" target="_top">Frames</a></li>
@@ -395,7 +395,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html
new file mode 100644
index 0000000..b5527f1
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html
@@ -0,0 +1,336 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master.assignment</div>
+<h2 title="Class TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest" class="title">Class TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.assignment.AssignmentManager</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd>org.apache.hadoop.hbase.master.ServerListener</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.82">TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</a>
+extends org.apache.hadoop.hbase.master.assignment.AssignmentManager</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager</h3>
+<code>org.apache.hadoop.hbase.master.assignment.AssignmentManager.RegionInTransitionStat</code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager</h3>
+<code>ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY, ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY, ASSIGN_MAX_ATTEMPTS, BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY, METRICS_RIT_STUCK_WARNING_THRESHOLD, RIT_CHORE_INTERVAL_MSEC_CONF_KEY</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html#AssignmentManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">AssignmentManagerForTest</a></span>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html#reportRegionStateTransition-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest-">reportRegionStateTransition</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest&nbsp;req)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager</h3>
+<code>assign, assign, checkIfShouldMoveSystemRegionAsync, compare, computeRegionInTransitionStat, createAssignProcedures, createMergeProcedure, createOneAssignProcedure, createOneUnassignProcedure, createRoundRobinAssignProcedures, createRoundRobinAssignProcedures, createSplitProcedure, createUnassignProceduresForDisabling, deleteTable, getAssignedRegions, getAssignMaxAttempts, getAssignmentManagerMetrics, getConfiguration, getExcludedServersForSystemTable, getFavoredNodes, getMaster, getMetaRegionFromName, getMetaRegionSet, getNumRegionsOpened, getRegionInfo, getRegionsInTransition, getRegionStates, getRegionStateStore, getReopenStatus, getSnapShotOfAssignment, getTableStateManager, hasRegionsInTransition, isCarryingMeta, isMetaAssigned, isMetaLoaded, isMetaRegion, isMetaRegionInTransition, isRunning, isTableDisabled, isTableEnabled, joinCluster, markRegionAsMerged, markRegionAsSplit, move, moveAsync, offlineRegion, onlineRegion, processOfflineRegions, queueAssign, regionClosed, re
 gionClosing, regionFailedOpen, regionOpened, regionOpening, reportOnlineRegions, serverAdded, serverRemoved, setupRIT, start, stop, submitServerCrash, unassign, waitMetaAssigned, waitMetaLoaded, waitServerReportEvent, wakeMetaLoadedEvent, wakeServerReportEvent</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.ServerListener">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.master.ServerListener</h3>
+<code>waiting</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="AssignmentManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>AssignmentManagerForTest</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html#line.84">AssignmentManagerForTest</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="reportRegionStateTransition-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>reportRegionStateTransition</h4>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html#line.89">reportRegionStateTransition</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest&nbsp;req)
+                                                                                                                                           throws org.apache.hadoop.hbase.PleaseHoldException</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>reportRegionStateTransition</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.master.assignment.AssignmentManager</code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>org.apache.hadoop.hbase.PleaseHoldException</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html
new file mode 100644
index 0000000..668e6a6
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html
@@ -0,0 +1,426 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestRegionAssignedToMultipleRegionServers.HMasterForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestRegionAssignedToMultipleRegionServers.HMasterForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master.assignment</div>
+<h2 title="Class TestRegionAssignedToMultipleRegionServers.HMasterForTest" class="title">Class TestRegionAssignedToMultipleRegionServers.HMasterForTest</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.util.HasThread</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.regionserver.HRegionServer</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.HMaster</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.HMasterForTest</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>, org.apache.hadoop.hbase.Abortable, org.apache.hadoop.hbase.conf.ConfigurationObserver, org.apache.hadoop.hbase.master.MasterServices, org.apache.hadoop.hbase.regionserver.FavoredNodesForRegion, org.apache.hadoop.hbase.regionserver.LastSequenceId, org.apache.hadoop.hbase.regionserver.MutableOnlineRegions, org.apache.hadoop.hbase.regionserver.OnlineRegions, org.apache.hadoop.hbase.regionserver.RegionServerServices, org.apache.hadoop.hbase.Server, org.apache.hadoop.hbase.Stoppable</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.111">TestRegionAssignedToMultipleRegionServers.HMasterForTest</a>
+extends org.apache.hadoop.hbase.master.HMaster</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.master.HMaster</h3>
+<code>org.apache.hadoop.hbase.master.HMaster.MasterStoppedException, org.apache.hadoop.hbase.master.HMaster.RedirectServlet, org.apache.hadoop.hbase.master.HMaster.TableDescriptorGetter</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer</h3>
+<code>org.apache.hadoop.hbase.regionserver.HRegionServer.MovedRegionsCleaner</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.regionserver.RegionServerServices">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.hadoop.hbase.regionserver.RegionServerServices</h3>
+<code>org.apache.hadoop.hbase.regionserver.RegionServerServices.PostOpenDeployContext, org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext</code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.HMaster</h3>
+<code>DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS, HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS, MASTER</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer</h3>
+<code>ABORT_TIMEOUT, ABORT_TIMEOUT_TASK, cacheConfig, cacheFlusher, clusterConnection, clusterId, clusterStatusTracker, compactSplitThread, conf, configurationManager, csm, executorService, fs, fsOk, fsUtilizationChore, hMemManager, infoServer, leases, lock, MASTER_HOSTNAME_KEY, metaTableLocator, movedRegions, msgInterval, numRegionsToReport, onlineRegions, regionFavoredNodesMap, REGIONSERVER, regionsInTransitionInRS, replicationSinkHandler, replicationSourceHandler, rpcServices, secureBulkLoadManager, serverName, sleeper, startcode, tableDescriptors, TEST_SKIP_REPORTING_TRANSITION, threadWakeFrequency, useThisHostnameInstead, walFactory, walFs, walRoller, zooKeeper</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html#HMasterForTest-org.apache.hadoop.conf.Configuration-">HMasterForTest</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>protected org.apache.hadoop.hbase.master.assignment.AssignmentManager</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager</a></span>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>protected org.apache.hadoop.hbase.master.ServerManager</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html#createServerManager-org.apache.hadoop.hbase.master.MasterServices-">createServerManager</a></span>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.HMaster</h3>
+<code>abort, abortProcedure, addColumn, addReplicationPeer, balance, balance, balanceSwitch, canCreateBaseZNode, canUpdateTableDescriptor, checkIfShouldMoveSystemRegionAsync, checkServiceStarted, checkTableModifiable, configureInfoServer, constructMaster, createMetaBootstrap, createRpcServices, createSystemTable, createTable, decommissionRegionServers, decorateMasterConfiguration, deleteColumn, deleteTable, disableReplicationPeer, disableTable, enableReplicationPeer, enableTable, getAssignmentManager, getAverageLoad, getCatalogJanitor, getClientIdAuditPrefix, getClusterMetrics, getClusterMetrics, getClusterMetricsWithoutCoprocessor, getClusterMetricsWithoutCoprocessor, getClusterSchema, getDumpServlet, getFavoredNodesManager, getHFileCleaner, getInitializedEvent, getLastMajorCompactionTimestamp, getLastMajorCompactionTimestampForRegion, getLoadBalancer, getLoadBalancerClassName, getLoadedCoprocessors, getLockManager, getLocks, getLogCleaner, getMasterActiveTime, getMasterCoprocessor
 Host, getMasterCoprocessors, getMasterFileSystem, getMasterFinishedInitializationTime, getMasterMetrics, getMasterProcedureExecutor, getMasterProcedureManagerHost, getMasterQuotaManager, getMasterRpcServices, getMasterStartTime, getMasterWalManager, getMergePlanCount, getMetaTableObserver, getMobCompactionState, getNumWALFiles, getProcedures, getProcessName, getQuotaObserverChore, getRegionNormalizer, getRegionNormalizerTracker, getRegionServerFatalLogBuffer, getRegionServerInfoPort, getRegionServerVersion, getReplicationLoad, getReplicationPeerConfig, getReplicationPeerManager, getServerManager, getServerName, getSnapshotManager, getSnapshotQuotaObserverChore, getSpaceQuotaSnapshotNotifier, getSplitOrMergeTracker, getSplitPlanCount, getSyncReplicationReplayWALManager, getTableStateManager, getUseThisHostnameInstead, getWalProcedureStore, getZooKeeper, initClusterSchemaService, initializeZKBasedSystemTrackers, isActiveMaster, isBalancerOn, isInitialized, isInMaintenanceMode, isNorma
 lizerOn, isSplitOrMergeEnabled, listDecommissionedRegionServers, listReplicationPeers, listTableDescriptors, listTableDescriptorsByNamespace, listTableNames, listTableNamesByNamespace, login, main, mergeRegions, modifyColumn, modifyTable, move, normalizeRegions, recommissionRegionServer, registerService, remoteProcedureCompleted, remoteProcedureFailed, removeReplicationPeer, reportMobCompactionEnd, reportMobCompactionStart, requestMobCompaction, restoreSnapshot, run, setCatalogJanitorEnabled, setInitialized, shutdown, splitRegion, stop, stopMaster, stopServiceThreads, transitReplicationPeerSyncReplicationState, truncateTable, updateConfigurationForQuotasObserver, updateReplicationPeerConfig, waitForMasterActive, waitForMetaOnline, waitForNamespaceOnline</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer</h3>
+<code>abort, addRegion, addToMovedRegions, checkFileSystem, cleanMovedRegions, clearRegionBlockCache, closeAllRegions, closeAndOfflineRegionForSplitOrMerge, closeRegion, constructRegionServer, convertThrowableToIOE, createClusterConnection, createConnection, createRegionLoad, createRegionServerStatusStub, createRegionServerStatusStub, execRegionServerService, executeProcedure, getCacheConfig, getChoreService, getClusterConnection, getClusterId, getCompactionPressure, getCompactionRequestor, getCompactSplitThread, getConfiguration, getConfigurationManager, getConnection, getCoordinatedStateManager, getEventLoopGroupConfig, getExecutorService, getFavoredNodesForRegion, getFileSystem, getFlushPressure, getFlushRequester, getFlushThroughputController, getFsTableDescriptors, getHeapMemoryManager, getInfoServer, getLastSequenceId, getLeases, getMasterAddressTracker, getMetaTableLocator, getMetrics, getMostLoadedRegions, getNonceManager, getNumberOfOnlineRegions, getOnlineRegion, getOnline
 RegionsLocalContext, getOnlineTables, getRegion, getRegion, getRegionBlockLocations, getRegionByEncodedName, getRegionByEncodedName, getRegions, getRegions, getRegionServerAccounting, getRegionServerCoprocessorHost, getRegionServerCoprocessors, getRegionServerMetrics, getRegionServerRpcQuotaManager, getRegionServerSpaceQuotaManager, getRegionsInTransitionInRS, getReplicationSinkService, getReplicationSourceService, getRootDir, getRpcServer, getRSRpcServices, getSecureBulkLoadManager, getStartcode, getTableDescriptors, getThreadWakeFrequency, getWAL, getWALFileSystem, getWalGroupsReplicationStatus, getWalRoller, getWALRootDir, getWALs, handleReportForDutyResponse, initializeMemStoreChunkCreator, isAborted, isClusterUp, isOnline, isShutDown, isStopped, isStopping, kill, movedRegionCleanerPeriod, onConfigurationChange, postOpenDeployTasks, regionLock, remoteProcedureComplete, removeRegion, reportFileArchivalForQuotas, reportRegionSizesForQuotas, reportRegionStateTransition, sendShutdow
 nInterrupt, setupClusterConnection, stop, toString, tryRegionServerReport, unassign, updateConfiguration, updateRegionFavoredNodesMapping, waitForServerOnline, walRollRequestFinished</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.util.HasThread">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.util.HasThread</h3>
+<code>getName, getThread, interrupt, isAlive, isInterrupted, join, join, join, setDaemon, setName, setPriority, setUncaughtExceptionHandler, start</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.MasterServices">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.master.MasterServices</h3>
+<code>getExecutorService, getTableDescriptors, isClusterUp</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Server">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.Server</h3>
+<code>createConnection, getChoreService, getClusterConnection, getConfiguration, getConnection, getCoordinatedStateManager, getFileSystem, getMetaTableLocator, isStopping</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.Abortable</h3>
+<code>isAborted</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Stoppable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.Stoppable</h3>
+<code>isStopped</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="HMasterForTest-org.apache.hadoop.conf.Configuration-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>HMasterForTest</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html#line.113">HMasterForTest</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+                      org.apache.zookeeper.KeeperException</pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<dd><code>org.apache.zookeeper.KeeperException</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createAssignmentManager</h4>
+<pre>protected&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html#line.118">createAssignmentManager</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>createAssignmentManager</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.master.HMaster</code></dd>
+</dl>
+</li>
+</ul>
+<a name="createServerManager-org.apache.hadoop.hbase.master.MasterServices-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>createServerManager</h4>
+<pre>protected&nbsp;org.apache.hadoop.hbase.master.ServerManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html#line.123">createServerManager</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)
+                                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>createServerManager</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.master.HMaster</code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[51/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
Published site at 130057f13774f6b213cdb06952c805a29d59396e.


Project: http://git-wip-us.apache.org/repos/asf/hbase-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase-site/commit/68eae623
Tree: http://git-wip-us.apache.org/repos/asf/hbase-site/tree/68eae623
Diff: http://git-wip-us.apache.org/repos/asf/hbase-site/diff/68eae623

Branch: refs/heads/asf-site
Commit: 68eae6230f127b69a3dd4f5dd11907a95f162e42
Parents: 7339881
Author: jenkins <bu...@apache.org>
Authored: Thu Nov 15 14:54:22 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Thu Nov 15 14:54:22 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    4 +-
 apidocs/org/apache/hadoop/hbase/AuthUtil.html   |    2 +-
 .../apache/hadoop/hbase/client/Consistency.html |    4 +-
 .../hadoop/hbase/client/IsolationLevel.html     |    4 +-
 .../hadoop/hbase/client/Scan.ReadType.html      |    4 +-
 .../hadoop/hbase/filter/Filter.ReturnCode.html  |    4 +-
 .../org/apache/hadoop/hbase/AuthUtil.html       |    2 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       | 6844 ++++++++----------
 checkstyle.rss                                  |   90 +-
 coc.html                                        |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/allclasses-frame.html                |    7 +-
 devapidocs/allclasses-noframe.html              |    7 +-
 devapidocs/constant-values.html                 |    4 +-
 devapidocs/index-all.html                       |  562 +-
 .../org/apache/hadoop/hbase/AuthUtil.html       |    2 +-
 .../hadoop/hbase/backup/package-tree.html       |    2 +-
 .../org/apache/hadoop/hbase/class-use/Cell.html |   12 +-
 .../hadoop/hbase/class-use/TableName.html       |  385 +-
 .../apache/hadoop/hbase/client/Consistency.html |    4 +-
 .../hadoop/hbase/client/IsolationLevel.html     |    4 +-
 .../hadoop/hbase/client/class-use/Result.html   |    2 +-
 .../hadoop/hbase/client/class-use/Table.html    |    2 +-
 .../hadoop/hbase/client/package-tree.html       |   24 +-
 .../class-use/DeserializationException.html     |   12 +-
 .../hadoop/hbase/executor/package-tree.html     |    2 +-
 .../hadoop/hbase/filter/package-tree.html       |    8 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    8 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |    2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    4 +-
 .../master/assignment/CloseRegionProcedure.html |   16 +-
 .../master/assignment/OpenRegionProcedure.html  |   16 +-
 .../assignment/RegionRemoteProcedureBase.html   |   61 +-
 .../hbase/master/balancer/package-tree.html     |    2 +-
 .../hadoop/hbase/master/package-tree.html       |    4 +-
 .../procedure/class-use/MasterProcedureEnv.html |    8 +-
 .../hbase/master/procedure/package-tree.html    |    4 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   18 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    4 +-
 .../hadoop/hbase/quotas/package-tree.html       |    6 +-
 .../hbase/regionserver/class-use/Region.html    |    2 +-
 .../hadoop/hbase/regionserver/package-tree.html |   16 +-
 .../regionserver/querymatcher/package-tree.html |    2 +-
 .../hadoop/hbase/rest/model/package-tree.html   |    2 +-
 .../hbase/security/access/AccessChecker.html    |   12 +-
 .../security/access/AccessControlFilter.html    |   12 +-
 .../security/access/AccessControlLists.html     |  244 +-
 .../security/access/AccessControlUtil.html      |  168 +-
 .../access/AccessController.OpType.html         |   30 +-
 .../hbase/security/access/AccessController.html |  252 +-
 .../access/AuthManager.PermissionCache.html     |  362 +
 .../hbase/security/access/AuthManager.html      | 1134 +++
 .../hbase/security/access/AuthResult.html       |    4 +-
 .../CoprocessorWhitelistMasterObserver.html     |    4 +-
 .../hbase/security/access/GlobalPermission.html |  404 ++
 .../security/access/NamespacePermission.html    |  564 ++
 .../security/access/Permission.Action.html      |   24 +-
 .../hbase/security/access/Permission.Scope.html |  420 ++
 .../hbase/security/access/Permission.html       |  153 +-
 .../security/access/SecureBulkLoadEndpoint.html |    4 +-
 .../access/ShadedAccessControlUtil.html         |   70 +-
 .../TableAuthManager.PermissionCache.html       |  428 --
 .../hbase/security/access/TableAuthManager.html | 1290 ----
 .../hbase/security/access/TablePermission.html  |  457 +-
 .../hbase/security/access/UserPermission.html   |  385 +-
 .../security/access/ZKPermissionWatcher.html    |   14 +-
 .../class-use/AccessControlFilter.Strategy.html |    2 +-
 .../class-use/AuthManager.PermissionCache.html  |  208 +
 .../security/access/class-use/AuthManager.html  |  249 +
 .../access/class-use/GlobalPermission.html      |  197 +
 .../access/class-use/NamespacePermission.html   |  186 +
 .../access/class-use/Permission.Action.html     |  340 +-
 .../access/class-use/Permission.Scope.html      |  210 +
 .../security/access/class-use/Permission.html   |  124 +-
 .../TableAuthManager.PermissionCache.html       |  227 -
 .../access/class-use/TableAuthManager.html      |  249 -
 .../access/class-use/TablePermission.html       |  273 +-
 .../access/class-use/UserPermission.html        |  122 +-
 .../access/class-use/ZKPermissionWatcher.html   |    4 +-
 .../hbase/security/access/package-frame.html    |    7 +-
 .../hbase/security/access/package-summary.html  |   41 +-
 .../hbase/security/access/package-tree.html     |   16 +-
 .../hbase/security/access/package-use.html      |   34 +-
 .../hadoop/hbase/security/class-use/User.html   |  138 +-
 .../hadoop/hbase/security/package-tree.html     |    2 +-
 ...estoreSnapshotHelper.RestoreMetaChanges.html |   38 +-
 .../hbase/snapshot/RestoreSnapshotHelper.html   |   76 +-
 .../hadoop/hbase/thrift/package-tree.html       |    2 +-
 .../hadoop/hbase/util/class-use/ByteRange.html  |    2 +-
 .../hadoop/hbase/util/class-use/Pair.html       |    2 +-
 .../apache/hadoop/hbase/util/package-tree.html  |    8 +-
 .../hbase/zookeeper/class-use/ZKWatcher.html    |   18 +-
 devapidocs/overview-tree.html                   |   14 +-
 .../org/apache/hadoop/hbase/AuthUtil.html       |    2 +-
 .../org/apache/hadoop/hbase/Version.html        |    4 +-
 .../encoding/RowIndexSeekerV1.SeekerState.html  |    2 +-
 .../hbase/io/encoding/RowIndexSeekerV1.html     |    2 +-
 .../master/assignment/CloseRegionProcedure.html |    2 +-
 .../master/assignment/OpenRegionProcedure.html  |    2 +-
 .../assignment/RegionRemoteProcedureBase.html   |  148 +-
 .../access/AccessChecker.InputUser.html         |   24 +-
 .../hbase/security/access/AccessChecker.html    |   24 +-
 .../access/AccessControlFilter.Strategy.html    |   16 +-
 .../security/access/AccessControlFilter.html    |   16 +-
 .../security/access/AccessControlLists.html     | 1462 ++--
 .../security/access/AccessControlUtil.html      | 1298 ++--
 .../access/AccessController.OpType.html         | 4300 +++++------
 .../hbase/security/access/AccessController.html | 4300 +++++------
 .../access/AuthManager.PermissionCache.html     |  680 ++
 .../hbase/security/access/AuthManager.html      |  680 ++
 .../hbase/security/access/GlobalPermission.html |  139 +
 .../security/access/NamespacePermission.html    |  193 +
 .../security/access/Permission.Action.html      |  396 +-
 .../hbase/security/access/Permission.Scope.html |  316 +
 .../hbase/security/access/Permission.html       |  396 +-
 .../access/ShadedAccessControlUtil.html         |  304 +-
 .../TableAuthManager.PermissionCache.html       |  859 ---
 .../hbase/security/access/TableAuthManager.html |  859 ---
 .../hbase/security/access/TablePermission.html  |  649 +-
 .../hbase/security/access/UserPermission.html   |  289 +-
 .../security/access/ZKPermissionWatcher.html    |    6 +-
 ...estoreSnapshotHelper.RestoreMetaChanges.html | 1640 ++---
 .../hbase/snapshot/RestoreSnapshotHelper.html   | 1640 ++---
 ...Utils.CompletedSnaphotDirectoriesFilter.html |    8 +-
 .../snapshot/SnapshotDescriptionUtils.html      |    8 +-
 downloads.html                                  |    4 +-
 export_control.html                             |    4 +-
 index.html                                      |    4 +-
 integration.html                                |    4 +-
 issue-tracking.html                             |    4 +-
 license.html                                    |    4 +-
 mail-lists.html                                 |    4 +-
 metrics.html                                    |    4 +-
 old_news.html                                   |    4 +-
 plugin-management.html                          |    4 +-
 plugins.html                                    |    4 +-
 poweredbyhbase.html                             |    4 +-
 project-info.html                               |    4 +-
 project-reports.html                            |    4 +-
 project-summary.html                            |    4 +-
 pseudo-distributed.html                         |    4 +-
 replication.html                                |    4 +-
 resources.html                                  |    4 +-
 source-repository.html                          |    4 +-
 sponsors.html                                   |    4 +-
 supportingprojects.html                         |    4 +-
 team-list.html                                  |    4 +-
 testdevapidocs/allclasses-frame.html            |    4 +
 testdevapidocs/allclasses-noframe.html          |    4 +
 testdevapidocs/index-all.html                   |   50 +-
 .../hadoop/hbase/backup/package-tree.html       |    2 +-
 .../hbase/class-use/HBaseClassTestRule.html     |    4 +
 .../hbase/class-use/HBaseTestingUtility.html    |    4 +
 .../io/encoding/TestDataBlockEncoders.html      |   74 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    2 +-
 .../assignment/TestModifyTableWhileMerging.html |    4 +-
 ...eRegionServers.AssignmentManagerForTest.html |  336 +
 ...dToMultipleRegionServers.HMasterForTest.html |  426 ++
 ...tipleRegionServers.ServerManagerForTest.html |  307 +
 ...stRegionAssignedToMultipleRegionServers.html |  467 ++
 .../master/assignment/TestRegionBypass.html     |    4 +-
 ...eRegionServers.AssignmentManagerForTest.html |  125 +
 ...dToMultipleRegionServers.HMasterForTest.html |  125 +
 ...tipleRegionServers.ServerManagerForTest.html |  125 +
 ...stRegionAssignedToMultipleRegionServers.html |  125 +
 .../hbase/master/assignment/package-frame.html  |    4 +
 .../master/assignment/package-summary.html      |   16 +
 .../hbase/master/assignment/package-tree.html   |    8 +
 .../org/apache/hadoop/hbase/package-tree.html   |   10 +-
 .../hadoop/hbase/procedure/package-tree.html    |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    4 +-
 .../hadoop/hbase/regionserver/package-tree.html |    4 +-
 ...ontroller.MyShellBasedUnixGroupsMapping.html |    6 +-
 .../TestAccessController.PingCoprocessor.html   |   20 +-
 .../security/access/TestAccessController.html   |   96 +-
 .../security/access/TestAccessController3.html  |    2 +-
 .../security/access/TestNamespaceCommands.html  |   12 +-
 .../access/TestRpcAccessChecks.Action.html      |    4 +-
 .../security/access/TestRpcAccessChecks.html    |   32 +-
 .../security/access/TestTablePermissions.html   |   20 +-
 .../access/TestZKPermissionWatcher.html         |   28 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 testdevapidocs/overview-tree.html               |    8 +
 .../io/encoding/TestDataBlockEncoders.html      |  781 +-
 ...eRegionServers.AssignmentManagerForTest.html |  252 +
 ...dToMultipleRegionServers.HMasterForTest.html |  252 +
 ...tipleRegionServers.ServerManagerForTest.html |  252 +
 ...stRegionAssignedToMultipleRegionServers.html |  252 +
 .../hbase/rsgroup/TestRSGroupsWithACL.html      |    8 +-
 ...cessController.BulkLoadAccessTestAction.html | 3760 +++++-----
 .../TestAccessController.BulkLoadHelper.html    | 3760 +++++-----
 ...ontroller.MyShellBasedUnixGroupsMapping.html | 3760 +++++-----
 .../TestAccessController.PingCoprocessor.html   | 3760 +++++-----
 ...tAccessController.TestTableDDLProcedure.html | 3760 +++++-----
 .../security/access/TestAccessController.html   | 3760 +++++-----
 ...estAccessController2.MyAccessController.html |   12 +-
 .../security/access/TestAccessController2.html  |   12 +-
 ...ccessController3.FaultyAccessController.html |    2 +-
 .../security/access/TestAccessController3.html  |    2 +-
 .../security/access/TestNamespaceCommands.html  |  588 +-
 .../access/TestRpcAccessChecks.Action.html      |  426 +-
 .../TestRpcAccessChecks.DummyCpService.html     |  426 +-
 .../security/access/TestRpcAccessChecks.html    |  426 +-
 .../security/access/TestTablePermissions.html   |  458 +-
 .../access/TestZKPermissionWatcher.html         |  264 +-
 211 files changed, 36111 insertions(+), 31512 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 5b1f24d..d80b085 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -611,7 +611,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 9eeb863..82c7f38 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20181114143300+00'00')
-/CreationDate (D:20181114144901+00'00')
+/ModDate (D:20181115143421+00'00')
+/CreationDate (D:20181115145053+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/apidocs/org/apache/hadoop/hbase/AuthUtil.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/AuthUtil.html b/apidocs/org/apache/hadoop/hbase/AuthUtil.html
index 30f1281..bffaedf 100644
--- a/apidocs/org/apache/hadoop/hbase/AuthUtil.html
+++ b/apidocs/org/apache/hadoop/hbase/AuthUtil.html
@@ -152,7 +152,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  an example of configuring a user of this Auth Chore to run on a secure cluster.
  <pre>
  </pre>
- This class will be internal use only from 2.2.0 version, and will transparently work
+ This class will be internal used only from 2.2.0 version, and will transparently work
  for kerberized applications. For more, please refer
  <a href="http://hbase.apache.org/book.html#hbase.secure.configuration">Client-side Configuration for Secure Operation</a></div>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/apidocs/org/apache/hadoop/hbase/client/Consistency.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/Consistency.html b/apidocs/org/apache/hadoop/hbase/client/Consistency.html
index 0a89ce2..95c7156 100644
--- a/apidocs/org/apache/hadoop/hbase/client/Consistency.html
+++ b/apidocs/org/apache/hadoop/hbase/client/Consistency.html
@@ -253,7 +253,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Consistency.html#line.39">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Consistency.html#line.44">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -273,7 +273,7 @@ for (Consistency c : Consistency.values())
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Consistency.html#line.39">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Consistency.html#line.44">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/apidocs/org/apache/hadoop/hbase/client/IsolationLevel.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/IsolationLevel.html b/apidocs/org/apache/hadoop/hbase/client/IsolationLevel.html
index 10438f1..276c63d 100644
--- a/apidocs/org/apache/hadoop/hbase/client/IsolationLevel.html
+++ b/apidocs/org/apache/hadoop/hbase/client/IsolationLevel.html
@@ -256,7 +256,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/IsolationLevel.html#line.46">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/IsolationLevel.html#line.57">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -276,7 +276,7 @@ for (IsolationLevel c : IsolationLevel.values())
 <ul class="blockList">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/IsolationLevel.html#line.46">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/IsolationLevel.html#line.57">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/apidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html b/apidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html
index 2a74fd2..2e15a76 100644
--- a/apidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html
+++ b/apidocs/org/apache/hadoop/hbase/client/Scan.ReadType.html
@@ -249,7 +249,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.41">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.48">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -269,7 +269,7 @@ for (Scan.ReadType c : Scan.ReadType.values())
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.41">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html#line.48">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/apidocs/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html b/apidocs/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html
index 56f8c23..e149d8e 100644
--- a/apidocs/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html
+++ b/apidocs/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html
@@ -324,7 +324,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html#line.37">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html#line.41">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -344,7 +344,7 @@ for (Filter.ReturnCode c : Filter.ReturnCode.values())
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html#line.37">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html#line.41">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/apidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html b/apidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html
index 30bba22..049b054 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html
@@ -76,7 +76,7 @@
 <span class="sourceLineNo">068</span> * an example of configuring a user of this Auth Chore to run on a secure cluster.<a name="line.68"></a>
 <span class="sourceLineNo">069</span> * &lt;pre&gt;<a name="line.69"></a>
 <span class="sourceLineNo">070</span> * &lt;/pre&gt;<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * This class will be internal use only from 2.2.0 version, and will transparently work<a name="line.71"></a>
+<span class="sourceLineNo">071</span> * This class will be internal used only from 2.2.0 version, and will transparently work<a name="line.71"></a>
 <span class="sourceLineNo">072</span> * for kerberized applications. For more, please refer<a name="line.72"></a>
 <span class="sourceLineNo">073</span> * &lt;a href="http://hbase.apache.org/book.html#hbase.secure.configuration"&gt;Client-side Configuration for Secure Operation&lt;/a&gt;<a name="line.73"></a>
 <span class="sourceLineNo">074</span> *<a name="line.74"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 37aaa1e..289f51a 100644
--- a/book.html
+++ b/book.html
@@ -41318,7 +41318,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-11-14 14:33:00 UTC
+Last updated 2018-11-15 14:34:21 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 9d5eba7..d4ea2ef 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -316,7 +316,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 


[02/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html
index 5062e9b..23b4be7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html
@@ -282,7 +282,7 @@
 <span class="sourceLineNo">274</span>  public static void tearDownAfterClass() throws Exception {<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    cleanUp();<a name="line.275"></a>
 <span class="sourceLineNo">276</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int total = TableAuthManager.getTotalRefCount();<a name="line.277"></a>
+<span class="sourceLineNo">277</span>    int total = AuthManager.getTotalRefCount();<a name="line.277"></a>
 <span class="sourceLineNo">278</span>    assertTrue("Unexpected reference count: " + total, total == 0);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>  }<a name="line.279"></a>
 <span class="sourceLineNo">280</span><a name="line.280"></a>
@@ -1642,12 +1642,12 @@
 <span class="sourceLineNo">1634</span>      }<a name="line.1634"></a>
 <span class="sourceLineNo">1635</span><a name="line.1635"></a>
 <span class="sourceLineNo">1636</span>      UserPermission ownerperm =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>          new UserPermission(Bytes.toBytes(USER_OWNER.getName()), tableName, null, Action.values());<a name="line.1637"></a>
+<span class="sourceLineNo">1637</span>          new UserPermission(USER_OWNER.getName(), tableName, Action.values());<a name="line.1637"></a>
 <span class="sourceLineNo">1638</span>      assertTrue("Owner should have all permissions on table",<a name="line.1638"></a>
 <span class="sourceLineNo">1639</span>        hasFoundUserPermission(ownerperm, perms));<a name="line.1639"></a>
 <span class="sourceLineNo">1640</span><a name="line.1640"></a>
 <span class="sourceLineNo">1641</span>      User user = User.createUserForTesting(TEST_UTIL.getConfiguration(), "user", new String[0]);<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      byte[] userName = Bytes.toBytes(user.getShortName());<a name="line.1642"></a>
+<span class="sourceLineNo">1642</span>      String userName = user.getShortName();<a name="line.1642"></a>
 <span class="sourceLineNo">1643</span><a name="line.1643"></a>
 <span class="sourceLineNo">1644</span>      UserPermission up =<a name="line.1644"></a>
 <span class="sourceLineNo">1645</span>          new UserPermission(userName, tableName, family1, qualifier, Permission.Action.READ);<a name="line.1645"></a>
@@ -1733,7 +1733,7 @@
 <span class="sourceLineNo">1725</span>      }<a name="line.1725"></a>
 <span class="sourceLineNo">1726</span><a name="line.1726"></a>
 <span class="sourceLineNo">1727</span>      UserPermission newOwnerperm =<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          new UserPermission(Bytes.toBytes(newOwner.getName()), tableName, null, Action.values());<a name="line.1728"></a>
+<span class="sourceLineNo">1728</span>          new UserPermission(newOwner.getName(), tableName, Action.values());<a name="line.1728"></a>
 <span class="sourceLineNo">1729</span>      assertTrue("New owner should have all permissions on table",<a name="line.1729"></a>
 <span class="sourceLineNo">1730</span>        hasFoundUserPermission(newOwnerperm, perms));<a name="line.1730"></a>
 <span class="sourceLineNo">1731</span>    } finally {<a name="line.1731"></a>
@@ -1757,1888 +1757,1898 @@
 <span class="sourceLineNo">1749</span><a name="line.1749"></a>
 <span class="sourceLineNo">1750</span>    Collection&lt;String&gt; superUsers = Superusers.getSuperUsers();<a name="line.1750"></a>
 <span class="sourceLineNo">1751</span>    List&lt;UserPermission&gt; adminPerms = new ArrayList&lt;&gt;(superUsers.size() + 1);<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    adminPerms.add(new UserPermission(Bytes.toBytes(USER_ADMIN.getShortName()),<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      AccessControlLists.ACL_TABLE_NAME, null, null, Bytes.toBytes("ACRW")));<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span><a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    for(String user: superUsers) {<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      adminPerms.add(new UserPermission(Bytes.toBytes(user), AccessControlLists.ACL_TABLE_NAME,<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>          null, null, Action.values()));<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    }<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    assertTrue("Only super users, global users and user admin has permission on table hbase:acl " +<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        "per setup", perms.size() == 5 + superUsers.size() &amp;&amp;<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>        hasFoundUserPermission(adminPerms, perms));<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  }<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span><a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  /** global operations */<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private void verifyGlobal(AccessTestAction action) throws Exception {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    verifyAllowed(action, SUPERUSER);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span><a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_NONE, USER_RO);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span><a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>  @Test<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>  public void testCheckPermissions() throws Exception {<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    // --------------------------------------<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    // test global permissions<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>    AccessTestAction globalAdmin = new AccessTestAction() {<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      @Override<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>      public Void run() throws Exception {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.ADMIN);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        return null;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      }<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    };<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    // verify that only superuser can admin<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    verifyGlobal(globalAdmin);<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span><a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>    // --------------------------------------<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    // test multiple permissions<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    AccessTestAction globalReadWrite = new AccessTestAction() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      public Void run() throws Exception {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.READ, Permission.Action.WRITE);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>        return null;<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      }<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    };<a name="line.1793"></a>
+<span class="sourceLineNo">1752</span>    adminPerms.add(new UserPermission(USER_ADMIN.getShortName(), Bytes.toBytes("ACRW")));<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>    for(String user: superUsers) {<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      // Global permission<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      adminPerms.add(new UserPermission(user, Action.values()));<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    }<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    assertTrue("Only super users, global users and user admin has permission on table hbase:acl " +<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        "per setup", perms.size() == 5 + superUsers.size() &amp;&amp;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>        hasFoundUserPermission(adminPerms, perms));<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  /** global operations */<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  private void verifyGlobal(AccessTestAction action) throws Exception {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    verifyAllowed(action, SUPERUSER);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span><a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_NONE, USER_RO);<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span><a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>  @Test<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>  public void testCheckPermissions() throws Exception {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    // --------------------------------------<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    // test global permissions<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    AccessTestAction globalAdmin = new AccessTestAction() {<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      @Override<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>      public Void run() throws Exception {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.ADMIN);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>        return null;<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    };<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    // verify that only superuser can admin<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    verifyGlobal(globalAdmin);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    // --------------------------------------<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    // test multiple permissions<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    AccessTestAction globalReadWrite = new AccessTestAction() {<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      @Override<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>      public Void run() throws Exception {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.READ, Permission.Action.WRITE);<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>        return null;<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    };<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span><a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    verifyGlobal(globalReadWrite);<a name="line.1793"></a>
 <span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    verifyGlobal(globalReadWrite);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span><a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    // --------------------------------------<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    // table/column/qualifier level permissions<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    final byte[] TEST_Q1 = Bytes.toBytes("q1");<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    final byte[] TEST_Q2 = Bytes.toBytes("q2");<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span><a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    User userTable = User.createUserForTesting(conf, "user_check_perms_table", new String[0]);<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    User userColumn = User.createUserForTesting(conf, "user_check_perms_family", new String[0]);<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    User userQualifier = User.createUserForTesting(conf, "user_check_perms_q", new String[0]);<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span><a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    grantOnTable(TEST_UTIL, userTable.getShortName(),<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      TEST_TABLE, null, null,<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      Permission.Action.READ);<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    grantOnTable(TEST_UTIL, userColumn.getShortName(),<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>      TEST_TABLE, TEST_FAMILY, null,<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>      Permission.Action.READ);<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>    grantOnTable(TEST_UTIL, userQualifier.getShortName(),<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>      Permission.Action.READ);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span><a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>    try {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      AccessTestAction tableRead = new AccessTestAction() {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>        @Override<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        public Void run() throws Exception {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, null, null, Permission.Action.READ);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>          return null;<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      };<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      AccessTestAction columnRead = new AccessTestAction() {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        @Override<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>        public Void run() throws Exception {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ);<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          return null;<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      };<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>      AccessTestAction qualifierRead = new AccessTestAction() {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>        @Override<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        public Void run() throws Exception {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ);<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>          return null;<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>        }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>      };<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>      AccessTestAction multiQualifierRead = new AccessTestAction() {<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        @Override<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        public Void run() throws Exception {<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ),<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q2, Permission.Action.READ), });<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>          return null;<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        }<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      };<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>      AccessTestAction globalAndTableRead = new AccessTestAction() {<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>        @Override<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        public Void run() throws Exception {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>              new Permission(Permission.Action.READ),<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>              new TablePermission(TEST_TABLE, null, (byte[]) null, Permission.Action.READ), });<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>          return null;<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>        }<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      };<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span><a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      AccessTestAction noCheck = new AccessTestAction() {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>        @Override<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        public Void run() throws Exception {<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[0]);<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>          return null;<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        }<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      };<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span><a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      verifyAllowed(tableRead, SUPERUSER, userTable);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>      verifyDenied(tableRead, userColumn, userQualifier);<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span><a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      verifyAllowed(columnRead, SUPERUSER, userTable, userColumn);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      verifyDenied(columnRead, userQualifier);<a name="line.1873"></a>
+<span class="sourceLineNo">1795</span>    // --------------------------------------<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    // table/column/qualifier level permissions<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>    final byte[] TEST_Q1 = Bytes.toBytes("q1");<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    final byte[] TEST_Q2 = Bytes.toBytes("q2");<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    User userTable = User.createUserForTesting(conf, "user_check_perms_table", new String[0]);<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    User userColumn = User.createUserForTesting(conf, "user_check_perms_family", new String[0]);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    User userQualifier = User.createUserForTesting(conf, "user_check_perms_q", new String[0]);<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span><a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>    grantOnTable(TEST_UTIL, userTable.getShortName(),<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>      TEST_TABLE, null, null,<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      Permission.Action.READ);<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    grantOnTable(TEST_UTIL, userColumn.getShortName(),<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      TEST_TABLE, TEST_FAMILY, null,<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>      Permission.Action.READ);<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    grantOnTable(TEST_UTIL, userQualifier.getShortName(),<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      Permission.Action.READ);<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span><a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    try {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>      AccessTestAction tableRead = new AccessTestAction() {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>        @Override<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        public Void run() throws Exception {<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, null, null, Permission.Action.READ);<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>          return null;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>        }<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>      };<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span><a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>      AccessTestAction columnRead = new AccessTestAction() {<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>        @Override<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        public Void run() throws Exception {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ);<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>          return null;<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>        }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      };<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      AccessTestAction qualifierRead = new AccessTestAction() {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        @Override<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        public Void run() throws Exception {<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ);<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          return null;<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>      };<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span><a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>      AccessTestAction multiQualifierRead = new AccessTestAction() {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>        @Override<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>        public Void run() throws Exception {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ),<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q2, Permission.Action.READ), });<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          return null;<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>        }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      };<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span><a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>      AccessTestAction globalAndTableRead = new AccessTestAction() {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>        @Override<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>        public Void run() throws Exception {<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>              new Permission(Permission.Action.READ),<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>              new TablePermission(TEST_TABLE, null, (byte[]) null, Permission.Action.READ), });<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>          return null;<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      };<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span><a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      AccessTestAction noCheck = new AccessTestAction() {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>        @Override<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>        public Void run() throws Exception {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[0]);<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>          return null;<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>        }<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      };<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>      verifyAllowed(tableRead, SUPERUSER, userTable);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      verifyDenied(tableRead, userColumn, userQualifier);<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span><a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      verifyAllowed(columnRead, SUPERUSER, userTable, userColumn);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>      verifyDenied(columnRead, userQualifier);<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span><a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      verifyAllowed(qualifierRead, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1873"></a>
 <span class="sourceLineNo">1874</span><a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      verifyAllowed(qualifierRead, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span><a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>      verifyAllowed(multiQualifierRead, SUPERUSER, userTable, userColumn);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      verifyDenied(multiQualifierRead, userQualifier);<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span><a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      verifyAllowed(globalAndTableRead, SUPERUSER);<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>      verifyDenied(globalAndTableRead, userTable, userColumn, userQualifier);<a name="line.1881"></a>
+<span class="sourceLineNo">1875</span>      verifyAllowed(multiQualifierRead, SUPERUSER, userTable, userColumn);<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      verifyDenied(multiQualifierRead, userQualifier);<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span><a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      verifyAllowed(globalAndTableRead, SUPERUSER);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      verifyDenied(globalAndTableRead, userTable, userColumn, userQualifier);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span><a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>      verifyAllowed(noCheck, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1881"></a>
 <span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>      verifyAllowed(noCheck, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span><a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>      // --------------------------------------<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      // test family level multiple permissions<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      AccessTestAction familyReadWrite = new AccessTestAction() {<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>        @Override<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        public Void run() throws Exception {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ,<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>            Permission.Action.WRITE);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          return null;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        }<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>      };<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span><a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      verifyAllowed(familyReadWrite, SUPERUSER, USER_OWNER, USER_CREATE, USER_RW);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      verifyDenied(familyReadWrite, USER_NONE, USER_RO);<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>      // --------------------------------------<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      // check for wrong table region<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>      CheckPermissionsRequest checkRequest =<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>          CheckPermissionsRequest<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>              .newBuilder()<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>              .addPermission(<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>                AccessControlProtos.Permission<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>                    .newBuilder()<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>                    .setType(AccessControlProtos.Permission.Type.Table)<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>                    .setTablePermission(<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>                      AccessControlProtos.TablePermission.newBuilder()<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>                          .setTableName(ProtobufUtil.toProtoTableName(TEST_TABLE))<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>                          .addAction(AccessControlProtos.Permission.Action.CREATE))).build();<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      Table acl = systemUserConnection.getTable(AccessControlLists.ACL_TABLE_NAME);<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      try {<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>        BlockingRpcChannel channel = acl.coprocessorService(new byte[0]);<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        AccessControlService.BlockingInterface protocol =<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>            AccessControlService.newBlockingStub(channel);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        try {<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>          // but ask for TablePermissions for TEST_TABLE<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>          protocol.checkPermissions(null, checkRequest);<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>          fail("this should have thrown CoprocessorException");<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>        } catch (ServiceException ex) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>          // expected<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        }<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>      } finally {<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        acl.close();<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    } finally {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      revokeFromTable(TEST_UTIL, userTable.getShortName(), TEST_TABLE, null, null,<a name="line.1929"></a>
+<span class="sourceLineNo">1883</span>      // --------------------------------------<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>      // test family level multiple permissions<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>      AccessTestAction familyReadWrite = new AccessTestAction() {<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>        @Override<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        public Void run() throws Exception {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>            Permission.Action.WRITE);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>          return null;<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        }<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      };<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span><a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>      verifyAllowed(familyReadWrite, SUPERUSER, USER_OWNER, USER_CREATE, USER_RW);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      verifyDenied(familyReadWrite, USER_NONE, USER_RO);<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span><a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      // --------------------------------------<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>      // check for wrong table region<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>      CheckPermissionsRequest checkRequest =<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>          CheckPermissionsRequest<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>              .newBuilder()<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>              .addPermission(<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>                AccessControlProtos.Permission<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>                    .newBuilder()<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>                    .setType(AccessControlProtos.Permission.Type.Table)<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>                    .setTablePermission(<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>                      AccessControlProtos.TablePermission.newBuilder()<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>                          .setTableName(ProtobufUtil.toProtoTableName(TEST_TABLE))<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>                          .addAction(AccessControlProtos.Permission.Action.CREATE))).build();<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>      Table acl = systemUserConnection.getTable(AccessControlLists.ACL_TABLE_NAME);<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      try {<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>        BlockingRpcChannel channel = acl.coprocessorService(new byte[0]);<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>        AccessControlService.BlockingInterface protocol =<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>            AccessControlService.newBlockingStub(channel);<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>        try {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>          // but ask for TablePermissions for TEST_TABLE<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>          protocol.checkPermissions(null, checkRequest);<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>          fail("this should have thrown CoprocessorException");<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>        } catch (ServiceException ex) {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>          // expected<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>        }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      } finally {<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>        acl.close();<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>      }<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span><a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    } finally {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      revokeFromTable(TEST_UTIL, userTable.getShortName(), TEST_TABLE, null, null,<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        Permission.Action.READ);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      revokeFromTable(TEST_UTIL, userColumn.getShortName(), TEST_TABLE, TEST_FAMILY, null,<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>        Permission.Action.READ);<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      revokeFromTable(TEST_UTIL, userColumn.getShortName(), TEST_TABLE, TEST_FAMILY, null,<a name="line.1931"></a>
+<span class="sourceLineNo">1931</span>      revokeFromTable(TEST_UTIL, userQualifier.getShortName(), TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1931"></a>
 <span class="sourceLineNo">1932</span>        Permission.Action.READ);<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      revokeFromTable(TEST_UTIL, userQualifier.getShortName(), TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>        Permission.Action.READ);<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  }<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  @Test<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>  public void testStopRegionServer() throws Exception {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      @Override<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      public Object run() throws Exception {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        ACCESS_CONTROLLER.preStopRegionServer(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>        return null;<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      }<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    };<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>  }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span><a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>  @Test<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>  public void testRollWALWriterRequest() throws Exception {<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>      @Override<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>      public Object run() throws Exception {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>        ACCESS_CONTROLLER.preRollWALWriterRequest(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>        return null;<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      }<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>    };<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span><a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>  }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span><a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  @Test<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>  public void testOpenRegion() throws Exception {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>      @Override<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>      public Object run() throws Exception {<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>        ACCESS_CONTROLLER.preOpen(ObserverContextImpl.createAndPrepare(RCP_ENV));<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>        return null;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>      }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    };<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span><a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>  @Test<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>  public void testCloseRegion() throws Exception {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>      @Override<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>      public Object run() throws Exception {<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>        ACCESS_CONTROLLER.preClose(ObserverContextImpl.createAndPrepare(RCP_ENV), false);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>        return null;<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      }<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    };<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>  }<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span><a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>  @Test<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  public void testSnapshot() throws Exception {<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    final HTableDescriptor htd = admin.getTableDescriptor(TEST_TABLE);<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    final SnapshotDescription snapshot = new SnapshotDescription(<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>        TEST_TABLE.getNameAsString() + "-snapshot", TEST_TABLE);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    AccessTestAction snapshotAction = new AccessTestAction() {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>      @Override<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      public Object run() throws Exception {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        ACCESS_CONTROLLER.preSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>          snapshot, htd);<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>        return null;<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>      }<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>    };<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span><a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    AccessTestAction deleteAction = new AccessTestAction() {<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>      @Override<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>      public Object run() throws Exception {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        ACCESS_CONTROLLER.preDeleteSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          snapshot);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>        return null;<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>      }<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    };<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span><a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    AccessTestAction restoreAction = new AccessTestAction() {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>      @Override<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      public Object run() throws Exception {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>        ACCESS_CONTROLLER.preRestoreSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>          snapshot, htd);<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>        return null;<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      }<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    };<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span><a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    AccessTestAction cloneAction = new AccessTestAction() {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      @Override<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>      public Object run() throws Exception {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>        ACCESS_CONTROLLER.preCloneSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>          snapshot, null);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>        return null;<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      }<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>    };<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span><a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    verifyAllowed(snapshotAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    verifyDenied(snapshotAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    verifyAllowed(cloneAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    verifyDenied(deleteAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    verifyAllowed(restoreAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    verifyDenied(restoreAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span><a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    verifyAllowed(deleteAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    verifyDenied(cloneAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  }<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span><a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>  @Test<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>  public void testSnapshotWithOwner() throws Exception {<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>    final HTableDescriptor htd = admin.getTableDescriptor(TEST_TABLE);<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>    final SnapshotDescription snapshot = new SnapshotDescription(<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        TEST_TABLE.getNameAsString() + "-snapshot", TEST_TABLE, null, USER_OWNER.getName());<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span><a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    AccessTestAction snapshotAction = new AccessTestAction() {<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>      @Override<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      public Object run() throws Exception {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>        ACCESS_CONTROLLER.preSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>            snapshot, htd);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>        return null;<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    };<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    verifyAllowed(snapshotAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    verifyDenied(snapshotAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span><a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    AccessTestAction deleteAction = new AccessTestAction() {<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      @Override<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      public Object run() throws Exception {<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        ACCESS_CONTROLLER.preDeleteSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>          snapshot);<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        return null;<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    };<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>    verifyAllowed(deleteAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    verifyDenied(deleteAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span><a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    AccessTestAction restoreAction = new AccessTestAction() {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      @Override<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      public Object run() throws Exception {<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>        ACCESS_CONTROLLER.preRestoreSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          snapshot, htd);<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>        return null;<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      }<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    };<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    verifyAllowed(restoreAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    verifyDenied(restoreAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>    AccessTestAction cloneAction = new AccessTestAction() {<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>      @Override<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>      public Object run() throws Exception {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>        ACCESS_CONTROLLER.preCloneSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>          snapshot, htd);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        return null;<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    };<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    verifyAllowed(cloneAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN, USER_OWNER);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    verifyDenied(cloneAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span><a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>  @Test<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>  public void testGlobalAuthorizationForNewRegisteredRS() throws Exception {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    LOG.debug("Test for global authorization for a new registered RegionServer.");<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    MiniHBaseCluster hbaseCluster = TEST_UTIL.getHBaseCluster();<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>    final Admin admin = TEST_UTIL.getAdmin();<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    HTableDescriptor htd = new HTableDescriptor(TEST_TABLE2);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    htd.addFamily(new HColumnDescriptor(TEST_FAMILY));<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>    createTable(TEST_UTIL, htd);<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span><a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    // Starting a new RegionServer.<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    JVMClusterUtil.RegionServerThread newRsThread = hbaseCluster<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>        .startRegionServer();<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>    final HRegionServer newRs = newRsThread.getRegionServer();<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span><a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>    // Move region to the new RegionServer.<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    List&lt;HRegionLocation&gt; regions;<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>    try (RegionLocator locator = systemUserConnection.getRegionLocator(TEST_TABLE2)) {<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      regions = locator.getAllRegionLocations();<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    }<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    HRegionLocation location = regions.get(0);<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    final HRegionInfo hri = location.getRegionInfo();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    final ServerName server = location.getServerName();<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    try (Table table = systemUserConnection.getTable(TEST_TABLE2)) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      AccessTestAction moveAction = new AccessTestAction() {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        @Override<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>        public Object run() throws Exception {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>          admin.move(hri.getEncodedNameAsBytes(),<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>            Bytes.toBytes(newRs.getServerName().getServerName()));<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          return null;<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>        }<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>      };<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      SUPERUSER.runAs(moveAction);<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span><a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      final int RETRIES_LIMIT = 10;<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>      int retries = 0;<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>      while (newRs.getRegions(TEST_TABLE2).size() &lt; 1 &amp;&amp; retries &lt; RETRIES_LIMIT) {<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        LOG.debug("Waiting for region to be opened. Already retried " + retries<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>            + " times.");<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>        try {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>          Thread.sleep(1000);<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>        } catch (InterruptedException e) {<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>        }<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>        retries++;<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>        if (retries == RETRIES_LIMIT - 1) {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>          fail("Retry exhaust for waiting region to be opened.");<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>        }<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>      }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>      // Verify write permission for user "admin2" who has the global<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>      // permissions.<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>      AccessTestAction putAction = new AccessTestAction() {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>        @Override<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>        public Object run() throws Exception {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>          Put put = new Put(Bytes.toBytes("test"));<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          put.addColumn(TEST_FAMILY, Bytes.toBytes("qual"), Bytes.toBytes("value"));<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>          table.put(put);<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>          return null;<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>        }<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>      };<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>      USER_ADMIN.runAs(putAction);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    }<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span><a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>  @Test<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>  public void testTableDescriptorsEnumeration() throws Exception {<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    User TABLE_ADMIN = User.createUserForTesting(conf, "UserA", new String[0]);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span><a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    // Grant TABLE ADMIN privs<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    grantOnTable(TEST_UTIL, TABLE_ADMIN.getShortName(), TEST_TABLE, null, null,<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>      Permission.Action.ADMIN);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    try {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>      AccessTestAction listTablesAction = new AccessTestAction() {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>        @Override<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>        public Object run() throws Exception {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>          try (Connection conn = ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>              Admin admin = conn.getAdmin()) {<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>            return Arrays.asList(admin.listTables());<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>          }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>        }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>      };<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span><a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>      AccessTestAction getTableDescAction = new AccessTestAction() {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>        @Override<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>        public Object run() throws Exception {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>          try (Connection conn = ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>              Admin admin = conn.getAdmin()) {<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>            return admin.getTableDescriptor(TEST_TABLE);<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>          }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>        }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>      };<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      verifyAllowed(listTablesAction, SUPERUSER, USER_ADMIN, USER_CREATE, USER_OWNER, TABLE_ADMIN,<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>        USER_GROUP_CREATE, USER_GROUP_ADMIN);<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      verifyIfEmptyList(listTablesAction, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>        USER_GROUP_WRITE);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span><a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      verifyAllowed(getTableDescAction, SUPERUSER, USER_ADMIN, USER_CREATE, USER_OWNER,<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        TABLE_ADMIN, USER_GROUP_CREATE, USER_GROUP_ADMIN);<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      verifyDenied(getTableDescAction, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        USER_GROUP_WRITE);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    } finally {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      // Cleanup, revoke TABLE ADMIN privs<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      revokeFromTable(TEST_UTIL, TABLE_ADMIN.getShortName(), TEST_TABLE, null, null,<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        Permission.Action.ADMIN);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    }<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>  }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span><a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>  @Test<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  public void testTableNameEnumeration() throws Exception {<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>    AccessTestAction listTablesAction = new AccessTestAction() {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>      @Override<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      public Object run() throws Exception {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>        Connection unmanagedConnection =<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>            ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>        Admin admin = unmanagedConnection.getAdmin();<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        try {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          return Arrays.asList(admin.listTableNames());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>        } finally {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>          admin.close();<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>          unmanagedConnection.close();<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>        }<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    };<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span><a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>    verifyAllowed(listTablesAction, SUPERUSER, USER_ADMIN, USER_CREATE, USER_OWNER, USER_RW,<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      USER_RO, USER_GROUP_CREATE, USER_GROUP_ADMIN, USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>    verifyIfEmptyList(listTablesAction, USER_NONE);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>  }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span><a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  @Test<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  public void testTableDeletion() throws Exception {<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>    User TABLE_ADMIN = User.createUserForTesting(conf, "TestUser", new String[0]);<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>    createTestTable(tableName);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span><a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>    // Grant TABLE ADMIN privs<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>    grantOnTable(TEST_UTIL, TABLE_ADMIN.getShortName(), tableName, null, null, Permission.Action.ADMIN);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span><a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    AccessTestAction deleteTableAction = new AccessTestAction() {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      @Override<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      public Object run() throws Exception {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        Connection unmanagedConnection =<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>            ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>        Admin admin = unmanagedConnection.getAdmin();<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        try {<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>          deleteTable(TEST_UTIL, admin, tableName);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>        } finally {<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>          admin.close();<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>          unmanagedConnection.close();<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>        }<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>        return null;<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>      }<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>    };<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span><a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    verifyDenied(deleteTableAction, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      USER_GROUP_WRITE);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    verifyAllowed(deleteTableAction, TABLE_ADMIN);<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>  }<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span><a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>  private void createTestTable(TableName tname) throws Exception {<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    createTestTable(tname, TEST_FAMILY);<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>  }<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span><a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>  private void createTestTable(TableName tname, byte[] cf) throws Exception {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    HTableDescriptor htd = new HTableDescriptor(tname);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    HColumnDescriptor hcd = new HColumnDescriptor(cf);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    hcd.setMaxVersions(100);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    htd.addFamily(hcd);<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    htd.setOwner(USER_OWNER);<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    createTable(TEST_UTIL, htd, new byte[][] { Bytes.toBytes("s") });<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>  }<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span><a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>  @Test<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>  public void testNamespaceUserGrant() throws Exception {<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    AccessTestAction getAction = new AccessTestAction() {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      @Override<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      public Object run() throws Exception {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        try(Connection conn = ConnectionFactory.createConnection(conf);<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>            Table t = conn.getTable(TEST_TABLE)) {<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          return t.get(new Get(TEST_ROW));<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>        }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    };<a name="line.2295"></a>
+<span class="sourceLineNo">1933</span>    }<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>  }<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span><a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>  @Test<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  public void testStopRegionServer() throws Exception {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>      @Override<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      public Object run() throws Exception {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>        ACCESS_CONTROLLER.preStopRegionServer(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>        return null;<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>      }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    };<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span><a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>  }<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span><a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>  @Test<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>  public void testRollWALWriterRequest() throws Exception {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>      @Override<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>      public Object run() throws Exception {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        ACCESS_CONTROLLER.preRollWALWriterRequest(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        return null;<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    };<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>  }<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span><a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>  @Test<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>  public void testOpenRegion() throws Exception {<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>      @Override<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>      public Object run() throws Exception {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>        ACCESS_CONTROLLER.preOpen(ObserverContextImpl.createAndPrepare(RCP_ENV));<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>        return null;<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>      }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    };<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span><a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span><a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  @Test<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>  public void testCloseRegion() throws Exception {<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>      @Override<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      public Object run() throws Exception {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        ACCESS_CONTROLLER.preClose(ObserverContextImpl.createAndPrepare(RCP_ENV), false);<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>        return null;<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>      }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    };<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>  }<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>  @Test<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>  public void testSnapshot() throws Exception {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>    final HTableDescriptor htd = admin.getTableDescriptor(TEST_TABLE);<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    final SnapshotDescription snapshot = new SnapshotDescription(<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        TEST_TABLE.getNameAsString() + "-snapshot", TEST_TABLE);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    AccessTestAction snapshotAction = new AccessTestAction() {<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      @Override<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      public Object run() throws Exception {<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        ACCESS_CONTROLLER.preSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>          snapshot, htd);<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        return null;<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>      }<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    };<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span><a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    AccessTestAction deleteAction = new AccessTestAction() {<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>      @Override<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      public Object run() throws Exception {<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>        ACCESS_CONTROLLER.preDeleteSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          snapshot);<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>        return null;<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>      }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>    };<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>    AccessTestAction restoreAction = new AccessTestAction() {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>      @Override<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>      public Object run() throws Exception {<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>        ACCESS_CONTROLLER.preRestoreSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>          snapshot, htd);<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        return null;<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>      }<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>    };<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span><a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>    AccessTestAction cloneAction = new AccessTestAction() {<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>      @Override<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>      public Object run() throws Exception {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>        ACCESS_CONTROLLER.preCloneSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>          snapshot, null);<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>        return null;<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>      }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>    };<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    verifyAllowed(snapshotAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    verifyDenied(snapshotAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span><a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    verifyAllowed(cloneAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>    verifyDenied(deleteAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span><a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    verifyAllowed(restoreAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    verifyDenied(restoreAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span><a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    verifyAllowed(deleteAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    verifyDenied(cloneAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>  @Test<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>  public void testSnaps

<TRUNCATED>

[07/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/security/access/TestTablePermissions.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestTablePermissions.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestTablePermissions.html
index e9217bf..10e2501 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestTablePermissions.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestTablePermissions.html
@@ -224,11 +224,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestTablePermissions.html#checkMultimapEqual-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">checkMultimapEqual</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.TablePermission&gt;&nbsp;first,
-                  org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.TablePermission&gt;&nbsp;second)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestTablePermissions.html#checkMultimapEqual-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">checkMultimapEqual</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.UserPermission&gt;&nbsp;first,
+                  org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.UserPermission&gt;&nbsp;second)</code>&nbsp;</td>
 </tr>
 <tr id="i4" class="altColor">
-<td class="colFirst"><code>private org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.TablePermission&gt;</code></td>
+<td class="colFirst"><code>private org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.UserPermission&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestTablePermissions.html#createPermissions--">createPermissions</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i5" class="rowColor">
@@ -484,7 +484,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testPersistence</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestTablePermissions.html#line.243">testPersistence</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestTablePermissions.html#line.245">testPersistence</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -498,7 +498,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSerialization</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestTablePermissions.html#line.293">testSerialization</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestTablePermissions.html#line.292">testSerialization</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -512,7 +512,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createPermissions</h4>
-<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.TablePermission&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestTablePermissions.html#line.304">createPermissions</a>()</pre>
+<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.UserPermission&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestTablePermissions.html#line.303">createPermissions</a>()</pre>
 </li>
 </ul>
 <a name="checkMultimapEqual-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">
@@ -521,8 +521,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkMultimapEqual</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestTablePermissions.html#line.319">checkMultimapEqual</a>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.TablePermission&gt;&nbsp;first,
-                               org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.TablePermission&gt;&nbsp;second)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestTablePermissions.html#line.319">checkMultimapEqual</a>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.UserPermission&gt;&nbsp;first,
+                               org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.UserPermission&gt;&nbsp;second)</pre>
 </li>
 </ul>
 <a name="testEquals--">
@@ -545,7 +545,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testGlobalPermission</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestTablePermissions.html#line.390">testGlobalPermission</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestTablePermissions.html#line.386">testGlobalPermission</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -559,7 +559,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testAuthManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestTablePermissions.html#line.429">testAuthManager</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestTablePermissions.html#line.426">testAuthManager</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html
index 0c6381d..6d3569c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.48">TestZKPermissionWatcher</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.51">TestZKPermissionWatcher</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Test the reading and writing of access permissions to and from zookeeper.</div>
 </li>
@@ -135,11 +135,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#ABORTABLE">ABORTABLE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private static org.apache.hadoop.hbase.security.access.TableAuthManager</code></td>
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.security.access.AuthManager</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#AUTH_A">AUTH_A</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static org.apache.hadoop.hbase.security.access.TableAuthManager</code></td>
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.security.access.AuthManager</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#AUTH_B">AUTH_B</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -230,7 +230,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.51">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.54">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -239,7 +239,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.54">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.57">LOG</a></pre>
 </li>
 </ul>
 <a name="UTIL">
@@ -248,7 +248,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>UTIL</h4>
-<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.55">UTIL</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.58">UTIL</a></pre>
 </li>
 </ul>
 <a name="AUTH_A">
@@ -257,7 +257,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>AUTH_A</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.security.access.TableAuthManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.56">AUTH_A</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.security.access.AuthManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.59">AUTH_A</a></pre>
 </li>
 </ul>
 <a name="AUTH_B">
@@ -266,7 +266,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>AUTH_B</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.security.access.TableAuthManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.57">AUTH_B</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.security.access.AuthManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.60">AUTH_B</a></pre>
 </li>
 </ul>
 <a name="ABORTABLE">
@@ -275,7 +275,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>ABORTABLE</h4>
-<pre>private static final&nbsp;org.apache.hadoop.hbase.Abortable <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.58">ABORTABLE</a></pre>
+<pre>private static final&nbsp;org.apache.hadoop.hbase.Abortable <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.61">ABORTABLE</a></pre>
 </li>
 </ul>
 <a name="TEST_TABLE">
@@ -284,7 +284,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TEST_TABLE</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.73">TEST_TABLE</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.76">TEST_TABLE</a></pre>
 </li>
 </ul>
 </li>
@@ -301,7 +301,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestZKPermissionWatcher</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.48">TestZKPermissionWatcher</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.51">TestZKPermissionWatcher</a>()</pre>
 </li>
 </ul>
 </li>
@@ -318,7 +318,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>beforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.77">beforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.80">beforeClass</a>()
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -332,7 +332,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>afterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.91">afterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.94">afterClass</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -346,7 +346,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testPermissionsWatcher</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.96">testPermissionsWatcher</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#line.99">testPermissionsWatcher</a>()
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 68397c8..b21ae88 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -141,9 +141,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index 4029df4..fb8c81d 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -600,6 +600,7 @@
 </li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.AssignmentManager (implements org.apache.hadoop.hbase.master.ServerListener)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.AssignmentManagerForTest</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</span></a></li>
 </ul>
@@ -1106,6 +1107,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestGetReplicationLoad.MyMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestGetReplicationLoad.MyMaster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestLocalHBaseCluster.MyHMaster.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestLocalHBaseCluster.MyHMaster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterMetrics.MyMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterMetrics.MyMaster</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers.HMasterForTest</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.MyMaster.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionMergeTransactionOnCluster.MyMaster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerReportForDuty.NeverInitializedMaster.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReportForDuty.NeverInitializedMaster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationProcedureRetry.MockHMaster.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationProcedureRetry.MockHMaster</span></a></li>
@@ -2231,6 +2233,11 @@
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestSerialReplicationFailover</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.master.ServerManager
+<ul>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.util.Shell
 <ul>
 <li type="circle">org.apache.hadoop.util.Shell.ShellCommandExecutor (implements org.apache.hadoop.util.Shell.CommandExecutor)
@@ -3386,6 +3393,7 @@
 </li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestRegexComparator.html" title="class in org.apache.hadoop.hbase.filter"><span class="typeNameLink">TestRegexComparator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestRegexComparator.TestCase.html" title="class in org.apache.hadoop.hbase.filter"><span class="typeNameLink">TestRegexComparator.TestCase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionBypass</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionFavoredNodes.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionFavoredNodes</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionIncrement.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionIncrement</span></a></li>


[08/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 6e82899..152a081 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -234,10 +234,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckStateMachineState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckStateMachineState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index d7c69fc..06907ed 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -701,10 +701,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html
index 79ffc82..da97f01 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3612">TestAccessController.MyShellBasedUnixGroupsMapping</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3622">TestAccessController.MyShellBasedUnixGroupsMapping</a>
 extends org.apache.hadoop.security.ShellBasedUnixGroupsMapping
 implements org.apache.hadoop.security.GroupMappingServiceProvider</pre>
 </li>
@@ -221,7 +221,7 @@ implements org.apache.hadoop.security.GroupMappingServiceProvider</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MyShellBasedUnixGroupsMapping</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html#line.3612">MyShellBasedUnixGroupsMapping</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html#line.3622">MyShellBasedUnixGroupsMapping</a>()</pre>
 </li>
 </ul>
 </li>
@@ -238,7 +238,7 @@ implements org.apache.hadoop.security.GroupMappingServiceProvider</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getGroups</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html#line.3615">getGroups</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.MyShellBasedUnixGroupsMapping.html#line.3625">getGroups</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html
index 6cb5edb..9970cb7 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2563">TestAccessController.PingCoprocessor</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2561">TestAccessController.PingCoprocessor</a>
 extends org.apache.hadoop.hbase.coprocessor.protobuf.generated.PingProtos.PingService
 implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor</pre>
 </li>
@@ -281,7 +281,7 @@ implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PingCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2563">PingCoprocessor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2561">PingCoprocessor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -298,7 +298,7 @@ implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2566">start</a>(org.apache.hadoop.hbase.CoprocessorEnvironment&nbsp;env)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2564">start</a>(org.apache.hadoop.hbase.CoprocessorEnvironment&nbsp;env)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -314,7 +314,7 @@ implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2569">stop</a>(org.apache.hadoop.hbase.CoprocessorEnvironment&nbsp;env)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2567">stop</a>(org.apache.hadoop.hbase.CoprocessorEnvironment&nbsp;env)
           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -330,7 +330,7 @@ implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getServices</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;com.google.protobuf.Service&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2572">getServices</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;com.google.protobuf.Service&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2570">getServices</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getServices</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Coprocessor</code></dd>
@@ -343,7 +343,7 @@ implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>ping</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2577">ping</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2575">ping</a>(com.google.protobuf.RpcController&nbsp;controller,
                  org.apache.hadoop.hbase.coprocessor.protobuf.generated.PingProtos.PingRequest&nbsp;request,
                  com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.coprocessor.protobuf.generated.PingProtos.PingResponse&gt;&nbsp;callback)</pre>
 <dl>
@@ -358,7 +358,7 @@ implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>count</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2583">count</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2581">count</a>(com.google.protobuf.RpcController&nbsp;controller,
                   org.apache.hadoop.hbase.coprocessor.protobuf.generated.PingProtos.CountRequest&nbsp;request,
                   com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.coprocessor.protobuf.generated.PingProtos.CountResponse&gt;&nbsp;callback)</pre>
 <dl>
@@ -373,7 +373,7 @@ implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>increment</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2589">increment</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2587">increment</a>(com.google.protobuf.RpcController&nbsp;controller,
                       org.apache.hadoop.hbase.coprocessor.protobuf.generated.PingProtos.IncrementCountRequest&nbsp;requet,
                       com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.coprocessor.protobuf.generated.PingProtos.IncrementCountResponse&gt;&nbsp;callback)</pre>
 <dl>
@@ -388,7 +388,7 @@ implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>hello</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2595">hello</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2593">hello</a>(com.google.protobuf.RpcController&nbsp;controller,
                   org.apache.hadoop.hbase.coprocessor.protobuf.generated.PingProtos.HelloRequest&nbsp;request,
                   com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.coprocessor.protobuf.generated.PingProtos.HelloResponse&gt;&nbsp;callback)</pre>
 <dl>
@@ -403,7 +403,7 @@ implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>noop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2601">noop</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#line.2599">noop</a>(com.google.protobuf.RpcController&nbsp;controller,
                  org.apache.hadoop.hbase.coprocessor.protobuf.generated.PingProtos.NoopRequest&nbsp;request,
                  com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.coprocessor.protobuf.generated.PingProtos.NoopResponse&gt;&nbsp;callback)</pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.html
index 68eb4ec..b249498 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController.html
@@ -1718,7 +1718,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyGlobal</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1765">verifyGlobal</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureTestUtil.AccessTestAction.html" title="interface in org.apache.hadoop.hbase.security.access">SecureTestUtil.AccessTestAction</a>&nbsp;action)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1763">verifyGlobal</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureTestUtil.AccessTestAction.html" title="interface in org.apache.hadoop.hbase.security.access">SecureTestUtil.AccessTestAction</a>&nbsp;action)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">global operations</div>
 <dl>
@@ -1733,7 +1733,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testCheckPermissions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1772">testCheckPermissions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1770">testCheckPermissions</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1747,7 +1747,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testStopRegionServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1939">testStopRegionServer</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1937">testStopRegionServer</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1761,7 +1761,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testRollWALWriterRequest</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1954">testRollWALWriterRequest</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1952">testRollWALWriterRequest</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1775,7 +1775,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testOpenRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1969">testOpenRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1967">testOpenRegion</a>()
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1789,7 +1789,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testCloseRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1984">testCloseRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1982">testCloseRegion</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1803,7 +1803,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1999">testSnapshot</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.1997">testSnapshot</a>()
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1817,7 +1817,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testSnapshotWithOwner</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2058">testSnapshotWithOwner</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2056">testSnapshotWithOwner</a>()
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1831,7 +1831,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testGlobalAuthorizationForNewRegisteredRS</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2114">testGlobalAuthorizationForNewRegisteredRS</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2112">testGlobalAuthorizationForNewRegisteredRS</a>()
                                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1845,7 +1845,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testTableDescriptorsEnumeration</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2177">testTableDescriptorsEnumeration</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2175">testTableDescriptorsEnumeration</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1859,7 +1859,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testTableNameEnumeration</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2221">testTableNameEnumeration</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2219">testTableNameEnumeration</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1873,7 +1873,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testTableDeletion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2243">testTableDeletion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2241">testTableDeletion</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1887,7 +1887,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>createTestTable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2272">createTestTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tname)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2270">createTestTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tname)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1901,7 +1901,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>createTestTable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2276">createTestTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tname,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2274">createTestTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tname,
                              byte[]&nbsp;cf)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
@@ -1916,7 +1916,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testNamespaceUserGrant</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2286">testNamespaceUserGrant</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2284">testNamespaceUserGrant</a>()
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1930,7 +1930,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testAccessControlClientGrantRevoke</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2310">testAccessControlClientGrantRevoke</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2308">testAccessControlClientGrantRevoke</a>()
                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1944,7 +1944,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testAccessControlClientGlobalGrantRevoke</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2349">testAccessControlClientGlobalGrantRevoke</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2347">testAccessControlClientGlobalGrantRevoke</a>()
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1958,7 +1958,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testAccessControlClientMultiGrantRevoke</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2395">testAccessControlClientMultiGrantRevoke</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2393">testAccessControlClientMultiGrantRevoke</a>()
                                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1972,7 +1972,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testAccessControlClientGrantRevokeOnNamespace</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2518">testAccessControlClientGrantRevokeOnNamespace</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2516">testAccessControlClientGrantRevokeOnNamespace</a>()
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1986,7 +1986,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testCoprocessorExec</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2608">testCoprocessorExec</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2606">testCoprocessorExec</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2000,7 +2000,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testSetQuota</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2659">testSetQuota</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2657">testSetQuota</a>()
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2014,7 +2014,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetNamespacePermission</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2726">testGetNamespacePermission</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2724">testGetNamespacePermission</a>()
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2028,7 +2028,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>getNamespacePermissionsAndVerify</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2752">getNamespacePermissionsAndVerify</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespaceRegexWithoutPrefix,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2750">getNamespacePermissionsAndVerify</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespaceRegexWithoutPrefix,
                                               int&nbsp;expectedAmount,
                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;expectedNamespace)
                                        throws org.apache.hadoop.hbase.exceptions.HBaseException</pre>
@@ -2050,7 +2050,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testTruncatePerms</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2769">testTruncatePerms</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2770">testTruncatePerms</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2064,7 +2064,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>getPrivilegedAction</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedAction.html?is-external=true" title="class or interface in java.security">PrivilegedAction</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.security.access.UserPermission&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2787">getPrivilegedAction</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regex)</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedAction.html?is-external=true" title="class or interface in java.security">PrivilegedAction</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.security.access.UserPermission&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2788">getPrivilegedAction</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regex)</pre>
 </li>
 </ul>
 <a name="testAccessControlClientUserPerms--">
@@ -2073,7 +2073,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testAccessControlClientUserPerms</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2802">testAccessControlClientUserPerms</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2803">testAccessControlClientUserPerms</a>()
                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2087,7 +2087,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testAccessControllerUserPermsRegexHandling</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2821">testAccessControllerUserPermsRegexHandling</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2822">testAccessControllerUserPermsRegexHandling</a>()
                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2101,7 +2101,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyAnyCreate</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2870">verifyAnyCreate</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureTestUtil.AccessTestAction.html" title="interface in org.apache.hadoop.hbase.security.access">SecureTestUtil.AccessTestAction</a>&nbsp;action)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2871">verifyAnyCreate</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureTestUtil.AccessTestAction.html" title="interface in org.apache.hadoop.hbase.security.access">SecureTestUtil.AccessTestAction</a>&nbsp;action)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2115,7 +2115,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testPrepareAndCleanBulkLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2878">testPrepareAndCleanBulkLoad</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2879">testPrepareAndCleanBulkLoad</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2129,7 +2129,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplicateLogEntries</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2898">testReplicateLogEntries</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2899">testReplicateLogEntries</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2143,7 +2143,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testAddReplicationPeer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2914">testAddReplicationPeer</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2915">testAddReplicationPeer</a>()
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2157,7 +2157,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testRemoveReplicationPeer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2929">testRemoveReplicationPeer</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2930">testRemoveReplicationPeer</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2171,7 +2171,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testEnableReplicationPeer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2944">testEnableReplicationPeer</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2945">testEnableReplicationPeer</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2185,7 +2185,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testDisableReplicationPeer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2959">testDisableReplicationPeer</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2960">testDisableReplicationPeer</a>()
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2199,7 +2199,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetReplicationPeerConfig</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2974">testGetReplicationPeerConfig</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2975">testGetReplicationPeerConfig</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2213,7 +2213,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testUpdateReplicationPeerConfig</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2989">testUpdateReplicationPeerConfig</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.2990">testUpdateReplicationPeerConfig</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2227,7 +2227,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testTransitSyncReplicationPeerState</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3004">testTransitSyncReplicationPeerState</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3005">testTransitSyncReplicationPeerState</a>()
                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2241,7 +2241,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testListReplicationPeers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3019">testListReplicationPeers</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3020">testListReplicationPeers</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2255,7 +2255,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testRemoteLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3034">testRemoteLocks</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3035">testRemoteLocks</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2269,7 +2269,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testAccessControlRevokeOnlyFewPermission</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3105">testAccessControlRevokeOnlyFewPermission</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3106">testAccessControlRevokeOnlyFewPermission</a>()
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2283,7 +2283,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetClusterStatus</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3141">testGetClusterStatus</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3142">testGetClusterStatus</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2297,7 +2297,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testExecuteProcedures</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3155">testExecuteProcedures</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3156">testExecuteProcedures</a>()
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2311,7 +2311,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetUserPermissions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3169">testGetUserPermissions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3170">testGetUserPermissions</a>()
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2325,7 +2325,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testHasPermission</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3297">testHasPermission</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3298">testHasPermission</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2339,7 +2339,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>validateGlobalUserACLForGetUserPermissions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3423">validateGlobalUserACLForGetUserPermissions</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3424">validateGlobalUserACLForGetUserPermissions</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
                                                         org.apache.hadoop.hbase.security.User&nbsp;nSUser1,
                                                         org.apache.hadoop.hbase.security.User&nbsp;globalGroupUser1,
                                                         org.apache.hadoop.hbase.security.User&nbsp;globalGroupUser2,
@@ -2358,7 +2358,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>validateNamespaceUserACLForGetUserPermissions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3463">validateNamespaceUserACLForGetUserPermissions</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3464">validateNamespaceUserACLForGetUserPermissions</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
                                                            org.apache.hadoop.hbase.security.User&nbsp;nSUser1,
                                                            org.apache.hadoop.hbase.security.User&nbsp;nSUser3,
                                                            org.apache.hadoop.hbase.security.User&nbsp;nsGroupUser1,
@@ -2379,7 +2379,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>validateTableACLForGetUserPermissions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3507">validateTableACLForGetUserPermissions</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3508">validateTableACLForGetUserPermissions</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
                                                    org.apache.hadoop.hbase.security.User&nbsp;nSUser1,
                                                    org.apache.hadoop.hbase.security.User&nbsp;tableGroupUser1,
                                                    org.apache.hadoop.hbase.security.User&nbsp;tableGroupUser2,
@@ -2401,7 +2401,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockListLast">
 <li class="blockList">
 <h4>verifyGetUserPermissionResult</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3591">verifyGetUserPermissionResult</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.security.access.UserPermission&gt;&nbsp;userPermissions,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController.html#line.3592">verifyGetUserPermissionResult</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.security.access.UserPermission&gt;&nbsp;userPermissions,
                                            int&nbsp;resultCount,
                                            byte[]&nbsp;cf,
                                            byte[]&nbsp;cq,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController3.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController3.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController3.html
index f2c0b91..323d60e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController3.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController3.html
@@ -116,7 +116,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAccessController3.html#line.67">TestAccessController3</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureTestUtil.html" title="class in org.apache.hadoop.hbase.security.access">SecureTestUtil</a></pre>
-<div class="block">Performs checks for reference counting w.r.t. TableAuthManager which is used by
+<div class="block">Performs checks for reference counting w.r.t. AuthManager which is used by
  AccessController.
 
  NOTE: Only one test in  here. In AMv2, there is problem deleting because

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html
index 8d35325..789d573 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html
@@ -768,7 +768,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testModifyNamespace</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#line.248">testModifyNamespace</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#line.244">testModifyNamespace</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -782,7 +782,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateAndDeleteNamespace</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#line.267">testCreateAndDeleteNamespace</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#line.263">testCreateAndDeleteNamespace</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -796,7 +796,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetNamespaceDescriptor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#line.301">testGetNamespaceDescriptor</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#line.297">testGetNamespaceDescriptor</a>()
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -810,7 +810,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testListNamespaces</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#line.319">testListNamespaces</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#line.315">testListNamespaces</a>()
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -824,7 +824,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockList">
 <li class="blockList">
 <h4>testGrantRevoke</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#line.363">testGrantRevoke</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#line.359">testGrantRevoke</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -838,7 +838,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testCreateTableWithNamespace</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#line.489">testCreateTableWithNamespace</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#line.485">testCreateTableWithNamespace</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html
index 1b9ce6a..050e67e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.155">TestRpcAccessChecks.Action</a></pre>
+<pre>static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.157">TestRpcAccessChecks.Action</a></pre>
 </li>
 </ul>
 </div>
@@ -149,7 +149,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html#line.156">run</a>(org.apache.hadoop.hbase.client.Admin&nbsp;admin)
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html#line.158">run</a>(org.apache.hadoop.hbase.client.Admin&nbsp;admin)
   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html
index 80bb659..5c93a1a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html
@@ -468,7 +468,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyAllowed</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.159">verifyAllowed</a>(org.apache.hadoop.hbase.security.User&nbsp;user,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.161">verifyAllowed</a>(org.apache.hadoop.hbase.security.User&nbsp;user,
                            <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
@@ -483,7 +483,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyDenied</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.171">verifyDenied</a>(org.apache.hadoop.hbase.security.User&nbsp;user,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.173">verifyDenied</a>(org.apache.hadoop.hbase.security.User&nbsp;user,
                           <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
@@ -498,7 +498,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>verifiedDeniedServiceException</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.185">verifiedDeniedServiceException</a>(org.apache.hadoop.hbase.security.User&nbsp;user,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.187">verifiedDeniedServiceException</a>(org.apache.hadoop.hbase.security.User&nbsp;user,
                                             <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
@@ -513,7 +513,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyAdminCheckForAction</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.203">verifyAdminCheckForAction</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.205">verifyAdminCheckForAction</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -527,7 +527,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testEnableCatalogJanitor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.210">testEnableCatalogJanitor</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.212">testEnableCatalogJanitor</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -541,7 +541,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRunCatalogJanitor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.215">testRunCatalogJanitor</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.217">testRunCatalogJanitor</a>()
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -555,7 +555,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testCleanerChoreRunning</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.220">testCleanerChoreRunning</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.222">testCleanerChoreRunning</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -569,7 +569,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRunCleanerChore</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.225">testRunCleanerChore</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.227">testRunCleanerChore</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -583,7 +583,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testExecProcedure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.230">testExecProcedure</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.232">testExecProcedure</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -597,7 +597,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testExecService</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.239">testExecService</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.241">testExecService</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -611,7 +611,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testExecProcedureWithRet</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.253">testExecProcedureWithRet</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.255">testExecProcedureWithRet</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -625,7 +625,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testNormalize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.262">testNormalize</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.264">testNormalize</a>()
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -639,7 +639,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSetNormalizerRunning</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.267">testSetNormalizerRunning</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.269">testSetNormalizerRunning</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -653,7 +653,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testExecRegionServerService</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.272">testExecRegionServerService</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.274">testExecRegionServerService</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -667,7 +667,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testTableFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.287">testTableFlush</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.289">testTableFlush</a>()
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -681,7 +681,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testTableFlushAndSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.326">testTableFlushAndSnapshot</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.328">testTableFlushAndSnapshot</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>


[06/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html
index 1222951..6f09c2f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html
@@ -51,389 +51,414 @@
 <span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.Tag;<a name="line.43"></a>
 <span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.io.ByteArrayOutputStream;<a name="line.44"></a>
 <span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.io.hfile.HFileContext;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.testclassification.IOTests;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.RedundantKVGenerator;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.junit.ClassRule;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.junit.Test;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.junit.experimental.categories.Category;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.junit.runner.RunWith;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.runners.Parameterized;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.runners.Parameterized.Parameters;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.slf4j.Logger;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.slf4j.LoggerFactory;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>/**<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * Test all of the data block encoding algorithms for correctness. Most of the<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * class generate data which will test different branches in code.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>@Category({IOTests.class, LargeTests.class})<a name="line.66"></a>
-<span class="sourceLineNo">067</span>@RunWith(Parameterized.class)<a name="line.67"></a>
-<span class="sourceLineNo">068</span>public class TestDataBlockEncoders {<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  @ClassRule<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      HBaseClassTestRule.forClass(TestDataBlockEncoders.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static final Logger LOG = LoggerFactory.getLogger(TestDataBlockEncoders.class);<a name="line.74"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.io.hfile.HFileContext;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.testclassification.IOTests;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.RedundantKVGenerator;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.junit.Assert;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.junit.ClassRule;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.junit.Test;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.junit.experimental.categories.Category;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.junit.runner.RunWith;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.runners.Parameterized;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.runners.Parameterized.Parameters;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * Test all of the data block encoding algorithms for correctness. Most of the<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * class generate data which will test different branches in code.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> */<a name="line.67"></a>
+<span class="sourceLineNo">068</span>@Category({IOTests.class, LargeTests.class})<a name="line.68"></a>
+<span class="sourceLineNo">069</span>@RunWith(Parameterized.class)<a name="line.69"></a>
+<span class="sourceLineNo">070</span>public class TestDataBlockEncoders {<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  @ClassRule<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      HBaseClassTestRule.forClass(TestDataBlockEncoders.class);<a name="line.74"></a>
 <span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private static int NUMBER_OF_KV = 10000;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static int NUM_RANDOM_SEEKS = 1000;<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private static int ENCODED_DATA_OFFSET = HConstants.HFILEBLOCK_HEADER_SIZE<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      + DataBlockEncoding.ID_SIZE;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  static final byte[] HFILEBLOCK_DUMMY_HEADER = new byte[HConstants.HFILEBLOCK_HEADER_SIZE];<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private RedundantKVGenerator generator = new RedundantKVGenerator();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private Random randomizer = new Random(42L);<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private final boolean includesMemstoreTS;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final boolean includesTags;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private final boolean useOffheapData;<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  @Parameters<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public static Collection&lt;Object[]&gt; parameters() {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    return HBaseTestingUtility.memStoreTSTagsAndOffheapCombination();<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public TestDataBlockEncoders(boolean includesMemstoreTS, boolean includesTag,<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      boolean useOffheapData) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    this.includesMemstoreTS = includesMemstoreTS;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    this.includesTags = includesTag;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    this.useOffheapData = useOffheapData;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private HFileBlockEncodingContext getEncodingContext(Compression.Algorithm algo,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      DataBlockEncoding encoding) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    DataBlockEncoder encoder = encoding.getEncoder();<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    HFileContext meta = new HFileContextBuilder()<a name="line.105"></a>
-<span class="sourceLineNo">106</span>                        .withHBaseCheckSum(false)<a name="line.106"></a>
-<span class="sourceLineNo">107</span>                        .withIncludesMvcc(includesMemstoreTS)<a name="line.107"></a>
-<span class="sourceLineNo">108</span>                        .withIncludesTags(includesTags)<a name="line.108"></a>
-<span class="sourceLineNo">109</span>                        .withCompression(algo).build();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    if (encoder != null) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      return encoder.newDataBlockEncodingContext(encoding, HFILEBLOCK_DUMMY_HEADER, meta);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    } else {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      return new HFileBlockDefaultEncodingContext(encoding, HFILEBLOCK_DUMMY_HEADER, meta);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Test data block encoding of empty KeyValue.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   *<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @throws IOException<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   *           On test failure.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  @Test<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  public void testEmptyKeyValues() throws IOException {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    List&lt;KeyValue&gt; kvList = new ArrayList&lt;&gt;();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    byte[] row = new byte[0];<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    byte[] family = new byte[0];<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    byte[] qualifier = new byte[0];<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    byte[] value = new byte[0];<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    if (!includesTags) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      kvList.add(new KeyValue(row, family, qualifier, 0L, value));<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      kvList.add(new KeyValue(row, family, qualifier, 0L, value));<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    } else {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      byte[] metaValue1 = Bytes.toBytes("metaValue1");<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      byte[] metaValue2 = Bytes.toBytes("metaValue2");<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      kvList.add(new KeyValue(row, family, qualifier, 0L, value,<a name="line.136"></a>
-<span class="sourceLineNo">137</span>          new Tag[] { new ArrayBackedTag((byte) 1, metaValue1) }));<a name="line.137"></a>
+<span class="sourceLineNo">076</span>  private static final Logger LOG = LoggerFactory.getLogger(TestDataBlockEncoders.class);<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private static int NUMBER_OF_KV = 10000;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private static int NUM_RANDOM_SEEKS = 1000;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private static int ENCODED_DATA_OFFSET = HConstants.HFILEBLOCK_HEADER_SIZE<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      + DataBlockEncoding.ID_SIZE;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  static final byte[] HFILEBLOCK_DUMMY_HEADER = new byte[HConstants.HFILEBLOCK_HEADER_SIZE];<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private RedundantKVGenerator generator = new RedundantKVGenerator();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private Random randomizer = new Random(42L);<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final boolean includesMemstoreTS;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private final boolean includesTags;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private final boolean useOffheapData;<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Parameters<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public static Collection&lt;Object[]&gt; parameters() {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    return HBaseTestingUtility.memStoreTSTagsAndOffheapCombination();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public TestDataBlockEncoders(boolean includesMemstoreTS, boolean includesTag,<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      boolean useOffheapData) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    this.includesMemstoreTS = includesMemstoreTS;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    this.includesTags = includesTag;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    this.useOffheapData = useOffheapData;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  private HFileBlockEncodingContext getEncodingContext(Compression.Algorithm algo,<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      DataBlockEncoding encoding) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    DataBlockEncoder encoder = encoding.getEncoder();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    HFileContext meta = new HFileContextBuilder()<a name="line.107"></a>
+<span class="sourceLineNo">108</span>                        .withHBaseCheckSum(false)<a name="line.108"></a>
+<span class="sourceLineNo">109</span>                        .withIncludesMvcc(includesMemstoreTS)<a name="line.109"></a>
+<span class="sourceLineNo">110</span>                        .withIncludesTags(includesTags)<a name="line.110"></a>
+<span class="sourceLineNo">111</span>                        .withCompression(algo).build();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    if (encoder != null) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      return encoder.newDataBlockEncodingContext(encoding, HFILEBLOCK_DUMMY_HEADER, meta);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    } else {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      return new HFileBlockDefaultEncodingContext(encoding, HFILEBLOCK_DUMMY_HEADER, meta);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  /**<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * Test data block encoding of empty KeyValue.<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   *<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * @throws IOException<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   *           On test failure.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  @Test<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public void testEmptyKeyValues() throws IOException {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    List&lt;KeyValue&gt; kvList = new ArrayList&lt;&gt;();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    byte[] row = new byte[0];<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    byte[] family = new byte[0];<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    byte[] qualifier = new byte[0];<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    byte[] value = new byte[0];<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    if (!includesTags) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      kvList.add(new KeyValue(row, family, qualifier, 0L, value));<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      kvList.add(new KeyValue(row, family, qualifier, 0L, value));<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    } else {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      byte[] metaValue1 = Bytes.toBytes("metaValue1");<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      byte[] metaValue2 = Bytes.toBytes("metaValue2");<a name="line.137"></a>
 <span class="sourceLineNo">138</span>      kvList.add(new KeyValue(row, family, qualifier, 0L, value,<a name="line.138"></a>
-<span class="sourceLineNo">139</span>          new Tag[] { new ArrayBackedTag((byte) 1, metaValue2) }));<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    testEncodersOnDataset(kvList, includesMemstoreTS, includesTags);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * Test KeyValues with negative timestamp.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   *<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * @throws IOException<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   *           On test failure.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  @Test<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public void testNegativeTimestamps() throws IOException {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    List&lt;KeyValue&gt; kvList = new ArrayList&lt;&gt;();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    byte[] row = new byte[0];<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    byte[] family = new byte[0];<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    byte[] qualifier = new byte[0];<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    byte[] value = new byte[0];<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    if (includesTags) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      byte[] metaValue1 = Bytes.toBytes("metaValue1");<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      byte[] metaValue2 = Bytes.toBytes("metaValue2");<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      kvList.add(new KeyValue(row, family, qualifier, 0L, value,<a name="line.160"></a>
-<span class="sourceLineNo">161</span>          new Tag[] { new ArrayBackedTag((byte) 1, metaValue1) }));<a name="line.161"></a>
+<span class="sourceLineNo">139</span>          new Tag[] { new ArrayBackedTag((byte) 1, metaValue1) }));<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      kvList.add(new KeyValue(row, family, qualifier, 0L, value,<a name="line.140"></a>
+<span class="sourceLineNo">141</span>          new Tag[] { new ArrayBackedTag((byte) 1, metaValue2) }));<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    testEncodersOnDataset(kvList, includesMemstoreTS, includesTags);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  /**<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * Test KeyValues with negative timestamp.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   *<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @throws IOException<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   *           On test failure.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   */<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  @Test<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  public void testNegativeTimestamps() throws IOException {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    List&lt;KeyValue&gt; kvList = new ArrayList&lt;&gt;();<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    byte[] row = new byte[0];<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    byte[] family = new byte[0];<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    byte[] qualifier = new byte[0];<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    byte[] value = new byte[0];<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    if (includesTags) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      byte[] metaValue1 = Bytes.toBytes("metaValue1");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      byte[] metaValue2 = Bytes.toBytes("metaValue2");<a name="line.161"></a>
 <span class="sourceLineNo">162</span>      kvList.add(new KeyValue(row, family, qualifier, 0L, value,<a name="line.162"></a>
-<span class="sourceLineNo">163</span>          new Tag[] { new ArrayBackedTag((byte) 1, metaValue2) }));<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    } else {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      kvList.add(new KeyValue(row, family, qualifier, -1L, Type.Put, value));<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      kvList.add(new KeyValue(row, family, qualifier, -2L, Type.Put, value));<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    testEncodersOnDataset(kvList, includesMemstoreTS, includesTags);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  /**<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * Test whether compression -&gt; decompression gives the consistent results on<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * pseudorandom sample.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @throws IOException On test failure.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  @Test<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  public void testExecutionOnSample() throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    List&lt;KeyValue&gt; kvList = generator.generateTestKeyValues(NUMBER_OF_KV, includesTags);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    testEncodersOnDataset(kvList, includesMemstoreTS, includesTags);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  /**<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   * Test seeking while file is encoded.<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  @Test<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  public void testSeekingOnSample() throws IOException {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    List&lt;KeyValue&gt; sampleKv = generator.generateTestKeyValues(NUMBER_OF_KV, includesTags);<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    // create all seekers<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    List&lt;DataBlockEncoder.EncodedSeeker&gt; encodedSeekers = new ArrayList&lt;&gt;();<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    for (DataBlockEncoding encoding : DataBlockEncoding.values()) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      LOG.info("Encoding: " + encoding);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      DataBlockEncoder encoder = encoding.getEncoder();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      if (encoder == null) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        continue;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      LOG.info("Encoder: " + encoder);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      ByteBuffer encodedBuffer = encodeKeyValues(encoding, sampleKv,<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          getEncodingContext(Compression.Algorithm.NONE, encoding), this.useOffheapData);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      HFileContext meta = new HFileContextBuilder()<a name="line.201"></a>
-<span class="sourceLineNo">202</span>                          .withHBaseCheckSum(false)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>                          .withIncludesMvcc(includesMemstoreTS)<a name="line.203"></a>
-<span class="sourceLineNo">204</span>                          .withIncludesTags(includesTags)<a name="line.204"></a>
-<span class="sourceLineNo">205</span>                          .withCompression(Compression.Algorithm.NONE)<a name="line.205"></a>
-<span class="sourceLineNo">206</span>                          .build();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      DataBlockEncoder.EncodedSeeker seeker = encoder.createSeeker(CellComparatorImpl.COMPARATOR,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>          encoder.newDataBlockDecodingContext(meta));<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      seeker.setCurrentBuffer(new SingleByteBuff(encodedBuffer));<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      encodedSeekers.add(seeker);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    LOG.info("Testing it!");<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // test it!<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // try a few random seeks<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    for (boolean seekBefore : new boolean[] { false, true }) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      for (int i = 0; i &lt; NUM_RANDOM_SEEKS; ++i) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        int keyValueId;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        if (!seekBefore) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          keyValueId = randomizer.nextInt(sampleKv.size());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        } else {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          keyValueId = randomizer.nextInt(sampleKv.size() - 1) + 1;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>        KeyValue keyValue = sampleKv.get(keyValueId);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        checkSeekingConsistency(encodedSeekers, seekBefore, keyValue);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>    // check edge cases<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    LOG.info("Checking edge cases");<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    checkSeekingConsistency(encodedSeekers, false, sampleKv.get(0));<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    for (boolean seekBefore : new boolean[] { false, true }) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      checkSeekingConsistency(encodedSeekers, seekBefore, sampleKv.get(sampleKv.size() - 1));<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      KeyValue midKv = sampleKv.get(sampleKv.size() / 2);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      Cell lastMidKv =PrivateCellUtil.createLastOnRowCol(midKv);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      checkSeekingConsistency(encodedSeekers, seekBefore, lastMidKv);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    LOG.info("Done");<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>  static ByteBuffer encodeKeyValues(DataBlockEncoding encoding, List&lt;KeyValue&gt; kvs,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      HFileBlockEncodingContext encodingContext, boolean useOffheapData) throws IOException {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    DataBlockEncoder encoder = encoding.getEncoder();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    ByteArrayOutputStream baos = new ByteArrayOutputStream();<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    baos.write(HFILEBLOCK_DUMMY_HEADER);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    DataOutputStream dos = new DataOutputStream(baos);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    encoder.startBlockEncoding(encodingContext, dos);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    for (KeyValue kv : kvs) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      encoder.encode(kv, encodingContext, dos);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    encoder.endBlockEncoding(encodingContext, dos, baos.getBuffer());<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    byte[] encodedData = new byte[baos.size() - ENCODED_DATA_OFFSET];<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    System.arraycopy(baos.toByteArray(), ENCODED_DATA_OFFSET, encodedData, 0, encodedData.length);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    if (useOffheapData) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      ByteBuffer bb = ByteBuffer.allocateDirect(encodedData.length);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      bb.put(encodedData);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      bb.rewind();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      return bb;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    return ByteBuffer.wrap(encodedData);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  @Test<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  public void testNextOnSample() throws IOException {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    List&lt;KeyValue&gt; sampleKv = generator.generateTestKeyValues(NUMBER_OF_KV, includesTags);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    for (DataBlockEncoding encoding : DataBlockEncoding.values()) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      if (encoding.getEncoder() == null) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        continue;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      DataBlockEncoder encoder = encoding.getEncoder();<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      ByteBuffer encodedBuffer = encodeKeyValues(encoding, sampleKv,<a name="line.272"></a>
-<span class="sourceLineNo">273</span>          getEncodingContext(Compression.Algorithm.NONE, encoding), this.useOffheapData);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      HFileContext meta = new HFileContextBuilder()<a name="line.274"></a>
-<span class="sourceLineNo">275</span>                          .withHBaseCheckSum(false)<a name="line.275"></a>
-<span class="sourceLineNo">276</span>                          .withIncludesMvcc(includesMemstoreTS)<a name="line.276"></a>
-<span class="sourceLineNo">277</span>                          .withIncludesTags(includesTags)<a name="line.277"></a>
-<span class="sourceLineNo">278</span>                          .withCompression(Compression.Algorithm.NONE)<a name="line.278"></a>
-<span class="sourceLineNo">279</span>                          .build();<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      DataBlockEncoder.EncodedSeeker seeker = encoder.createSeeker(CellComparatorImpl.COMPARATOR,<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          encoder.newDataBlockDecodingContext(meta));<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      seeker.setCurrentBuffer(new SingleByteBuff(encodedBuffer));<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      int i = 0;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      do {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        KeyValue expectedKeyValue = sampleKv.get(i);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        Cell cell = seeker.getCell();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        if (PrivateCellUtil.compareKeyIgnoresMvcc(CellComparatorImpl.COMPARATOR, expectedKeyValue,<a name="line.287"></a>
-<span class="sourceLineNo">288</span>          cell) != 0) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          int commonPrefix = PrivateCellUtil<a name="line.289"></a>
-<span class="sourceLineNo">290</span>              .findCommonPrefixInFlatKey(expectedKeyValue, cell, false, true);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>          fail(String.format("next() produces wrong results "<a name="line.291"></a>
-<span class="sourceLineNo">292</span>              + "encoder: %s i: %d commonPrefix: %d" + "\n expected %s\n actual      %s", encoder<a name="line.292"></a>
-<span class="sourceLineNo">293</span>              .toString(), i, commonPrefix, Bytes.toStringBinary(expectedKeyValue.getBuffer(),<a name="line.293"></a>
-<span class="sourceLineNo">294</span>              expectedKeyValue.getKeyOffset(), expectedKeyValue.getKeyLength()), CellUtil.toString(<a name="line.294"></a>
-<span class="sourceLineNo">295</span>              cell, false)));<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        i++;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      } while (seeker.next());<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  /**<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * Test whether the decompression of first key is implemented correctly.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @throws IOException<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  @Test<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  public void testFirstKeyInBlockOnSample() throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    List&lt;KeyValue&gt; sampleKv = generator.generateTestKeyValues(NUMBER_OF_KV, includesTags);<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span>    for (DataBlockEncoding encoding : DataBlockEncoding.values()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      if (encoding.getEncoder() == null) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        continue;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      DataBlockEncoder encoder = encoding.getEncoder();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ByteBuffer encodedBuffer = encodeKeyValues(encoding, sampleKv,<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          getEncodingContext(Compression.Algorithm.NONE, encoding), this.useOffheapData);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      Cell key = encoder.getFirstKeyCellInBlock(new SingleByteBuff(encodedBuffer));<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      KeyValue firstKv = sampleKv.get(0);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      if (0 != PrivateCellUtil.compareKeyIgnoresMvcc(CellComparatorImpl.COMPARATOR, key, firstKv)) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        int commonPrefix = PrivateCellUtil.findCommonPrefixInFlatKey(key, firstKv, false, true);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        fail(String.format("Bug in '%s' commonPrefix %d", encoder.toString(), commonPrefix));<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>  private void checkSeekingConsistency(List&lt;DataBlockEncoder.EncodedSeeker&gt; encodedSeekers,<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      boolean seekBefore, Cell keyValue) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    Cell expectedKeyValue = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    ByteBuffer expectedKey = null;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    ByteBuffer expectedValue = null;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    for (DataBlockEncoder.EncodedSeeker seeker : encodedSeekers) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      seeker.seekToKeyInBlock(keyValue, seekBefore);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      seeker.rewind();<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>      Cell actualKeyValue = seeker.getCell();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      ByteBuffer actualKey = null;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      actualKey = ByteBuffer.wrap(((KeyValue) seeker.getKey()).getKey());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      ByteBuffer actualValue = seeker.getValueShallowCopy();<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>      if (expectedKeyValue != null) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        assertTrue(CellUtil.equals(expectedKeyValue, actualKeyValue));<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      } else {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        expectedKeyValue = actualKeyValue;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (expectedKey != null) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        assertEquals(expectedKey, actualKey);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      } else {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        expectedKey = actualKey;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>      if (expectedValue != null) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        assertEquals(expectedValue, actualValue);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      } else {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        expectedValue = actualValue;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
+<span class="sourceLineNo">163</span>          new Tag[] { new ArrayBackedTag((byte) 1, metaValue1) }));<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      kvList.add(new KeyValue(row, family, qualifier, 0L, value,<a name="line.164"></a>
+<span class="sourceLineNo">165</span>          new Tag[] { new ArrayBackedTag((byte) 1, metaValue2) }));<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    } else {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      kvList.add(new KeyValue(row, family, qualifier, -1L, Type.Put, value));<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      kvList.add(new KeyValue(row, family, qualifier, -2L, Type.Put, value));<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    testEncodersOnDataset(kvList, includesMemstoreTS, includesTags);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * Test whether compression -&gt; decompression gives the consistent results on<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * pseudorandom sample.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * @throws IOException On test failure.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  @Test<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  public void testExecutionOnSample() throws IOException {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    List&lt;KeyValue&gt; kvList = generator.generateTestKeyValues(NUMBER_OF_KV, includesTags);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    testEncodersOnDataset(kvList, includesMemstoreTS, includesTags);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  /**<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * Test seeking while file is encoded.<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   */<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  @Test<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public void testSeekingOnSample() throws IOException {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    List&lt;KeyValue&gt; sampleKv = generator.generateTestKeyValues(NUMBER_OF_KV, includesTags);<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // create all seekers<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    List&lt;DataBlockEncoder.EncodedSeeker&gt; encodedSeekers = new ArrayList&lt;&gt;();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    for (DataBlockEncoding encoding : DataBlockEncoding.values()) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      LOG.info("Encoding: " + encoding);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      DataBlockEncoder encoder = encoding.getEncoder();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      if (encoder == null) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        continue;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      LOG.info("Encoder: " + encoder);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      ByteBuffer encodedBuffer = encodeKeyValues(encoding, sampleKv,<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          getEncodingContext(Compression.Algorithm.NONE, encoding), this.useOffheapData);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      HFileContext meta = new HFileContextBuilder()<a name="line.203"></a>
+<span class="sourceLineNo">204</span>                          .withHBaseCheckSum(false)<a name="line.204"></a>
+<span class="sourceLineNo">205</span>                          .withIncludesMvcc(includesMemstoreTS)<a name="line.205"></a>
+<span class="sourceLineNo">206</span>                          .withIncludesTags(includesTags)<a name="line.206"></a>
+<span class="sourceLineNo">207</span>                          .withCompression(Compression.Algorithm.NONE)<a name="line.207"></a>
+<span class="sourceLineNo">208</span>                          .build();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      DataBlockEncoder.EncodedSeeker seeker = encoder.createSeeker(CellComparatorImpl.COMPARATOR,<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          encoder.newDataBlockDecodingContext(meta));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      seeker.setCurrentBuffer(new SingleByteBuff(encodedBuffer));<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      encodedSeekers.add(seeker);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    LOG.info("Testing it!");<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // test it!<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // try a few random seeks<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    for (boolean seekBefore : new boolean[] { false, true }) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      for (int i = 0; i &lt; NUM_RANDOM_SEEKS; ++i) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        int keyValueId;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        if (!seekBefore) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          keyValueId = randomizer.nextInt(sampleKv.size());<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        } else {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          keyValueId = randomizer.nextInt(sampleKv.size() - 1) + 1;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>        KeyValue keyValue = sampleKv.get(keyValueId);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        checkSeekingConsistency(encodedSeekers, seekBefore, keyValue);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>    // check edge cases<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    LOG.info("Checking edge cases");<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    checkSeekingConsistency(encodedSeekers, false, sampleKv.get(0));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    for (boolean seekBefore : new boolean[] { false, true }) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      checkSeekingConsistency(encodedSeekers, seekBefore, sampleKv.get(sampleKv.size() - 1));<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      KeyValue midKv = sampleKv.get(sampleKv.size() / 2);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      Cell lastMidKv =PrivateCellUtil.createLastOnRowCol(midKv);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      checkSeekingConsistency(encodedSeekers, seekBefore, lastMidKv);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    LOG.info("Done");<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>  static ByteBuffer encodeKeyValues(DataBlockEncoding encoding, List&lt;KeyValue&gt; kvs,<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      HFileBlockEncodingContext encodingContext, boolean useOffheapData) throws IOException {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    DataBlockEncoder encoder = encoding.getEncoder();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    ByteArrayOutputStream baos = new ByteArrayOutputStream();<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    baos.write(HFILEBLOCK_DUMMY_HEADER);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    DataOutputStream dos = new DataOutputStream(baos);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    encoder.startBlockEncoding(encodingContext, dos);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    for (KeyValue kv : kvs) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      encoder.encode(kv, encodingContext, dos);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    encoder.endBlockEncoding(encodingContext, dos, baos.getBuffer());<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    byte[] encodedData = new byte[baos.size() - ENCODED_DATA_OFFSET];<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    System.arraycopy(baos.toByteArray(), ENCODED_DATA_OFFSET, encodedData, 0, encodedData.length);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    if (useOffheapData) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      ByteBuffer bb = ByteBuffer.allocateDirect(encodedData.length);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      bb.put(encodedData);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      bb.rewind();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      return bb;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return ByteBuffer.wrap(encodedData);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  @Test<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  public void testNextOnSample() throws IOException {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    List&lt;KeyValue&gt; sampleKv = generator.generateTestKeyValues(NUMBER_OF_KV, includesTags);<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>    for (DataBlockEncoding encoding : DataBlockEncoding.values()) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      if (encoding.getEncoder() == null) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        continue;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      DataBlockEncoder encoder = encoding.getEncoder();<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      ByteBuffer encodedBuffer = encodeKeyValues(encoding, sampleKv,<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          getEncodingContext(Compression.Algorithm.NONE, encoding), this.useOffheapData);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      HFileContext meta = new HFileContextBuilder()<a name="line.276"></a>
+<span class="sourceLineNo">277</span>                          .withHBaseCheckSum(false)<a name="line.277"></a>
+<span class="sourceLineNo">278</span>                          .withIncludesMvcc(includesMemstoreTS)<a name="line.278"></a>
+<span class="sourceLineNo">279</span>                          .withIncludesTags(includesTags)<a name="line.279"></a>
+<span class="sourceLineNo">280</span>                          .withCompression(Compression.Algorithm.NONE)<a name="line.280"></a>
+<span class="sourceLineNo">281</span>                          .build();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      DataBlockEncoder.EncodedSeeker seeker = encoder.createSeeker(CellComparatorImpl.COMPARATOR,<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          encoder.newDataBlockDecodingContext(meta));<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      seeker.setCurrentBuffer(new SingleByteBuff(encodedBuffer));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      int i = 0;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      do {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        KeyValue expectedKeyValue = sampleKv.get(i);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        Cell cell = seeker.getCell();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        if (PrivateCellUtil.compareKeyIgnoresMvcc(CellComparatorImpl.COMPARATOR, expectedKeyValue,<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          cell) != 0) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          int commonPrefix = PrivateCellUtil<a name="line.291"></a>
+<span class="sourceLineNo">292</span>              .findCommonPrefixInFlatKey(expectedKeyValue, cell, false, true);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          fail(String.format("next() produces wrong results "<a name="line.293"></a>
+<span class="sourceLineNo">294</span>              + "encoder: %s i: %d commonPrefix: %d" + "\n expected %s\n actual      %s", encoder<a name="line.294"></a>
+<span class="sourceLineNo">295</span>              .toString(), i, commonPrefix, Bytes.toStringBinary(expectedKeyValue.getBuffer(),<a name="line.295"></a>
+<span class="sourceLineNo">296</span>              expectedKeyValue.getKeyOffset(), expectedKeyValue.getKeyLength()), CellUtil.toString(<a name="line.296"></a>
+<span class="sourceLineNo">297</span>              cell, false)));<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        i++;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      } while (seeker.next());<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    }<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   * Test whether the decompression of first key is implemented correctly.<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * @throws IOException<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  @Test<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public void testFirstKeyInBlockOnSample() throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    List&lt;KeyValue&gt; sampleKv = generator.generateTestKeyValues(NUMBER_OF_KV, includesTags);<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>    for (DataBlockEncoding encoding : DataBlockEncoding.values()) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      if (encoding.getEncoder() == null) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        continue;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      DataBlockEncoder encoder = encoding.getEncoder();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      ByteBuffer encodedBuffer = encodeKeyValues(encoding, sampleKv,<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          getEncodingContext(Compression.Algorithm.NONE, encoding), this.useOffheapData);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Cell key = encoder.getFirstKeyCellInBlock(new SingleByteBuff(encodedBuffer));<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      KeyValue firstKv = sampleKv.get(0);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      if (0 != PrivateCellUtil.compareKeyIgnoresMvcc(CellComparatorImpl.COMPARATOR, key, firstKv)) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        int commonPrefix = PrivateCellUtil.findCommonPrefixInFlatKey(key, firstKv, false, true);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        fail(String.format("Bug in '%s' commonPrefix %d", encoder.toString(), commonPrefix));<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  }<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>  @Test<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public void testRowIndexWithTagsButNoTagsInCell() throws IOException {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    List&lt;KeyValue&gt; kvList = new ArrayList&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    byte[] row = new byte[0];<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    byte[] family = new byte[0];<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    byte[] qualifier = new byte[0];<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    byte[] value = new byte[0];<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    KeyValue expectedKV = new KeyValue(row, family, qualifier, -1L, Type.Put, value);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    kvList.add(expectedKV);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    DataBlockEncoding encoding = DataBlockEncoding.ROW_INDEX_V1;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    DataBlockEncoder encoder = encoding.getEncoder();<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    ByteBuffer encodedBuffer =<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        encodeKeyValues(encoding, kvList, getEncodingContext(Algorithm.NONE, encoding), false);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    HFileContext meta =<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        new HFileContextBuilder().withHBaseCheckSum(false).withIncludesMvcc(includesMemstoreTS)<a name="line.342"></a>
+<span class="sourceLineNo">343</span>            .withIncludesTags(includesTags).withCompression(Compression.Algorithm.NONE).build();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    DataBlockEncoder.EncodedSeeker seeker = encoder.createSeeker(CellComparatorImpl.COMPARATOR,<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      encoder.newDataBlockDecodingContext(meta));<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    seeker.setCurrentBuffer(new SingleByteBuff(encodedBuffer));<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    Cell cell = seeker.getCell();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    Assert.assertEquals(expectedKV.getLength(), ((KeyValue) cell).getLength());<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>  private void checkSeekingConsistency(List&lt;DataBlockEncoder.EncodedSeeker&gt; encodedSeekers,<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      boolean seekBefore, Cell keyValue) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    Cell expectedKeyValue = null;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    ByteBuffer expectedKey = null;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    ByteBuffer expectedValue = null;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    for (DataBlockEncoder.EncodedSeeker seeker : encodedSeekers) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      seeker.seekToKeyInBlock(keyValue, seekBefore);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      seeker.rewind();<a name="line.358"></a>
 <span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>  private void testEncodersOnDataset(List&lt;KeyValue&gt; kvList, boolean includesMemstoreTS,<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      boolean includesTags) throws IOException {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    ByteBuffer unencodedDataBuf = RedundantKVGenerator.convertKvToByteBuffer(kvList,<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        includesMemstoreTS);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    HFileContext fileContext = new HFileContextBuilder().withIncludesMvcc(includesMemstoreTS)<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        .withIncludesTags(includesTags).build();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    for (DataBlockEncoding encoding : DataBlockEncoding.values()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      DataBlockEncoder encoder = encoding.getEncoder();<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      if (encoder == null) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        continue;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      HFileBlockEncodingContext encodingContext = new HFileBlockDefaultEncodingContext(encoding,<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          HFILEBLOCK_DUMMY_HEADER, fileContext);<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>      ByteArrayOutputStream baos = new ByteArrayOutputStream();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      baos.write(HFILEBLOCK_DUMMY_HEADER);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      DataOutputStream dos = new DataOutputStream(baos);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      encoder.startBlockEncoding(encodingContext, dos);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      for (KeyValue kv : kvList) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        encoder.encode(kv, encodingContext, dos);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      encoder.endBlockEncoding(encodingContext, dos, baos.getBuffer());<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      byte[] encodedData = baos.toByteArray();<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>      testAlgorithm(encodedData, unencodedDataBuf, encoder);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  @Test<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public void testZeroByte() throws IOException {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    List&lt;KeyValue&gt; kvList = new ArrayList&lt;&gt;();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    byte[] row = Bytes.toBytes("abcd");<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    byte[] family = new byte[] { 'f' };<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    byte[] qualifier0 = new byte[] { 'b' };<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    byte[] qualifier1 = new byte[] { 'c' };<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    byte[] value0 = new byte[] { 'd' };<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    byte[] value1 = new byte[] { 0x00 };<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    if (includesTags) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      kvList.add(new KeyValue(row, family, qualifier0, 0, value0,<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          new Tag[] { new ArrayBackedTag((byte) 1, "value1") }));<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      kvList.add(new KeyValue(row, family, qualifier1, 0, value1,<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          new Tag[] { new ArrayBackedTag((byte) 1, "value1") }));<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    } else {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      kvList.add(new KeyValue(row, family, qualifier0, 0, Type.Put, value0));<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      kvList.add(new KeyValue(row, family, qualifier1, 0, Type.Put, value1));<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    testEncodersOnDataset(kvList, includesMemstoreTS, includesTags);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  }<a name="line.407"></a>
+<span class="sourceLineNo">360</span>      Cell actualKeyValue = seeker.getCell();<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      ByteBuffer actualKey = null;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      actualKey = ByteBuffer.wrap(((KeyValue) seeker.getKey()).getKey());<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      ByteBuffer actualValue = seeker.getValueShallowCopy();<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>      if (expectedKeyValue != null) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        assertTrue(CellUtil.equals(expectedKeyValue, actualKeyValue));<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      } else {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        expectedKeyValue = actualKeyValue;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (expectedKey != null) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        assertEquals(expectedKey, actualKey);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      } else {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        expectedKey = actualKey;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>      if (expectedValue != null) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        assertEquals(expectedValue, actualValue);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      } else {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        expectedValue = actualValue;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private void testEncodersOnDataset(List&lt;KeyValue&gt; kvList, boolean includesMemstoreTS,<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      boolean includesTags) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    ByteBuffer unencodedDataBuf = RedundantKVGenerator.convertKvToByteBuffer(kvList,<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        includesMemstoreTS);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    HFileContext fileContext = new HFileContextBuilder().withIncludesMvcc(includesMemstoreTS)<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        .withIncludesTags(includesTags).build();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    for (DataBlockEncoding encoding : DataBlockEncoding.values()) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      DataBlockEncoder encoder = encoding.getEncoder();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      if (encoder == null) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        continue;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      HFileBlockEncodingContext encodingContext = new HFileBlockDefaultEncodingContext(encoding,<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          HFILEBLOCK_DUMMY_HEADER, fileContext);<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>      ByteArrayOutputStream baos = new ByteArrayOutputStream();<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      baos.write(HFILEBLOCK_DUMMY_HEADER);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      DataOutputStream dos = new DataOutputStream(baos);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      encoder.startBlockEncoding(encodingContext, dos);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      for (KeyValue kv : kvList) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        encoder.encode(kv, encodingContext, dos);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      encoder.endBlockEncoding(encodingContext, dos, baos.getBuffer());<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      byte[] encodedData = baos.toByteArray();<a name="line.407"></a>
 <span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  private void testAlgorithm(byte[] encodedData, ByteBuffer unencodedDataBuf,<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      DataBlockEncoder encoder) throws IOException {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    // decode<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    ByteArrayInputStream bais = new ByteArrayInputStream(encodedData, ENCODED_DATA_OFFSET,<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        encodedData.length - ENCODED_DATA_OFFSET);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    DataInputStream dis = new DataInputStream(bais);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    ByteBuffer actualDataset;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    HFileContext meta = new HFileContextBuilder().withHBaseCheckSum(false)<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        .withIncludesMvcc(includesMemstoreTS).withIncludesTags(includesTags)<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        .withCompression(Compression.Algorithm.NONE).build();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    actualDataset = encoder.decodeKeyValues(dis, encoder.newDataBlockDecodingContext(meta));<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    actualDataset.rewind();<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>    // this is because in case of prefix tree the decoded stream will not have<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    // the<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    // mvcc in it.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    assertEquals("Encoding -&gt; decoding gives different results for " + encoder,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        Bytes.toStringBinary(unencodedDataBuf), Bytes.toStringBinary(actualDataset));<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  }<a name="line.427"></a>
-<span class="sourceLineNo">428</span>}<a name="line.428"></a>
+<span class="sourceLineNo">409</span>      testAlgorithm(encodedData, unencodedDataBuf, encoder);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span>  @Test<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  public void testZeroByte() throws IOException {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    List&lt;KeyValue&gt; kvList = new ArrayList&lt;&gt;();<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    byte[] row = Bytes.toBytes("abcd");<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    byte[] family = new byte[] { 'f' };<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    byte[] qualifier0 = new byte[] { 'b' };<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    byte[] qualifier1 = new byte[] { 'c' };<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    byte[] value0 = new byte[] { 'd' };<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    byte[] value1 = new byte[] { 0x00 };<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    if (includesTags) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      kvList.add(new KeyValue(row, family, qualifier0, 0, value0,<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          new Tag[] { new ArrayBackedTag((byte) 1, "value1") }));<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      kvList.add(new KeyValue(row, family, qualifier1, 0, value1,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          new Tag[] { new ArrayBackedTag((byte) 1, "value1") }));<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    } else {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      kvList.add(new KeyValue(row, family, qualifier0, 0, Type.Put, value0));<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      kvList.add(new KeyValue(row, family, qualifier1, 0, Type.Put, value1));<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    testEncodersOnDataset(kvList, includesMemstoreTS, includesTags);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>  }<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span>  private void testAlgorithm(byte[] encodedData, ByteBuffer unencodedDataBuf,<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      DataBlockEncoder encoder) throws IOException {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // decode<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    ByteArrayInputStream bais = new ByteArrayInputStream(encodedData, ENCODED_DATA_OFFSET,<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        encodedData.length - ENCODED_DATA_OFFSET);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    DataInputStream dis = new DataInputStream(bais);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    ByteBuffer actualDataset;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    HFileContext meta = new HFileContextBuilder().withHBaseCheckSum(false)<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        .withIncludesMvcc(includesMemstoreTS).withIncludesTags(includesTags)<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        .withCompression(Compression.Algorithm.NONE).build();<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    actualDataset = encoder.decodeKeyValues(dis, encoder.newDataBlockDecodingContext(meta));<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    actualDataset.rewind();<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>    // this is because in case of prefix tree the decoded stream will not have<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    // the<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    // mvcc in it.<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    assertEquals("Encoding -&gt; decoding gives different results for " + encoder,<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        Bytes.toStringBinary(unencodedDataBuf), Bytes.toStringBinary(actualDataset));<a name="line.451"></a>
+<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
+<span class="sourceLineNo">453</span>}<a name="line.453"></a>
 
 
 


[28/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-summary.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-summary.html
index 85862c4..f46c7df 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-summary.html
@@ -138,6 +138,18 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></td>
+<td class="colLast">
+<div class="block">Performs authorization checks for a given user's assigned permissions.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;T extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</td>
+<td class="colLast">
+<div class="block">Cache of permissions, it is thread safe.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></td>
 <td class="colLast">
 <div class="block">Represents the result of an authorization check for logging and error
@@ -155,6 +167,18 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a></td>
+<td class="colLast">
+<div class="block">Represents an authorization for access whole cluster.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a></td>
+<td class="colLast">
+<div class="block">Represents an authorization for access for the given namespace.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></td>
 <td class="colLast">
 <div class="block">Base permissions instance representing the ability to perform a given set
@@ -175,16 +199,6 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></td>
-<td class="colLast">
-<div class="block">Performs authorization checks for a given user's assigned permissions</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;T extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></td>
 <td class="colLast">
 <div class="block">Represents an authorization for access for the given actions, optionally
@@ -195,8 +209,7 @@
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></td>
 <td class="colLast">
-<div class="block">Represents an authorization for access over the given table, column family
- plus qualifier, for the given user.</div>
+<div class="block">UserPermission consists of a user name and a permission.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -229,6 +242,10 @@
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index f594c43..b6b603e 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -86,6 +86,8 @@
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController</span></a> (implements org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.Interface, org.apache.hadoop.hbase.coprocessor.<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/BulkLoadObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">BulkLoadObserver</a>, org.apache.hadoop.hbase.coprocessor.<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/EndpointObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">EndpointObserver</a>, org.apache.hadoop.hbase.coprocessor.<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessor</a>, org.apache.hadoop.hbase.c
 oprocessor.<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterObserver</a>, org.apache.hadoop.hbase.coprocessor.<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionCoprocessor</a>, org.apache.hadoop.hbase.coprocessor.<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionObserver</a>, org.apache.hadoop.hbase.coprocessor.<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionServerCoprocessor</a>, org.apache.hadoop.hbase.coprocessor.<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionServerObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionServerObserver</a>)</
 li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlLists</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlUtil</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AuthManager</span></a> (implements java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AuthManager.PermissionCache</span></a>&lt;T&gt;</li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AuthResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.Params.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AuthResult.Params</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">CoprocessorWhitelistMasterObserver</span></a> (implements org.apache.hadoop.hbase.coprocessor.<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessor</a>, org.apache.hadoop.hbase.coprocessor.<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterObserver</a>)</li>
@@ -104,22 +106,19 @@
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">ShadedAccessControlUtil</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TableAuthManager</span></a> (implements java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TableAuthManager.PermissionCache</span></a>&lt;T&gt;</li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security"><span class="typeNameLink">User</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.InputUser.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessChecker.InputUser</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">UserPermission</span></a></li>
 <li type="circle">org.apache.hadoop.io.VersionedWritable (implements org.apache.hadoop.io.Writable)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TablePermission</span></a>
-<ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">UserPermission</span></a></li>
-</ul>
-</li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">GlobalPermission</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">NamespacePermission</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TablePermission</span></a></li>
 </ul>
 </li>
 </ul>
@@ -143,8 +142,9 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-use.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-use.html
index fbf1c96..f89d903 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-use.html
@@ -254,6 +254,16 @@
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/AccessController.OpType.html#org.apache.hadoop.hbase.security.access">AccessController.OpType</a>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/AuthManager.html#org.apache.hadoop.hbase.security.access">AuthManager</a>
+<div class="block">Performs authorization checks for a given user's assigned permissions.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/AuthManager.PermissionCache.html#org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>
+<div class="block">Cache of permissions, it is thread safe.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/AuthResult.html#org.apache.hadoop.hbase.security.access">AuthResult</a>
 <div class="block">Represents the result of an authorization check for logging and error
  reporting.</div>
@@ -263,6 +273,16 @@
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/AuthResult.Params.html#org.apache.hadoop.hbase.security.access">AuthResult.Params</a>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/GlobalPermission.html#org.apache.hadoop.hbase.security.access">GlobalPermission</a>
+<div class="block">Represents an authorization for access whole cluster.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/NamespacePermission.html#org.apache.hadoop.hbase.security.access">NamespacePermission</a>
+<div class="block">Represents an authorization for access for the given namespace.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/Permission.html#org.apache.hadoop.hbase.security.access">Permission</a>
 <div class="block">Base permissions instance representing the ability to perform a given set
  of actions.</div>
@@ -272,27 +292,21 @@
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/Permission.Action.html#org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.html#org.apache.hadoop.hbase.security.access">TableAuthManager</a>
-<div class="block">Performs authorization checks for a given user's assigned permissions</div>
-</td>
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/Permission.Scope.html#org.apache.hadoop.hbase.security.access">Permission.Scope</a>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.PermissionCache.html#org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/TablePermission.html#org.apache.hadoop.hbase.security.access">TablePermission</a>
 <div class="block">Represents an authorization for access for the given actions, optionally
  restricted to the given column family or column qualifier, over the
  given table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/UserPermission.html#org.apache.hadoop.hbase.security.access">UserPermission</a>
-<div class="block">Represents an authorization for access over the given table, column family
- plus qualifier, for the given user.</div>
+<div class="block">UserPermission consists of a user name and a permission.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/ZKPermissionWatcher.html#org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a>
 <div class="block">Handles synchronization of access control list entries and updates
  throughout all nodes in the cluster.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/class-use/User.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/class-use/User.html b/devapidocs/org/apache/hadoop/hbase/security/class-use/User.html
index c9349c6..607108a 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/class-use/User.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/class-use/User.html
@@ -1628,6 +1628,15 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#accessUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">accessUserTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Checks if the user has access to the full table or at least a family/qualifier
+ for the specified action.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#allow-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-java.lang.String-">allow</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -1635,7 +1644,7 @@
      <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#allow-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-byte:A-byte:A-">allow</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -1645,7 +1654,7 @@
      byte[]&nbsp;family,
      byte[]&nbsp;qualifier)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#allow-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-java.util.Map-">allow</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -1654,63 +1663,67 @@
      <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],? extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;?&gt;&gt;&nbsp;families)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Authorize a global permission based on ACLs for the given user and the
- user's groups.</div>
-</td>
-</tr>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeCell-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeCell</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+             <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in cell scope.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         byte[]&nbsp;family,
-         byte[]&nbsp;qualifier,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserFamily-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserFamily</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                   <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                   byte[]&nbsp;family,
+                   <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table:family scope.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         byte[]&nbsp;family,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserGlobal-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserGlobal</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                   <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in global scope.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Authorize a user for a given KV.</div>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserNamespace-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserNamespace</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                      <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in namespace scope.</div>
 </td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUser</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             byte[]&nbsp;family,
-             byte[]&nbsp;qualifier,
-             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                  <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                  byte[]&nbsp;family,
+                  byte[]&nbsp;qualifier,
+                  <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table:family:qualifier scope.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUser</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             byte[]&nbsp;family,
-             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks authorization to a given table and column family for a user, based on the
- stored user permissions.</div>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                  <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                  byte[]&nbsp;family,
+                  <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table:family scope.</div>
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                  <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                  <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table scope.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#checkCoveringPermission-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.AccessController.OpType-org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment-byte:A-java.util.Map-long-org.apache.hadoop.hbase.security.access.Permission.Action...-">checkCoveringPermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                        <a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a>&nbsp;request,
@@ -1722,12 +1735,12 @@
 <div class="block">Determine if cell ACLs covered by the operation grant access.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#checkForReservedTagPresence-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.client.Mutation-">checkForReservedTagPresence</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                            <a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;m)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#checkLockPermissions-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.RegionInfo:A-java.lang.String-">checkLockPermissions</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
@@ -1735,11 +1748,11 @@
                     <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regionInfos,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#checkSystemOrSuperUser-org.apache.hadoop.hbase.security.User-">checkSystemOrSuperUser</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;activeUser)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#deny-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-java.lang.String-">deny</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -1747,7 +1760,7 @@
     <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action,
     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#deny-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-byte:A-byte:A-">deny</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -1757,7 +1770,7 @@
     byte[]&nbsp;family,
     byte[]&nbsp;qualifier)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#deny-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-java.util.Map-">deny</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -1766,17 +1779,11 @@
     <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],? extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;?&gt;&gt;&nbsp;families)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getCellPermissionsForUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.Cell-">getCellPermissionsForUser</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                          <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#hasAccess-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccess</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#hasFamilyQualifierPermission-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment-java.util.Map-">hasFamilyQualifierPermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
@@ -1788,24 +1795,6 @@
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#matchPermission-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchPermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-               byte[]&nbsp;family,
-               byte[]&nbsp;qualifier,
-               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#matchPermission-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchPermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-               byte[]&nbsp;family,
-               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Returns true if the given user has a <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access"><code>TablePermission</code></a> matching up
- to the column family portion of a permission.</div>
-</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#permissionGranted-org.apache.hadoop.hbase.security.access.AccessController.OpType-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment-java.util.Map-org.apache.hadoop.hbase.security.access.Permission.Action...-">permissionGranted</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a>&nbsp;opType,
                  <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
@@ -1913,15 +1902,6 @@
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#userHasAccess-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">userHasAccess</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks if the user has access to the full table or at least a family/qualifier
- for the specified action.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#validateCallerWithFilterUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TablePermission-java.lang.String-">validateCallerWithFilterUser</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;caller,
                             <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;tPerm,
@@ -1936,7 +1916,7 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#AccessControlFilter-org.apache.hadoop.hbase.security.access.TableAuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">AccessControlFilter</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;mgr,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#AccessControlFilter-org.apache.hadoop.hbase.security.access.AuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">AccessControlFilter</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;mgr,
                    <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;ugi,
                    <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                    <a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access">AccessControlFilter.Strategy</a>&nbsp;strategy,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 7ba3a64..67b7e3a 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -192,8 +192,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html b/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html
index 97d4369..27a2919 100644
--- a/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html
+++ b/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.281">RestoreSnapshotHelper.RestoreMetaChanges</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.282">RestoreSnapshotHelper.RestoreMetaChanges</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Describe the set of operations needed to update hbase:meta after restore.</div>
 </li>
@@ -272,7 +272,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>parentsMap</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.282">parentsMap</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.283">parentsMap</a></pre>
 </li>
 </ul>
 <a name="htd">
@@ -281,7 +281,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>htd</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.283">htd</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.284">htd</a></pre>
 </li>
 </ul>
 <a name="regionsToRestore">
@@ -290,7 +290,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsToRestore</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.285">regionsToRestore</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.286">regionsToRestore</a></pre>
 </li>
 </ul>
 <a name="regionsToRemove">
@@ -299,7 +299,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsToRemove</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.286">regionsToRemove</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.287">regionsToRemove</a></pre>
 </li>
 </ul>
 <a name="regionsToAdd">
@@ -308,7 +308,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>regionsToAdd</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.287">regionsToAdd</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.288">regionsToAdd</a></pre>
 </li>
 </ul>
 </li>
@@ -325,7 +325,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RestoreMetaChanges</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.289">RestoreMetaChanges</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.290">RestoreMetaChanges</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;parentsMap)</pre>
 </li>
 </ul>
@@ -343,7 +343,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.294">getTableDescriptor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.295">getTableDescriptor</a>()</pre>
 </li>
 </ul>
 <a name="getParentToChildrenPairMap--">
@@ -352,7 +352,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getParentToChildrenPairMap</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.302">getParentToChildrenPairMap</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.303">getParentToChildrenPairMap</a>()</pre>
 <div class="block">Returns the map of parent-children_pair.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -366,7 +366,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasRegionsToAdd</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.309">hasRegionsToAdd</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.310">hasRegionsToAdd</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if there're new regions</dd>
@@ -379,7 +379,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsToAdd</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.319">getRegionsToAdd</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.320">getRegionsToAdd</a>()</pre>
 <div class="block">Returns the list of new regions added during the on-disk restore.
  The caller is responsible to add the regions to META.
  e.g MetaTableAccessor.addRegionsToMeta(...)</div>
@@ -395,7 +395,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasRegionsToRestore</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.326">hasRegionsToRestore</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.327">hasRegionsToRestore</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if there're regions to restore</dd>
@@ -408,7 +408,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsToRestore</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.335">getRegionsToRestore</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.336">getRegionsToRestore</a>()</pre>
 <div class="block">Returns the list of 'restored regions' during the on-disk restore.
  The caller is responsible to add the regions to hbase:meta if not present.</div>
 <dl>
@@ -423,7 +423,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasRegionsToRemove</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.342">hasRegionsToRemove</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.343">hasRegionsToRemove</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if there're regions to remove</dd>
@@ -436,7 +436,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsToRemove</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.352">getRegionsToRemove</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.353">getRegionsToRemove</a>()</pre>
 <div class="block">Returns the list of regions removed during the on-disk restore.
  The caller is responsible to remove the regions from META.
  e.g. MetaTableAccessor.deleteRegions(...)</div>
@@ -452,7 +452,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setNewRegions</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.356">setNewRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;hris)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.357">setNewRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;hris)</pre>
 </li>
 </ul>
 <a name="addRegionToRemove-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -461,7 +461,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegionToRemove</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.364">addRegionToRemove</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.365">addRegionToRemove</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
 </li>
 </ul>
 <a name="addRegionToRestore-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -470,7 +470,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegionToRestore</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.371">addRegionToRestore</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.372">addRegionToRestore</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
 </li>
 </ul>
 <a name="updateMetaParentRegions-org.apache.hadoop.hbase.client.Connection-java.util.List-">
@@ -479,7 +479,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>updateMetaParentRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.378">updateMetaParentRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#line.379">updateMetaParentRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regionInfos)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>


[38/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html b/devapidocs/org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html
index cb74478..ce837e5 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.Params.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html" target="_top">Frames</a></li>
@@ -459,7 +459,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.Params.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/GlobalPermission.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/GlobalPermission.html b/devapidocs/org/apache/hadoop/hbase/security/access/GlobalPermission.html
new file mode 100644
index 0000000..cb72507
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/GlobalPermission.html
@@ -0,0 +1,404 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GlobalPermission (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="GlobalPermission (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/GlobalPermission.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/GlobalPermission.html" target="_top">Frames</a></li>
+<li><a href="GlobalPermission.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
+<h2 title="Class GlobalPermission" class="title">Class GlobalPermission</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.io.VersionedWritable</li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access.Permission</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.security.access.GlobalPermission</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd>org.apache.hadoop.io.Writable</dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/GlobalPermission.html#line.27">GlobalPermission</a>
+extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></pre>
+<div class="block">Represents an authorization for access whole cluster.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#ACTION_BY_CODE">ACTION_BY_CODE</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#actions">actions</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#scope">scope</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#SCOPE_BY_CODE">SCOPE_BY_CODE</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#VERSION">VERSION</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html#GlobalPermission--">GlobalPermission</a></span>()</code>
+<div class="block">Default constructor for Writable, do not use</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html#GlobalPermission-byte:A-">GlobalPermission</a></span>(byte[]&nbsp;actionCode)</code>
+<div class="block">Construct a global permission.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html#GlobalPermission-org.apache.hadoop.hbase.security.access.Permission.Action...-">GlobalPermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
+<div class="block">Construct a global permission.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html#equals-java.lang.Object-">equals</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html#hashCode--">hashCode</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html#toString--">toString</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#equalsExceptActions-java.lang.Object-">equalsExceptActions</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getAccessScope--">getAccessScope</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getActions--">getActions</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getVersion--">getVersion</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#implies-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#rawExpression--">rawExpression</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#readFields-java.io.DataInput-">readFields</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#s
 etActions-org.apache.hadoop.hbase.security.access.Permission.Action:A-">setActions</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#write-java.io.DataOutput-">write</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.htm
 l?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="GlobalPermission--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>GlobalPermission</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/GlobalPermission.html#line.30">GlobalPermission</a>()</pre>
+<div class="block">Default constructor for Writable, do not use</div>
+</li>
+</ul>
+<a name="GlobalPermission-org.apache.hadoop.hbase.security.access.Permission.Action...-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>GlobalPermission</h4>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/GlobalPermission.html#line.39">GlobalPermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
+<div class="block">Construct a global permission.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>assigned</code> - assigned actions</dd>
+</dl>
+</li>
+</ul>
+<a name="GlobalPermission-byte:A-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>GlobalPermission</h4>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/GlobalPermission.html#line.48">GlobalPermission</a>(byte[]&nbsp;actionCode)</pre>
+<div class="block">Construct a global permission.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>actionCode</code> - assigned actions</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="hashCode--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>hashCode</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/GlobalPermission.html#line.54">hashCode</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#hashCode--">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="equals-java.lang.Object-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>equals</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/GlobalPermission.html#line.59">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#equals-java.lang.Object-">equals</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="toString--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/GlobalPermission.html#line.64">toString</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#toString--">toString</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/GlobalPermission.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/GlobalPermission.html" target="_top">Frames</a></li>
+<li><a href="GlobalPermission.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/NamespacePermission.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/NamespacePermission.html b/devapidocs/org/apache/hadoop/hbase/security/access/NamespacePermission.html
new file mode 100644
index 0000000..472220b
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/NamespacePermission.html
@@ -0,0 +1,564 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NamespacePermission (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="NamespacePermission (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/NamespacePermission.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/NamespacePermission.html" target="_top">Frames</a></li>
+<li><a href="NamespacePermission.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
+<h2 title="Class NamespacePermission" class="title">Class NamespacePermission</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.io.VersionedWritable</li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access.Permission</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.security.access.NamespacePermission</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd>org.apache.hadoop.io.Writable</dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.34">NamespacePermission</a>
+extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></pre>
+<div class="block">Represents an authorization for access for the given namespace.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#namespace">namespace</a></span></code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#ACTION_BY_CODE">ACTION_BY_CODE</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#actions">actions</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#scope">scope</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#SCOPE_BY_CODE">SCOPE_BY_CODE</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#VERSION">VERSION</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#NamespacePermission--">NamespacePermission</a></span>()</code>
+<div class="block">Default constructor for Writable, do not use</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#NamespacePermission-java.lang.String-byte:A-">NamespacePermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                   byte[]&nbsp;actionCode)</code>
+<div class="block">Construct a namespace permission.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#NamespacePermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">NamespacePermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                   <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
+<div class="block">Construct a namespace permission.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#equals-java.lang.Object-">equals</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#equalsExceptActions-java.lang.Object-">equalsExceptActions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</code>
+<div class="block">Check if two permission equals regardless of actions.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#getNamespace--">getNamespace</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#hashCode--">hashCode</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#implies-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+       <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">check if given action is granted in given namespace.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#rawExpression--">rawExpression</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#readFields-java.io.DataInput-">readFields</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in)</code>&nbsp;</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#toString--">toString</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#write-java.io.DataOutput-">write</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getAccessScope--">getAccessScope</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getActions--">getActions</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getVersion--">getVersion</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#implies-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#setActions-org.apache.hadoop.hbase.security.access.Permission.Action:A-">setActions</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.htm
 l?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="namespace">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>namespace</h4>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.36">namespace</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="NamespacePermission--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NamespacePermission</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.39">NamespacePermission</a>()</pre>
+<div class="block">Default constructor for Writable, do not use</div>
+</li>
+</ul>
+<a name="NamespacePermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NamespacePermission</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.49">NamespacePermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                           <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
+<div class="block">Construct a namespace permission.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>namespace</code> - namespace's name</dd>
+<dd><code>assigned</code> - assigned actions</dd>
+</dl>
+</li>
+</ul>
+<a name="NamespacePermission-java.lang.String-byte:A-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>NamespacePermission</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.60">NamespacePermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                           byte[]&nbsp;actionCode)</pre>
+<div class="block">Construct a namespace permission.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>namespace</code> - namespace's name</dd>
+<dd><code>actionCode</code> - assigned actions</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="getNamespace--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNamespace</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.66">getNamespace</a>()</pre>
+</li>
+</ul>
+<a name="implies-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>implies</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.76">implies</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                       <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+<div class="block">check if given action is granted in given namespace.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>namespace</code> - namespace's name</dd>
+<dd><code>action</code> - action to be checked</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if granted, false otherwise</dd>
+</dl>
+</li>
+</ul>
+<a name="equalsExceptActions-java.lang.Object-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>equalsExceptActions</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.81">equalsExceptActions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#equalsExceptActions-java.lang.Object-">Permission</a></code></span></div>
+<div class="block">Check if two permission equals regardless of actions. It is useful when
+ merging a new permission with an existed permission which needs to check two permissions's
+ fields.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#equalsExceptActions-java.lang.Object-">equalsExceptActions</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>obj</code> - instance</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if equals, false otherwise</dd>
+</dl>
+</li>
+</ul>
+<a name="hashCode--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>hashCode</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.90">hashCode</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#hashCode--">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="equals-java.lang.Object-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>equals</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.95">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#equals-java.lang.Object-">equals</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="toString--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.100">toString</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#toString--">toString</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="rawExpression--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rawExpression</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.105">rawExpression</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#rawExpression--">rawExpression</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="readFields-java.io.DataInput-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>readFields</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.111">readFields</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in)
+                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code>readFields</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.io.Writable</code></dd>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#readFields-java.io.DataInput-">readFields</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="write-java.io.DataOutput-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>write</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html#line.117">write</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)
+           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code>write</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.io.Writable</code></dd>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#write-java.io.DataOutput-">write</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/NamespacePermission.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/NamespacePermission.html" target="_top">Frames</a></li>
+<li><a href="NamespacePermission.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/Permission.Action.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/Permission.Action.html b/devapidocs/org/apache/hadoop/hbase/security/access/Permission.Action.html
index 9589744..1256c64 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/Permission.Action.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/Permission.Action.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/Permission.Action.html" target="_top">Frames</a></li>
@@ -123,7 +123,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.46">Permission.Action</a>
+public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.47">Permission.Action</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&gt;</pre>
 </li>
 </ul>
@@ -243,7 +243,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>READ</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.47">READ</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.48">READ</a></pre>
 </li>
 </ul>
 <a name="WRITE">
@@ -252,7 +252,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>WRITE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.47">WRITE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.48">WRITE</a></pre>
 </li>
 </ul>
 <a name="EXEC">
@@ -261,7 +261,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>EXEC</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.47">EXEC</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.48">EXEC</a></pre>
 </li>
 </ul>
 <a name="CREATE">
@@ -270,7 +270,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>CREATE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.47">CREATE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.48">CREATE</a></pre>
 </li>
 </ul>
 <a name="ADMIN">
@@ -279,7 +279,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ADMIN</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.47">ADMIN</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.48">ADMIN</a></pre>
 </li>
 </ul>
 </li>
@@ -296,7 +296,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>code</h4>
-<pre>private final&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.49">code</a></pre>
+<pre>private final&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.50">code</a></pre>
 </li>
 </ul>
 </li>
@@ -313,7 +313,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.45">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.44">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -333,7 +333,7 @@ for (Permission.Action c : Permission.Action.values())
 <ul class="blockList">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.45">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.44">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 
@@ -355,7 +355,7 @@ not permitted.)</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>code</h4>
-<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.54">code</a>()</pre>
+<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html#line.55">code</a>()</pre>
 </li>
 </ul>
 </li>
@@ -387,7 +387,7 @@ not permitted.)</div>
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/Permission.Action.html" target="_top">Frames</a></li>


[50/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 0ee5ffc..fdbae97 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -291,10 +291,10 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>3806</td>
+<td>3809</td>
 <td>0</td>
 <td>0</td>
-<td>15073</td></tr></table></div>
+<td>14996</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -8232,12 +8232,12 @@
 <td><a href="#org.apache.hadoop.hbase.security.access.AccessControlLists.java">org/apache/hadoop/hbase/security/access/AccessControlLists.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>16</td></tr>
+<td>13</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.AccessControlUtil.java">org/apache/hadoop/hbase/security/access/AccessControlUtil.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>40</td></tr>
+<td>36</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.AccessController.java">org/apache/hadoop/hbase/security/access/AccessController.java</a></td>
 <td>0</td>
@@ -8252,7 +8252,7 @@
 <td><a href="#org.apache.hadoop.hbase.security.access.Permission.java">org/apache/hadoop/hbase/security/access/Permission.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>7</td></tr>
+<td>2</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.SecureTestUtil.java">org/apache/hadoop/hbase/security/access/SecureTestUtil.java</a></td>
 <td>0</td>
@@ -8262,62 +8262,52 @@
 <td><a href="#org.apache.hadoop.hbase.security.access.ShadedAccessControlUtil.java">org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>49</td></tr>
+<td>46</td></tr>
 <tr class="b">
-<td><a href="#org.apache.hadoop.hbase.security.access.TableAuthManager.java">org/apache/hadoop/hbase/security/access/TableAuthManager.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>43</td></tr>
-<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.TablePermission.java">org/apache/hadoop/hbase/security/access/TablePermission.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>10</td></tr>
-<tr class="b">
+<td>1</td></tr>
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestAccessControlFilter.java">org/apache/hadoop/hbase/security/access/TestAccessControlFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestAccessController.java">org/apache/hadoop/hbase/security/access/TestAccessController.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>17</td></tr>
-<tr class="b">
+<td>16</td></tr>
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestAccessController2.java">org/apache/hadoop/hbase/security/access/TestAccessController2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestCellACLWithMultipleVersions.java">org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestCellACLs.java">org/apache/hadoop/hbase/security/access/TestCellACLs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestNamespaceCommands.java">org/apache/hadoop/hbase/security/access/TestNamespaceCommands.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestTablePermissions.java">org/apache/hadoop/hbase/security/access/TestTablePermissions.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>13</td></tr>
-<tr class="a">
+<td>7</td></tr>
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.TestWithDisabledAuthorization.java">org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
-<td><a href="#org.apache.hadoop.hbase.security.access.UserPermission.java">org/apache/hadoop/hbase/security/access/UserPermission.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>3</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.access.ZKPermissionWatcher.java">org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.java</a></td>
 <td>0</td>
@@ -9729,7 +9719,7 @@
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#NeedBraces">NeedBraces</a></td>
-<td>1792</td>
+<td>1779</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>coding</td>
@@ -9754,7 +9744,7 @@
 <tr class="a">
 <td>design</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_design.html#FinalClass">FinalClass</a></td>
-<td>51</td>
+<td>50</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -9796,7 +9786,7 @@
 <li>sortStaticImportsAlphabetically: <tt>&quot;true&quot;</tt></li>
 <li>groups: <tt>&quot;*,org.apache.hbase.thirdparty,org.apache.hadoop.hbase.shaded&quot;</tt></li>
 <li>option: <tt>&quot;top&quot;</tt></li></ul></td>
-<td>1145</td>
+<td>1142</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -9819,24 +9809,24 @@
 <li>caseIndent: <tt>&quot;2&quot;</tt></li>
 <li>basicOffset: <tt>&quot;2&quot;</tt></li>
 <li>lineWrappingIndentation: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>4805</td>
+<td>4803</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>javadoc</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>731</td>
+<td>730</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3494</td>
+<td>3453</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_misc.html#ArrayTypeStyle">ArrayTypeStyle</a></td>
-<td>144</td>
+<td>139</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -9849,7 +9839,7 @@
 <ul>
 <li>max: <tt>&quot;100&quot;</tt></li>
 <li>ignorePattern: <tt>&quot;^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated&quot;</tt></li></ul></td>
-<td>1442</td>
+<td>1431</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -19125,7 +19115,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 0 has parse error. Details: no viable alternative at input '   *' while parsing JAVADOC_TAG</td>
 <td>117</td></tr>
 <tr class="a">
@@ -46796,7 +46786,7 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>304</td></tr></table></div>
+<td>306</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.io.encoding.TestEncodedSeekers.java">org/apache/hadoop/hbase/io/encoding/TestEncodedSeekers.java</h3>
 <table border="0" class="table table-striped">
@@ -96944,397 +96934,361 @@
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call rparen' has incorrect indentation level 10, expected level should be 6.</td>
-<td>185</td></tr>
+<td>184</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 102).</td>
-<td>245</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>334</td></tr>
-<tr class="a">
+<td>336</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>335</td></tr>
-<tr class="b">
+<td>337</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>403</td></tr>
-<tr class="a">
+<td>413</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>405</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 107).</td>
-<td>414</td></tr>
+<td>415</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 106).</td>
-<td>465</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>484</td></tr>
-<tr class="a">
+<td>496</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>514</td></tr>
-<tr class="b">
+<td>526</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>743</td></tr>
-<tr class="a">
+<td>752</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>818</td></tr>
-<tr class="b">
+<td>860</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
-<td>855</td></tr>
-<tr class="a">
+<td>897</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>867</td></tr></table></div>
+<td>909</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.AccessControlUtil.java">org/apache/hadoop/hbase/security/access/AccessControlUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.protobuf.ProtobufUtil' import.</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.protobuf.ByteString' import.</td>
 <td>38</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class AccessControlUtil should be declared as final.</td>
 <td>45</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>320</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>321</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>misc</td>
-<td>ArrayTypeStyle</td>
-<td>Array brackets at illegal position.</td>
-<td>365</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>misc</td>
-<td>ArrayTypeStyle</td>
-<td>Array brackets at illegal position.</td>
-<td>380</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>414</td></tr>
-<tr class="a">
+<td>389</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>415</td></tr>
-<tr class="b">
+<td>390</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>416</td></tr>
-<tr class="a">
+<td>391</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>417</td></tr>
-<tr class="b">
+<td>392</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>418</td></tr>
-<tr class="a">
+<td>393</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>419</td></tr>
-<tr class="b">
+<td>394</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>420</td></tr>
-<tr class="a">
+<td>395</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>421</td></tr>
-<tr class="b">
+<td>396</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>422</td></tr>
-<tr class="a">
+<td>397</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>423</td></tr>
-<tr class="b">
+<td>398</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>437</td></tr>
-<tr class="a">
+<td>412</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>438</td></tr>
-<tr class="b">
+<td>413</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>439</td></tr>
-<tr class="a">
+<td>414</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>440</td></tr>
-<tr class="b">
+<td>415</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>441</td></tr>
-<tr class="a">
+<td>416</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>442</td></tr>
-<tr class="b">
+<td>417</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>443</td></tr>
-<tr class="a">
+<td>418</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>444</td></tr>
-<tr class="b">
+<td>419</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>445</td></tr>
-<tr class="a">
+<td>420</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>446</td></tr>
-<tr class="b">
+<td>421</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>518</td></tr>
-<tr class="a">
+<td>492</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
-<td>521</td></tr>
-<tr class="b">
+<td>495</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
-<td>528</td></tr>
-<tr class="a">
+<td>502</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>545</td></tr>
-<tr class="b">
+<td>519</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>571</td></tr>
-<tr class="a">
+<td>545</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 116).</td>
-<td>581</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>682</td></tr>
+<td>555</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>711</td></tr>
+<td>656</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>728</td></tr>
+<td>685</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>767</td></tr>
+<td>702</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>781</td></tr>
+<td>741</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>819</td></tr>
+<td>755</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>793</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>897</td></tr></table></div>
+<td>889</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.AccessController.java">org/apache/hadoop/hbase/security/access/AccessController.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.ByteRange' import.</td>
 <td>126</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 10, expected level should be 6.</td>
 <td>295</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>394</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>536</td></tr>
-<tr class="b">
+<td>535</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 166 lines (max allowed is 150).</td>
-<td>538</td></tr>
-<tr class="a">
+<td>537</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>651</td></tr>
-<tr class="b">
+<td>650</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>887</td></tr>
-<tr class="a">
+<td>886</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1121</td></tr>
-<tr class="b">
+<td>1120</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>1217</td></tr>
+<td>1216</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
+<td>1383</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
@@ -97345,7 +97299,7 @@
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
-<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1385</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
@@ -97357,13 +97311,13 @@
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
+<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1387</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
-<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1388</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
@@ -97375,90 +97329,84 @@
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
+<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1390</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
-<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1391</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>1392</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1990</td></tr>
-<tr class="a">
+<td>1989</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1994</td></tr>
-<tr class="b">
+<td>1993</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2003</td></tr>
-<tr class="a">
+<td>2002</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2007</td></tr>
-<tr class="b">
+<td>2006</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 11, expected level should be 12.</td>
-<td>2061</td></tr>
-<tr class="a">
+<td>2065</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2389</td></tr>
-<tr class="b">
+<td>2397</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2392</td></tr></table></div>
+<td>2400</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.AuthResult.java">org/apache/hadoop/hbase/security/access/AuthResult.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.Cell' import.</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 29 should have line break after.</td>
 <td>132</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>296</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -97467,54 +97415,24 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.Permission.java">org/apache/hadoop/hbase/security/access/Permission.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
-<td>30</td></tr>
-<tr class="b">
+<td>31</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 24 should have line break after.</td>
-<td>54</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>misc</td>
-<td>ArrayTypeStyle</td>
-<td>Array brackets at illegal position.</td>
-<td>81</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>137</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>163</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>165</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'else' construct must use '{}'s.</td>
-<td>167</td></tr></table></div>
+<td>55</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.SecureTestUtil.java">org/apache/hadoop/hbase/security/access/SecureTestUtil.java</h3>
 <table border="0" class="table table-striped">
@@ -97784,433 +97702,94 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>154</td></tr>
+<td>152</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>155</td></tr>
+<td>153</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
-<td>Line is longer than 100 characters (found 107).</td>
-<td>177</td></tr>
+<td>Line is longer than 100 characters (found 105).</td>
+<td>174</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
-<td>Line is longer than 100 characters (found 115).</td>
-<td>179</td></tr>
+<td>Line is longer than 100 characters (found 113).</td>
+<td>175</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>180</td></tr>
+<td>190</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
-<td>Line is longer than 100 characters (found 103).</td>
-<td>194</td></tr>
+<td>Line is longer than 100 characters (found 109).</td>
+<td>191</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
-<td>Line is longer than 100 characters (found 111).</td>
-<td>196</td></tr>
+<td>Line is longer than 100 characters (found 102).</td>
+<td>211</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>misc</td>
-<td>ArrayTypeStyle</td>
-<td>Array brackets at illegal position.</td>
-<td>206</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
-<td>Line is longer than 100 characters (found 108).</td>
-<td>220</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>misc</td>
-<td>ArrayTypeStyle</td>
-<td>Array brackets at illegal position.</td>
-<td>223</td></tr>
+<td>Line is longer than 100 characters (found 110).</td>
+<td>212</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
-<td>240</td></tr>
+<td>233</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 119).</td>
-<td>242</td></tr>
+<td>235</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
-<td>262</td></tr>
+<td>255</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 137).</td>
-<td>266</td></tr>
+<td>259</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 115).</td>
-<td>267</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 141).</td>
-<td>284</td></tr></table></div>
-<div class="section">
-<h3 id="org.apache.hadoop.hbase.security.access.TableAuthManager.java">org/apache/hadoop/hbase/security/access/TableAuthManager.java</h3>
-<table border="0" class="table table-striped">
-<tr class="a">
-<th>Severity</th>
-<th>Category</th>
-<th>Rule</th>
-<th>Message</th>
-<th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>imports</td>
-<td>ImportOrder</td>
-<td>Wrong order for 'java.io.Closeable' import.</td>
-<td>28</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>imports</td>
-<td>ImportOrder</td>
-<td>Wrong order for 'org.apache.hadoop.hbase.exceptions.DeserializationException' import.</td>
-<td>42</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>design</td>
-<td>FinalClass</td>
-<td>Class TableAuthManager should be declared as final.</td>
-<td>55</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>211</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>238</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>239</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>262</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>263</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>291</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>292</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>312</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>313</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>435</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>436</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>437</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>438</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>448</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>462</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>463</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>464</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>468</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>493</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>494</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>495</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>496</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>497</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>506</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>525</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>526</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>527</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>535</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>662</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>663</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>664</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>676</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>677</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>678</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>690</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>691</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>692</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>704</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>705</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>706</td></tr></table></div>
+<td>260</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TablePermission.java">org/apache/hadoop/hbase/security/access/TablePermission.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
-<td>29</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>97</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>114</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>131</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>142</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'if' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>321</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'if' child has incorrect indentation level 7, expected level should be 6.</td>
-<td>371</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>381</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>383</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'else' construct must use '{}'s.</td>
-<td>385</td></tr></table></div>
+<td>29</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestAccessControlFilter.java">org/apache/hadoop/hbase/security/access/TestAccessControlFilter.java</h3>
 <table border="0" class="table table-striped">
@@ -98288,77 +97867,71 @@
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 165 lines (max allowed is 150).</td>
-<td>1771</td></tr>
+<td>1769</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 14, expected level should be 12.</td>
-<td>1845</td></tr>
+<td>1843</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 14, expected level should be 12.</td>
-<td>1846</td></tr>
+<td>1844</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 14, expected level should be 12.</td>
-<td>1855</td></tr>
+<td>1853</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 14, expected level should be 12.</td>
-<td>1856</td></tr>
+<td>1854</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
-<td>2249</td></tr>
+<td>2247</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
-<td>2477</td></tr>
+<td>2475</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
-<td>2747</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 104).</td>
-<td>2761</td></tr></table></div>
+<td>2745</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestAccessController2.java">org/apache/hadoop/hbase/security/access/TestAccessController2.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>300</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>326</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -98367,13 +97940,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestCellACLWithMultipleVersions.java">org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -98382,19 +97955,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestCellACLs.java">org/apache/hadoop/hbase/security/access/TestCellACLs.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 221 lines (max allowed is 150).</td>
 <td>151</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -98403,19 +97976,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestNamespaceCommands.java">org/apache/hadoop/hbase/security/access/TestNamespaceCommands.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>167</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -98424,48 +97997,18 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestTablePermissions.java">org/apache/hadoop/hbase/security/access/TestTablePermissions.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>132</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 114).</td>
-<td>248</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 101).</td>
-<td>252</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 101).</td>
-<td>260</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 106).</td>
-<td>342</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 106).</td>
-<td>343</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
@@ -98494,120 +98037,87 @@
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
-<td>Line is longer than 100 characters (found 106).</td>
-<td>366</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
 <td>Line is longer than 100 characters (found 120).</td>
-<td>397</td></tr>
-<tr class="a">
+<td>393</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 20, expected level should be 19.</td>
-<td>423</td></tr></table></div>
+<td>420</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestWithDisabledAuthorization.java">org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 170 lines (max allowed is 150).</td>
 <td>242</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 10.</td>
 <td>401</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be 10.</td>
 <td>403</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 301 lines (max allowed is 150).</td>
 <td>473</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>976</td></tr></table></div>
 <div class="section">
-<h3 id="org.apache.hadoop.hbase.security.access.UserPermission.java">org/apache/hadoop/hbase/security/access/UserPermission.java</h3>
-<table border="0" class="table table-striped">
-<tr class="b">
-<th>Severity</th>
-<th>Category</th>
-<th>Rule</th>
-<th>Message</th>
-<th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>imports</td>
-<td>ImportOrder</td>
-<td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
-<td>29</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>70</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>82</td></tr></table></div>
-<div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.ZKPermissionWatcher.java">org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.Closeable' import.</td>
 <td>34</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>231</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>258</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>259</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -98616,19 +98126,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.AuthenticationKey.java">org/apache/hadoop/hbase/security/token/AuthenticationKey.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.DataInput' import.</td>
 <td>23</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -98637,19 +98147,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.AuthenticationTokenIdentifier.java">org/apache/hadoop/hbase/security/token/AuthenticationTokenIdentifier.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.protobuf.ProtobufUtil' import.</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -98658,31 +98168,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.AuthenticationTokenSecretManager.java">org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td>30</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -98691,13 +98201,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.AuthenticationTokenSelector.java">org/apache/hadoop/hbase/security/token/AuthenticationTokenSelector.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -98706,13 +98216,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.FsDelegationToken.java">org/apache/hadoop/hbase/security/token/FsDelegationToken.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -98721,19 +98231,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.SecureTestCluster.java">org/apache/hadoop/hbase/security/token/SecureTestCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.File' import.</td>
 <td>32</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -98742,31 +98252,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.TestTokenAuthentication.java">org/apache/hadoop/hbase/security/token/TestTokenAuthentication.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'lambda arguments' has incorrect indentation level 10, expected level should be 8.</td>
 <td>274</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>445</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>446</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -98775,13 +98285,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.TestZKSecretWatcher.java">org/apache/hadoop/hbase/security/token/TestZKSecretWatcher.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -98790,13 +98300,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.TokenProvider.java">org/apache/hadoop/hbase/security/token/TokenProvider.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -98805,37 +98315,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.TokenUtil.java">org/apache/hadoop/hbase/security/token/TokenUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.protobuf.ByteString' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.zookeeper.ZKClusterId' import.</td>
 <td>38</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>51</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -98844,19 +98354,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.ZKSecretWatcher.java">org/apache/hadoop/hbase/security/token/ZKSecretWatcher.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -98865,25 +98375,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.CellVisibility.java">org/apache/hadoop/hbase/security/visibility/CellVisibility.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>67</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -98892,55 +98402,55 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.DefaultVisibilityLabelServiceImpl.java">org/apache/hadoop/hbase/security/visibility/DefaultVisibilityLabelServiceImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>343</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>344</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>386</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>423</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>621</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>633</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>648</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -98949,13 +98459,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.DefinedSetFilterScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/DefinedSetFilterScanLabelGenerator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -98964,13 +98474,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.EnforcingScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/EnforcingScanLabelGenerator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -98979,13 +98489,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.ExpAsStringVisibilityLabelServiceImpl.java">org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -98994,13 +98504,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.ExpressionExpander.java">org/apache/hadoop/hbase/security/visibility/ExpressionExpander.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -99009,73 +98519,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.ExpressionParser.java">org/apache/hadoop/hbase/security/visibility/ExpressionParser.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.security.visibility.expression.ExpressionNode' import.</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>303</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>304</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>305</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>306</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>307</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>308</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>309</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -99084,13 +98594,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.FeedUserAuthScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/FeedUserAuthScanLabelGenerator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -99099,25 +98609,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.LabelFilteringScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/LabelFilteringScanLabelGenerator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>46</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -99126,13 +98636,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.LoadTestDataGeneratorWithVisibilityLabels.java">org/apache/hadoop/hbase/security/visibility/LoadTestDataGeneratorWithVisibilityLabels.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -99141,25 +98651,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.ScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/ScanLabelGenerator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configurable' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>36</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -99168,13 +98678,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.SimpleScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/SimpleScanLabelGenerator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -99183,13 +98693,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestExpressionExpander.java">org/apache/hadoop/hbase/security/visibility/TestExpressionExpander.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -99198,19 +98708,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestExpressionParser.java">org/apache/hadoop/hbase/security/visibility/TestExpressionParser.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 253 lines (max allowed is 150).</td>
 <td>44</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -99219,31 +98729,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabels.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>266</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>379</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>407</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -99252,13 +98762,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsOpWithDifferentUsersNoACL.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsOpWithDifferentUsersNoACL.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -99267,37 +98777,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsReplication.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsReplication.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>119</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>122</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>123</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>125</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -99306,13 +98816,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithACL.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithACL.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -99321,13 +98831,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithCustomVisLabService.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithCustomVisLabService.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -99336,13 +98846,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithDefaultVisLabelService.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -99351,13 +98861,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithDeletes.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -99366,13 +98876,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLablesWithGroups.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLablesWithGroups.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -99381,235 +98891,235 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityClient.java">org/apache/hadoop/hbase/security/visibility/VisibilityClient.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>55</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>62</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>72</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>73</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>75</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>89</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>92</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>102</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>103</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>105</td></tr>
-<tr 

<TRUNCATED>

[25/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html
index e1f2ceb..78cac0b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlLists.html
@@ -139,503 +139,503 @@
 <span class="sourceLineNo">131</span>   * @throws IOException in the case of an error accessing the metadata table<a name="line.131"></a>
 <span class="sourceLineNo">132</span>   */<a name="line.132"></a>
 <span class="sourceLineNo">133</span>  static void addUserPermission(Configuration conf, UserPermission userPerm, Table t,<a name="line.133"></a>
-<span class="sourceLineNo">134</span>                                boolean mergeExistingPermissions) throws IOException {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    Permission.Action[] actions = userPerm.getActions();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    byte[] rowKey = userPermissionRowKey(userPerm);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    Put p = new Put(rowKey);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    byte[] key = userPermissionKey(userPerm);<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    if ((actions == null) || (actions.length == 0)) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      String msg = "No actions associated with user '" + Bytes.toString(userPerm.getUser()) + "'";<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      LOG.warn(msg);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      throw new IOException(msg);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    Set&lt;Permission.Action&gt; actionSet = new TreeSet&lt;Permission.Action&gt;();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    if(mergeExistingPermissions){<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      List&lt;UserPermission&gt; perms = getUserPermissions(conf, rowKey, null, null, null, false);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      UserPermission currentPerm = null;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      for (UserPermission perm : perms) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        if (Bytes.equals(perm.getUser(), userPerm.getUser())<a name="line.151"></a>
-<span class="sourceLineNo">152</span>                &amp;&amp; ((userPerm.isGlobal() &amp;&amp; ACL_TABLE_NAME.equals(perm.getTableName()))<a name="line.152"></a>
-<span class="sourceLineNo">153</span>                || perm.tableFieldsEqual(userPerm))) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>          currentPerm = perm;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          break;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>      if(currentPerm != null &amp;&amp; currentPerm.getActions() != null){<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        actionSet.addAll(Arrays.asList(currentPerm.getActions()));<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // merge current action with new action.<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    actionSet.addAll(Arrays.asList(actions));<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>    // serialize to byte array.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    byte[] value = new byte[actionSet.size()];<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    int index = 0;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    for (Permission.Action action : actionSet) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      value[index++] = action.code();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    p.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        .setRow(p.getRow())<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        .setFamily(ACL_LIST_FAMILY)<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        .setQualifier(key)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        .setTimestamp(p.getTimestamp())<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        .setType(Type.Put)<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        .setValue(value)<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        .build());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    if (LOG.isDebugEnabled()) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      LOG.debug("Writing permission with rowKey "+<a name="line.182"></a>
-<span class="sourceLineNo">183</span>          Bytes.toString(rowKey)+" "+<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          Bytes.toString(key)+": "+Bytes.toStringBinary(value)<a name="line.184"></a>
-<span class="sourceLineNo">185</span>          );<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    try {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span>       * TODO: Use Table.put(Put) instead. This Table.put() happens within the RS. We are already in<a name="line.189"></a>
-<span class="sourceLineNo">190</span>       * AccessController. Means already there was an RPC happened to server (Actual grant call from<a name="line.190"></a>
-<span class="sourceLineNo">191</span>       * client side). At RpcServer we have a ThreadLocal where we keep the CallContext and inside<a name="line.191"></a>
-<span class="sourceLineNo">192</span>       * that the current RPC called user info is set. The table on which put was called is created<a name="line.192"></a>
-<span class="sourceLineNo">193</span>       * via the RegionCP env and that uses a special Connection. The normal RPC channel will be by<a name="line.193"></a>
-<span class="sourceLineNo">194</span>       * passed here means there would have no further contact on to the RpcServer. So the<a name="line.194"></a>
-<span class="sourceLineNo">195</span>       * ThreadLocal is never getting reset. We ran the new put as a super user (User.runAsLoginUser<a name="line.195"></a>
-<span class="sourceLineNo">196</span>       * where the login user is the user who started RS process) but still as per the RPC context<a name="line.196"></a>
-<span class="sourceLineNo">197</span>       * it is the old user. When AsyncProcess was used, the execute happen via another thread from<a name="line.197"></a>
-<span class="sourceLineNo">198</span>       * pool and so old ThreadLocal variable is not accessible and so it looks as if no Rpc context<a name="line.198"></a>
-<span class="sourceLineNo">199</span>       * and we were relying on the super user who starts the RS process.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>       */<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      t.put(Collections.singletonList(p));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    } finally {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      t.close();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  static void addUserPermission(Configuration conf, UserPermission userPerm, Table t)<a name="line.207"></a>
-<span class="sourceLineNo">208</span>          throws IOException{<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    addUserPermission(conf, userPerm, t, false);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * Removes a previously granted permission from the stored access control<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * lists.  The {@link TablePermission} being removed must exactly match what<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * is stored -- no wildcard matching is attempted.  Ie, if user "bob" has<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * been granted "READ" access to the "data" table, but only to column family<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * plus qualifier "info:colA", then trying to call this method with only<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * user "bob" and the table name "data" (but without specifying the<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * column qualifier "info:colA") will have no effect.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   *<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param conf the configuration<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param userPerm the details of the permission to be revoked<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param t acl table<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @throws IOException if there is an error accessing the metadata table<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  static void removeUserPermission(Configuration conf, UserPermission userPerm, Table t)<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      throws IOException {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    if (null == userPerm.getActions()) {<a name="line.228"></a>
+<span class="sourceLineNo">134</span>      boolean mergeExistingPermissions) throws IOException {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    Permission permission = userPerm.getPermission();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    Permission.Action[] actions = permission.getActions();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    byte[] rowKey = userPermissionRowKey(permission);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    Put p = new Put(rowKey);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    byte[] key = userPermissionKey(userPerm);<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>    if ((actions == null) || (actions.length == 0)) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      String msg = "No actions associated with user '" + userPerm.getUser() + "'";<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      LOG.warn(msg);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      throw new IOException(msg);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    Set&lt;Permission.Action&gt; actionSet = new TreeSet&lt;Permission.Action&gt;();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    if(mergeExistingPermissions){<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      List&lt;UserPermission&gt; perms = getUserPermissions(conf, rowKey, null, null, null, false);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      UserPermission currentPerm = null;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      for (UserPermission perm : perms) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        if (userPerm.equalsExceptActions(perm)) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>          currentPerm = perm;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>          break;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>      if (currentPerm != null &amp;&amp; currentPerm.getPermission().getActions() != null){<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        actionSet.addAll(Arrays.asList(currentPerm.getPermission().getActions()));<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      }<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>    // merge current action with new action.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    actionSet.addAll(Arrays.asList(actions));<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>    // serialize to byte array.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    byte[] value = new byte[actionSet.size()];<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    int index = 0;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    for (Permission.Action action : actionSet) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      value[index++] = action.code();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    p.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        .setRow(p.getRow())<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        .setFamily(ACL_LIST_FAMILY)<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        .setQualifier(key)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        .setTimestamp(p.getTimestamp())<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        .setType(Type.Put)<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        .setValue(value)<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        .build());<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    if (LOG.isDebugEnabled()) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      LOG.debug("Writing permission with rowKey "+<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          Bytes.toString(rowKey)+" "+<a name="line.182"></a>
+<span class="sourceLineNo">183</span>          Bytes.toString(key)+": "+Bytes.toStringBinary(value)<a name="line.183"></a>
+<span class="sourceLineNo">184</span>          );<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    try {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      /**<a name="line.187"></a>
+<span class="sourceLineNo">188</span>       * TODO: Use Table.put(Put) instead. This Table.put() happens within the RS. We are already in<a name="line.188"></a>
+<span class="sourceLineNo">189</span>       * AccessController. Means already there was an RPC happened to server (Actual grant call from<a name="line.189"></a>
+<span class="sourceLineNo">190</span>       * client side). At RpcServer we have a ThreadLocal where we keep the CallContext and inside<a name="line.190"></a>
+<span class="sourceLineNo">191</span>       * that the current RPC called user info is set. The table on which put was called is created<a name="line.191"></a>
+<span class="sourceLineNo">192</span>       * via the RegionCP env and that uses a special Connection. The normal RPC channel will be by<a name="line.192"></a>
+<span class="sourceLineNo">193</span>       * passed here means there would have no further contact on to the RpcServer. So the<a name="line.193"></a>
+<span class="sourceLineNo">194</span>       * ThreadLocal is never getting reset. We ran the new put as a super user (User.runAsLoginUser<a name="line.194"></a>
+<span class="sourceLineNo">195</span>       * where the login user is the user who started RS process) but still as per the RPC context<a name="line.195"></a>
+<span class="sourceLineNo">196</span>       * it is the old user. When AsyncProcess was used, the execute happen via another thread from<a name="line.196"></a>
+<span class="sourceLineNo">197</span>       * pool and so old ThreadLocal variable is not accessible and so it looks as if no Rpc context<a name="line.197"></a>
+<span class="sourceLineNo">198</span>       * and we were relying on the super user who starts the RS process.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>       */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      t.put(Collections.singletonList(p));<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    } finally {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      t.close();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>  static void addUserPermission(Configuration conf, UserPermission userPerm, Table t)<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          throws IOException{<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    addUserPermission(conf, userPerm, t, false);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>  /**<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * Removes a previously granted permission from the stored access control<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * lists.  The {@link TablePermission} being removed must exactly match what<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * is stored -- no wildcard matching is attempted.  Ie, if user "bob" has<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * been granted "READ" access to the "data" table, but only to column family<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * plus qualifier "info:colA", then trying to call this method with only<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * user "bob" and the table name "data" (but without specifying the<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * column qualifier "info:colA") will have no effect.<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   *<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * @param conf the configuration<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * @param userPerm the details of the permission to be revoked<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * @param t acl table<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * @throws IOException if there is an error accessing the metadata table<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   */<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  static void removeUserPermission(Configuration conf, UserPermission userPerm, Table t)<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      throws IOException {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    if (null == userPerm.getPermission().getActions() ||<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        userPerm.getPermission().getActions().length == 0) {<a name="line.228"></a>
 <span class="sourceLineNo">229</span>      removePermissionRecord(conf, userPerm, t);<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    } else {<a name="line.230"></a>
 <span class="sourceLineNo">231</span>      // Get all the global user permissions from the acl table<a name="line.231"></a>
 <span class="sourceLineNo">232</span>      List&lt;UserPermission&gt; permsList =<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          getUserPermissions(conf, userPermissionRowKey(userPerm), null, null, null, false);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      List&lt;Permission.Action&gt; remainingActions = new ArrayList&lt;&gt;();<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      List&lt;Permission.Action&gt; dropActions = Arrays.asList(userPerm.getActions());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      for (UserPermission perm : permsList) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        // Find the user and remove only the requested permissions<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        if (Bytes.toString(perm.getUser()).equals(Bytes.toString(userPerm.getUser()))) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          for (Permission.Action oldAction : perm.getActions()) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>            if (!dropActions.contains(oldAction)) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>              remainingActions.add(oldAction);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>            }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          }<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          if (!remainingActions.isEmpty()) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            perm.setActions(remainingActions.toArray(new Permission.Action[remainingActions.size()]));<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            addUserPermission(conf, perm, t);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          } else {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>            removePermissionRecord(conf, userPerm, t);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          break;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    if (LOG.isDebugEnabled()) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      LOG.debug("Removed permission "+ userPerm.toString());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>  private static void removePermissionRecord(Configuration conf, UserPermission userPerm, Table t)<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      throws IOException {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    Delete d = new Delete(userPermissionRowKey(userPerm));<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    d.addColumns(ACL_LIST_FAMILY, userPermissionKey(userPerm));<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    try {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      t.delete(d);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    } finally {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      t.close();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * Remove specified table from the _acl_ table.<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   */<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  static void removeTablePermissions(Configuration conf, TableName tableName, Table t)<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      throws IOException{<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    Delete d = new Delete(tableName.getName());<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>    if (LOG.isDebugEnabled()) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      LOG.debug("Removing permissions of removed table "+ tableName);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    try {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      t.delete(d);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    } finally {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      t.close();<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>  /**<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * Remove specified namespace from the acl table.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  static void removeNamespacePermissions(Configuration conf, String namespace, Table t)<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      throws IOException{<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    Delete d = new Delete(Bytes.toBytes(toNamespaceEntry(namespace)));<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    if (LOG.isDebugEnabled()) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      LOG.debug("Removing permissions of removed namespace "+ namespace);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    try {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      t.delete(d);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    } finally {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      t.close();<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  static private void removeTablePermissions(TableName tableName, byte[] column, Table table,<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      boolean closeTable) throws IOException {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Scan scan = new Scan();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    scan.addFamily(ACL_LIST_FAMILY);<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span>    String columnName = Bytes.toString(column);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    scan.setFilter(new QualifierFilter(CompareOperator.EQUAL, new RegexStringComparator(<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        String.format("(%s%s%s)|(%s%s)$",<a name="line.312"></a>
-<span class="sourceLineNo">313</span>            ACL_KEY_DELIMITER, columnName, ACL_KEY_DELIMITER,<a name="line.313"></a>
-<span class="sourceLineNo">314</span>            ACL_KEY_DELIMITER, columnName))));<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>    Set&lt;byte[]&gt; qualifierSet = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    ResultScanner scanner = null;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    try {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      scanner = table.getScanner(scan);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      for (Result res : scanner) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        for (byte[] q : res.getFamilyMap(ACL_LIST_FAMILY).navigableKeySet()) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          qualifierSet.add(q);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        }<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>      if (qualifierSet.size() &gt; 0) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        Delete d = new Delete(tableName.getName());<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        for (byte[] qualifier : qualifierSet) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>          d.addColumns(ACL_LIST_FAMILY, qualifier);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        table.delete(d);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    } finally {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      if (scanner != null) scanner.close();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      if (closeTable) table.close();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Remove specified table column from the acl table.<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  static void removeTablePermissions(Configuration conf, TableName tableName, byte[] column,<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Table t) throws IOException {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    if (LOG.isDebugEnabled()) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      LOG.debug("Removing permissions of removed column " + Bytes.toString(column) +<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          " from table "+ tableName);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    removeTablePermissions(tableName, column, t, true);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>  static byte[] userPermissionRowKey(UserPermission userPerm) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    byte[] row;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    if(userPerm.hasNamespace()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      row = Bytes.toBytes(toNamespaceEntry(userPerm.getNamespace()));<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    } else if(userPerm.isGlobal()) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      row = ACL_GLOBAL_NAME;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    } else {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      row = userPerm.getTableName().getName();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return row;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Build qualifier key from user permission:<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   *  username<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   *  username,family<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   *  username,family,qualifier<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   */<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  static byte[] userPermissionKey(UserPermission userPerm) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    byte[] qualifier = userPerm.getQualifier();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    byte[] family = userPerm.getFamily();<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    byte[] key = userPerm.getUser();<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>    if (family != null &amp;&amp; family.length &gt; 0) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      key = Bytes.add(key, Bytes.add(new byte[]{ACL_KEY_DELIMITER}, family));<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      if (qualifier != null &amp;&amp; qualifier.length &gt; 0) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        key = Bytes.add(key, Bytes.add(new byte[]{ACL_KEY_DELIMITER}, qualifier));<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>    return key;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">233</span>        getUserPermissions(conf, userPermissionRowKey(userPerm.getPermission()),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          null, null, null, false);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      List&lt;Permission.Action&gt; remainingActions = new ArrayList&lt;&gt;();<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      List&lt;Permission.Action&gt; dropActions = Arrays.asList(userPerm.getPermission().getActions());<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      for (UserPermission perm : permsList) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        // Find the user and remove only the requested permissions<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        if (perm.getUser().equals(userPerm.getUser())) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          for (Permission.Action oldAction : perm.getPermission().getActions()) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>            if (!dropActions.contains(oldAction)) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>              remainingActions.add(oldAction);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>            }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          if (!remainingActions.isEmpty()) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>            perm.getPermission().setActions(<a name="line.246"></a>
+<span class="sourceLineNo">247</span>              remainingActions.toArray(new Permission.Action[remainingActions.size()]));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>            addUserPermission(conf, perm, t);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          } else {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>            removePermissionRecord(conf, userPerm, t);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          }<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          break;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    if (LOG.isDebugEnabled()) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      LOG.debug("Removed permission "+ userPerm.toString());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>  private static void removePermissionRecord(Configuration conf, UserPermission userPerm, Table t)<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      throws IOException {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    Delete d = new Delete(userPermissionRowKey(userPerm.getPermission()));<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    d.addColumns(ACL_LIST_FAMILY, userPermissionKey(userPerm));<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    try {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      t.delete(d);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    } finally {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      t.close();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>  /**<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * Remove specified table from the _acl_ table.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  static void removeTablePermissions(Configuration conf, TableName tableName, Table t)<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      throws IOException{<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Delete d = new Delete(tableName.getName());<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>    if (LOG.isDebugEnabled()) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      LOG.debug("Removing permissions of removed table "+ tableName);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    try {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      t.delete(d);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    } finally {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      t.close();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  }<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>  /**<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * Remove specified namespace from the acl table.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  static void removeNamespacePermissions(Configuration conf, String namespace, Table t)<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      throws IOException{<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    Delete d = new Delete(Bytes.toBytes(toNamespaceEntry(namespace)));<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>    if (LOG.isDebugEnabled()) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.debug("Removing permissions of removed namespace "+ namespace);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>    try {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      t.delete(d);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    } finally {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      t.close();<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>  static private void removeTablePermissions(TableName tableName, byte[] column, Table table,<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      boolean closeTable) throws IOException {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    Scan scan = new Scan();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    scan.addFamily(ACL_LIST_FAMILY);<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>    String columnName = Bytes.toString(column);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    scan.setFilter(new QualifierFilter(CompareOperator.EQUAL, new RegexStringComparator(<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        String.format("(%s%s%s)|(%s%s)$",<a name="line.314"></a>
+<span class="sourceLineNo">315</span>            ACL_KEY_DELIMITER, columnName, ACL_KEY_DELIMITER,<a name="line.315"></a>
+<span class="sourceLineNo">316</span>            ACL_KEY_DELIMITER, columnName))));<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>    Set&lt;byte[]&gt; qualifierSet = new TreeSet&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    ResultScanner scanner = null;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    try {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      scanner = table.getScanner(scan);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      for (Result res : scanner) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        for (byte[] q : res.getFamilyMap(ACL_LIST_FAMILY).navigableKeySet()) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          qualifierSet.add(q);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      }<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>      if (qualifierSet.size() &gt; 0) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        Delete d = new Delete(tableName.getName());<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        for (byte[] qualifier : qualifierSet) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          d.addColumns(ACL_LIST_FAMILY, qualifier);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        table.delete(d);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    } finally {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      if (scanner != null) scanner.close();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      if (closeTable) table.close();<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * Remove specified table column from the acl table.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  static void removeTablePermissions(Configuration conf, TableName tableName, byte[] column,<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      Table t) throws IOException {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    if (LOG.isDebugEnabled()) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      LOG.debug("Removing permissions of removed column " + Bytes.toString(column) +<a name="line.347"></a>
+<span class="sourceLineNo">348</span>          " from table "+ tableName);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    removeTablePermissions(tableName, column, t, true);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  static byte[] userPermissionRowKey(Permission permission) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    byte[] row;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    if (permission instanceof TablePermission) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      TablePermission tablePerm = (TablePermission) permission;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      row = tablePerm.getTableName().getName();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    } else if (permission instanceof NamespacePermission) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      NamespacePermission nsPerm = (NamespacePermission) permission;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      row = Bytes.toBytes(toNamespaceEntry(nsPerm.getNamespace()));<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    } else {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      // permission instanceof TablePermission<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      row = ACL_GLOBAL_NAME;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    return row;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  /**<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * Build qualifier key from user permission:<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   *  username<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   *  username,family<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   *  username,family,qualifier<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   */<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  static byte[] userPermissionKey(UserPermission permission) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    byte[] key = Bytes.toBytes(permission.getUser());<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    byte[] qualifier = null;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    byte[] family = null;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    if (permission.getPermission().getAccessScope() == Permission.Scope.TABLE) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      TablePermission tablePermission = (TablePermission) permission.getPermission();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      family = tablePermission.getFamily();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      qualifier = tablePermission.getQualifier();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
 <span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  /**<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * Returns {@code true} if the given region is part of the {@code _acl_}<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * metadata table.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  static boolean isAclRegion(Region region) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return ACL_TABLE_NAME.equals(region.getTableDescriptor().getTableName());<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>  /**<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   * Returns {@code true} if the given table is {@code _acl_} metadata table.<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   */<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  static boolean isAclTable(TableDescriptor desc) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    return ACL_TABLE_NAME.equals(desc.getTableName());<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>  /**<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * Loads all of the permission grants stored in a region of the {@code _acl_}<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * table.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   *<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * @param aclRegion<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * @return a map of the permissions for this table.<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @throws IOException<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  static Map&lt;byte[], ListMultimap&lt;String,TablePermission&gt;&gt; loadAll(Region aclRegion)<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      throws IOException {<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span>    if (!isAclRegion(aclRegion)) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      throw new IOException("Can only load permissions from "+ACL_TABLE_NAME);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>    Map&lt;byte[], ListMultimap&lt;String, TablePermission&gt;&gt; allPerms = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // do a full scan of _acl_ table<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Scan scan = new Scan();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    scan.addFamily(ACL_LIST_FAMILY);<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    InternalScanner iScanner = null;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    try {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      iScanner = aclRegion.getScanner(scan);<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>      while (true) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        List&lt;Cell&gt; row = new ArrayList&lt;&gt;();<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>        boolean hasNext = iScanner.next(row);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        ListMultimap&lt;String,TablePermission&gt; perms = ArrayListMultimap.create();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        byte[] entry = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        for (Cell kv : row) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          if (entry == null) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>            entry = CellUtil.cloneRow(kv);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          Pair&lt;String, TablePermission&gt; permissionsOfUserOnTable =<a name="line.435"></a>
-<span class="sourceLineNo">436</span>              parsePermissionRecord(entry, kv, null, null, false, null);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          if (permissionsOfUserOnTable != null) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>            String username = permissionsOfUserOnTable.getFirst();<a name="line.438"></a>
-<span class="sourceLineNo">439</span>            TablePermission permissions = permissionsOfUserOnTable.getSecond();<a name="line.439"></a>
-<span class="sourceLineNo">440</span>            perms.put(username, permissions);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        }<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        if (entry != null) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          allPerms.put(entry, perms);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        if (!hasNext) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>          break;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>        }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      }<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    } finally {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (iScanner != null) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        iScanner.close();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      }<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>    return allPerms;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>  /**<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * Load all permissions from the region server holding {@code _acl_},<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * primarily intended for testing purposes.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   */<a name="line.462"></a>
-<span class="sourceLineNo">463</span>  static Map&lt;byte[], ListMultimap&lt;String,TablePermission&gt;&gt; loadAll(<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      Configuration conf) throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    Map&lt;byte[], ListMultimap&lt;String,TablePermission&gt;&gt; allPerms = new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.465"></a>
+<span class="sourceLineNo">384</span>    if (family != null &amp;&amp; family.length &gt; 0) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      key = Bytes.add(key, Bytes.add(new byte[]{ACL_KEY_DELIMITER}, family));<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (qualifier != null &amp;&amp; qualifier.length &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        key = Bytes.add(key, Bytes.add(new byte[]{ACL_KEY_DELIMITER}, qualifier));<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      }<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>    return key;<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>  /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * Returns {@code true} if the given region is part of the {@code _acl_}<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * metadata table.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  static boolean isAclRegion(Region region) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    return ACL_TABLE_NAME.equals(region.getTableDescriptor().getTableName());<a name="line.399"></a>
+<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>  /**<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * Returns {@code true} if the given table is {@code _acl_} metadata table.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  static boolean isAclTable(TableDescriptor desc) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    return ACL_TABLE_NAME.equals(desc.getTableName());<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  }<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   * Loads all of the permission grants stored in a region of the {@code _acl_}<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   * table.<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   *<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * @param aclRegion<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * @return a map of the permissions for this table.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @throws IOException<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   */<a name="line.416"></a>
+<span class="sourceLineNo">417</span>  static Map&lt;byte[], ListMultimap&lt;String, UserPermission&gt;&gt; loadAll(Region aclRegion)<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      throws IOException {<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>    if (!isAclRegion(aclRegion)) {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      throw new IOException("Can only load permissions from "+ACL_TABLE_NAME);<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
+<span class="sourceLineNo">423</span><a name="line.423"></a>
+<span class="sourceLineNo">424</span>    Map&lt;byte[], ListMultimap&lt;String, UserPermission&gt;&gt; allPerms =<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>    // do a full scan of _acl_ table<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>    Scan scan = new Scan();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    scan.addFamily(ACL_LIST_FAMILY);<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>    InternalScanner iScanner = null;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    try {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      iScanner = aclRegion.getScanner(scan);<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>      while (true) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>        List&lt;Cell&gt; row = new ArrayList&lt;&gt;();<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>        boolean hasNext = iScanner.next(row);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        ListMultimap&lt;String, UserPermission&gt; perms = ArrayListMultimap.create();<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        byte[] entry = null;<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        for (Cell kv : row) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>          if (entry == null) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>            entry = CellUtil.cloneRow(kv);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          Pair&lt;String, Permission&gt; permissionsOfUserOnTable =<a name="line.446"></a>
+<span class="sourceLineNo">447</span>              parsePermissionRecord(entry, kv, null, null, false, null);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>          if (permissionsOfUserOnTable != null) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>            String username = permissionsOfUserOnTable.getFirst();<a name="line.449"></a>
+<span class="sourceLineNo">450</span>            Permission permission = permissionsOfUserOnTable.getSecond();<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            perms.put(username, new UserPermission(username, permission));<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        if (entry != null) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          allPerms.put(entry, perms);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        }<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        if (!hasNext) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          break;<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    } finally {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (iScanner != null) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        iScanner.close();<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      }<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
 <span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    // do a full scan of _acl_, filtering on only first table region rows<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>    Scan scan = new Scan();<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    scan.addFamily(ACL_LIST_FAMILY);<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>    ResultScanner scanner = null;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    // TODO: Pass in a Connection rather than create one each time.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    try (Connection connection = ConnectionFactory.createConnection(conf)) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      try (Table table = connection.getTable(ACL_TABLE_NAME)) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        scanner = table.getScanner(scan);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        try {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          for (Result row : scanner) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>            ListMultimap&lt;String, TablePermission&gt; resultPerms =<a name="line.479"></a>
-<span class="sourceLineNo">480</span>                parsePermissions(row.getRow(), row, null, null, null, false);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>            allPerms.put(row.getRow(), resultPerms);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          }<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        } finally {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (scanner != null) scanner.close();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        }<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    return allPerms;<a name="line.489"></a>
-<span class="sourceLineNo">490</span>  }<a name="line.490"></a>
-<span class="sourceLineNo">491</span><a name="line.491"></a>
-<span class="sourceLineNo">492</span>  public static ListMultimap&lt;String, TablePermission&gt; getTablePermissions(Configuration conf,<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      TableName tableName) throws IOException {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    return getPermissions(conf, tableName != null ? tableName.getName() : null, null, null, null,<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      null, false);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span>  @VisibleForTesting<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  public static ListMultimap&lt;String, TablePermission&gt; getNamespacePermissions(Configuration conf,<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      String namespace) throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    return getPermissions(conf, Bytes.toBytes(toNamespaceEntry(namespace)), null, null, null, null,<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      false);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>  }<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span>  /**<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * Reads user permission assignments stored in the &lt;code&gt;l:&lt;/code&gt; column family of the first<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * table row in &lt;code&gt;_acl_&lt;/code&gt;.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * &lt;p&gt;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * See {@link AccessControlLists class documentation} for the key structure used for storage.<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * &lt;/p&gt;<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   */<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  static ListMultimap&lt;String, TablePermission&gt; getPermissions(Configuration conf, byte[] entryName,<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      Table t, byte[] cf, byte[] cq, String user, boolean hasFilterUser) throws IOException {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    if (entryName == null) entryName = ACL_GLOBAL_NAME;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    // for normal user tables, we just read the table row from _acl_<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    ListMultimap&lt;String, TablePermission&gt; perms = ArrayListMultimap.create();<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    Get get = new Get(entryName);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    get.addFamily(ACL_LIST_FAMILY);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Result row = null;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    if (t == null) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      try (Connection connection = ConnectionFactory.createConnection(conf)) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        try (Table table = connection.getTable(ACL_TABLE_NAME)) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          row = table.get(get);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    } else {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      row = t.get(get);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    if (!row.isEmpty()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      perms = parsePermissions(entryName, row, cf, cq, user, hasFilterUser);<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    } else {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      LOG.info("No permissions found in " + ACL_TABLE_NAME + " for acl entry "<a name="line.532"></a>
-<span class="sourceLineNo">533</span>          + Bytes.toString(entryName));<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
-<span class="sourceLineNo">535</span><a name="line.535"></a>
-<span class="sourceLineNo">536</span>    return perms;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Returns the currently granted permissions for a given table as the specified user plus<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * associated permissions.<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   */<a name="line.542"></a>
-<span class="sourceLineNo">543</span>  static List&lt;UserPermission&gt; getUserTablePermissions(Configuration conf, TableName tableName,<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      byte[] cf, byte[] cq, String userName, boolean hasFilterUser) throws IOException {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    return getUserPermissions(conf, tableName == null ? null : tableName.getName(), cf, cq,<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      userName, hasFilterUser);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  /**<a name="line.549"></a>
-<span class="sourceLineNo">550</span>   * Returns the currently granted permissions for a given namespace as the specified user plus<a name="line.550"></a>
-<span class="sourceLineNo">551</span>   * associated permissions.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  static List&lt;UserPermission&gt; getUserNamespacePermissions(Configuration conf, String namespace,<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      String user, boolean hasFilterUser) throws IOException {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return getUserPermissions(conf, Bytes.toBytes(toNamespaceEntry(namespace)), null, null, user,<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      hasFilterUser);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Returns the currently granted permissions for a given table/namespace with associated<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * permissions based on the specified column family, column qualifier and user name.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * @param conf the configuration<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param entryName Table name or the namespace<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param cf Column family<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @param cq Column qualifier<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @param user User name to be filtered from permission as requested<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * @param hasFilterUser true if filter user is provided, otherwise false.<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   * @return List of UserPermissions<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * @throws IOException on failure<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   */<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  static List&lt;UserPermission&gt; getUserPermissions(Configuration conf, byte[] entryName, byte[] cf,<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      byte[] cq, String user, boolean hasFilterUser) throws IOException {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    ListMultimap&lt;String, TablePermission&gt; allPerms =<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        getPermissions(conf, entryName, null, cf, cq, user, hasFilterUser);<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>    List&lt;UserPermission&gt; perms = new ArrayList&lt;&gt;();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    if (isNamespaceEntry(entryName)) { // Namespace<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      for (Map.Entry&lt;String, TablePermission&gt; entry : allPerms.entries()) {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        UserPermission up = new UserPermission(Bytes.toBytes(entry.getKey()),<a name="line.579"></a>
-<span class="sourceLineNo">580</span>            entry.getValue().getNamespace(), entry.getValue().getActions());<a name="line.580"></a>
-<span class="sourceLineNo">581</span>        perms.add(up);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      }<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    } else { // Table<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      for (Map.Entry&lt;String, TablePermission&gt; entry : allPerms.entries()) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        UserPermission up = new UserPermission(Bytes.toBytes(entry.getKey()),<a name="line.585"></a>
-<span class="sourceLineNo">586</span>            entry.getValue().getTableName(), entry.getValue().getFamily(),<a name="line.586"></a>
-<span class="sourceLineNo">587</span>            entry.getValue().getQualifier(), entry.getValue().getActions());<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        perms.add(up);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
+<span class="sourceLineNo">467</span>    return allPerms;<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  }<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  /**<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * Load all permissions from the region server holding {@code _acl_},<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * primarily intended for testing purposes.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  static Map&lt;byte[], ListMultimap&lt;String, UserPermission&gt;&gt; loadAll(<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    Map&lt;byte[], ListMultimap&lt;String, UserPermission&gt;&gt; allPerms =<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      new TreeMap&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    // do a full scan of _acl_, filtering on only first table region rows<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span>    Scan scan = new Scan();<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    scan.addFamily(ACL_LIST_FAMILY);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    ResultScanner scanner = null;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // TODO: Pass in a Connection rather than create one each time.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    try (Connection connection = ConnectionFactory.createConnection(conf)) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      try (Table table = connection.getTable(ACL_TABLE_NAME)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        scanner = table.getScanner(scan);<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        try {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          for (Result row : scanner) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>            ListMultimap&lt;String, UserPermission&gt; resultPerms =<a name="line.491"></a>
+<span class="sourceLineNo">492</span>                parsePermissions(row.getRow(), row, null, null, null, false);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>            allPerms.put(row.getRow(), resultPerms);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>          }<a name="line.494"></a>
+<span class="sourceLineNo">495</span>        } finally {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>          if (scanner != null) scanner.close();<a name="line.496"></a>
+<span class="sourceLineNo">497</span>        }<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>    return allPerms;<a name="line.501"></a>
+<span class="sourceLineNo">502</span>  }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span>  public static ListMultimap&lt;String, UserPermission&gt; getTablePermissions(Configuration conf,<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      TableName tableName) throws IOException {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    return getPermissions(conf, tableName != null ? tableName.getName() : null, null, null, null,<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      null, false);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>  }<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>  @VisibleForTesting<a name="line.510"></a>
+<span class="sourceLineNo">511</span>  public static ListMultimap&lt;String, UserPermission&gt; getNamespacePermissions(Configuration conf,<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      String namespace) throws IOException {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    return getPermissions(conf, Bytes.toBytes(toNamespaceEntry(namespace)), null, null, null, null,<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      false);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  }<a name="line.515"></a>
+<span class="sourceLineNo">516</span><a name="line.516"></a>
+<span class="sourceLineNo">517</span>  /**<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * Reads user permission assignments stored in the &lt;code&gt;l:&lt;/code&gt; column family of the first<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * table row in &lt;code&gt;_acl_&lt;/code&gt;.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * &lt;p&gt;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * See {@link AccessControlLists class documentation} for the key structure used for storage.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   * &lt;/p&gt;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>   */<a name="line.523"></a>
+<span class="sourceLineNo">524</span>  static ListMultimap&lt;String, UserPermission&gt; getPermissions(Configuration conf, byte[] entryName,<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      Table t, byte[] cf, byte[] cq, String user, boolean hasFilterUser) throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    if (entryName == null) entryName = ACL_GLOBAL_NAME;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    // for normal user tables, we just read the table row from _acl_<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    ListMultimap&lt;String, UserPermission&gt; perms = ArrayListMultimap.create();<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Get get = new Get(entryName);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    get.addFamily(ACL_LIST_FAMILY);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    Result row = null;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    if (t == null) {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      try (Connection connection = ConnectionFactory.createConnection(conf)) {<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        try (Table table = connection.getTable(ACL_TABLE_NAME)) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>          row = table.get(get);<a name="line.535"></a>
+<span class="sourceLineNo">536</span>        }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      }<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    } else {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      row = t.get(get);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    if (!row.isEmpty()) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      perms = parsePermissions(entryName, row, cf, cq, user, hasFilterUser);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    } else {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.info("No permissions found in " + ACL_TABLE_NAME + " for acl entry "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          + Bytes.toString(entryName));<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
+<span class="sourceLineNo">547</span><a name="line.547"></a>
+<span class="sourceLineNo">548</span>    return perms;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>  }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>  /**<a name="line.551"></a>
+<span class="sourceLineNo">552</span>   * Returns the currently granted permissions for a given table as the specified user plus<a name="line.552"></a>
+<span class="sourceLineNo">553</span>   * associated permissions.<a name="line.553"></a>
+<span class="sourceLineNo">554</span>   */<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  static List&lt;UserPermission&gt; getUserTablePermissions(Configuration conf, TableName tableName,<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      byte[] cf, byte[] cq, String userName, boolean hasFilterUser) throws IOException {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    return getUserPermissions(conf, tableName == null ? null : tableName.getName(), cf, cq,<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      userName, hasFilterUser);<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  }<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>  /**<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   * Returns the currently granted permissions for a given namespace as the specified user plus<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   * associated permissions.<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   */<a name="line.564"></a>
+<span class="sourceLineNo">565</span>  static List&lt;UserPermission&gt; getUserNamespacePermissions(Configuration conf, String namespace,<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      String user, boolean hasFilterUser) throws IOException {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    return getUserPermissions(conf, Bytes.toBytes(toNamespaceEntry(namespace)), null, null, user,<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      hasFilterUser);<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>  /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span>   * Returns the currently granted permissions for a given table/namespace with associated<a name="line.572"></a>
+<span class="sourceLineNo">573</span>   * permissions based on the specified column family, column qualifier and user name.<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   * @param conf the configuration<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * @param entryName Table name or the namespace<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * @param cf Column family<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * @param cq Column qualifier<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * @param user User name to be filtered from permission as requested<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * @param hasFilterUser true if filter user is provided, otherwise false.<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   * @return List of UserPermissions<a name="line.580"></a>
+<span class="sourceLineNo">581</span>   * @throws IOException on failure<a name="line.581"></a>
+<span class="sourceLineNo">582</span>   */<a name="line.582"></a>
+<span class="sourceLineNo">583</span>  static List&lt;UserPermission&gt; getUserPermissions(Configuration conf, byte[] entryName, byte[] cf,<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      byte[] cq, String user, boolean hasFilterUser) throws IOException {<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    ListMultimap&lt;Str

<TRUNCATED>

[26/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
index daf2583..25ef9bf 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
@@ -116,75 +116,87 @@
 <span class="sourceLineNo">108</span>  }<a name="line.108"></a>
 <span class="sourceLineNo">109</span><a name="line.109"></a>
 <span class="sourceLineNo">110</span>  @Override<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected void rollback(MasterProcedureEnv env) throws IOException, InterruptedException {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    throw new UnsupportedOperationException();<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  @Override<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  protected boolean abort(MasterProcedureEnv env) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    return false;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  /**<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * Check whether we still need to make the call to RS.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * &lt;p/&gt;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * Usually this will not happen if we do not allow assigning a already onlined region. But if we<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * have something wrong in the RSProcedureDispatcher, where we have already sent the request to<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * RS, but then we tell the upper layer the remote call is failed due to rpc timeout or connection<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * closed or anything else, then this issue can still happen. So here we add a check to make it<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * more robust.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  protected abstract boolean shouldDispatch(RegionStateNode regionNode);<a name="line.129"></a>
+<span class="sourceLineNo">111</span>  protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    if (TableName.isMetaTableName(getTableName())) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      return false;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    // First we need meta to be loaded, and second, if meta is not online then we will likely to<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    // fail when updating meta so we wait until it is assigned.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    AssignmentManager am = env.getAssignmentManager();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return am.waitMetaLoaded(this) || am.waitMetaAssigned(this, region);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  @Override<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  protected void rollback(MasterProcedureEnv env) throws IOException, InterruptedException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    throw new UnsupportedOperationException();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>  @Override<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  protected boolean abort(MasterProcedureEnv env) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    return false;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
 <span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  protected Procedure&lt;MasterProcedureEnv&gt;[] execute(MasterProcedureEnv env)<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    if (dispatched) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      // we are done, the parent procedure will check whether we are succeeded.<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      return null;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    RegionStateNode regionNode = getRegionNode(env);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    regionNode.lock();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    try {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      if (!shouldDispatch(regionNode)) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        return null;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      // The code which wakes us up also needs to lock the RSN so here we do not need to synchronize<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      // on the event.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      ProcedureEvent&lt;?&gt; event = regionNode.getProcedureEvent();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      try {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        env.getRemoteDispatcher().addOperationToNode(targetServer, this);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      } catch (FailedRemoteDispatchException e) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        LOG.warn("Can not add remote operation {} for region {} to server {}, this usually " +<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          "because the server is alread dead, give up and mark the procedure as complete, " +<a name="line.151"></a>
-<span class="sourceLineNo">152</span>          "the parent procedure will take care of this.", this, region, targetServer, e);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        return null;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      dispatched = true;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      event.suspend();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      event.suspendIfNotReady(this);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      throw new ProcedureSuspendedException();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    } finally {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      regionNode.unlock();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>  @Override<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    serializer.serialize(RegionRemoteProcedureBaseStateData.newBuilder()<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      .setRegion(ProtobufUtil.toRegionInfo(region))<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      .setTargetServer(ProtobufUtil.toServerName(targetServer)).setDispatched(dispatched).build());<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>  @Override<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    RegionRemoteProcedureBaseStateData data =<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      serializer.deserialize(RegionRemoteProcedureBaseStateData.class);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    region = ProtobufUtil.toRegionInfo(data.getRegion());<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    targetServer = ProtobufUtil.toServerName(data.getTargetServer());<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    dispatched = data.getDispatched();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>}<a name="line.179"></a>
+<span class="sourceLineNo">131</span>  /**<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * Check whether we still need to make the call to RS.<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   * &lt;p/&gt;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * This could happen when master restarts. Since we do not know whether a request has already been<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * sent to the region server after we add a remote operation to the dispatcher, so the safe way is<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * to not persist the dispatched field and try to add the remote operation again. But it is<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * possible that we do have already sent the request to region server and it has also sent back<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * the response, so here we need to check the region state, if it is not in the expecting state,<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * we should give up, otherwise we may hang for ever, as the region server will just ignore<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * redundant calls.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   */<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  protected abstract boolean shouldDispatch(RegionStateNode regionNode);<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  protected Procedure&lt;MasterProcedureEnv&gt;[] execute(MasterProcedureEnv env)<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    if (dispatched) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      // we are done, the parent procedure will check whether we are succeeded.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      return null;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    RegionStateNode regionNode = getRegionNode(env);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    regionNode.lock();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    try {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      if (!shouldDispatch(regionNode)) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        return null;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // The code which wakes us up also needs to lock the RSN so here we do not need to synchronize<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      // on the event.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      ProcedureEvent&lt;?&gt; event = regionNode.getProcedureEvent();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      try {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        env.getRemoteDispatcher().addOperationToNode(targetServer, this);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      } catch (FailedRemoteDispatchException e) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        LOG.warn("Can not add remote operation {} for region {} to server {}, this usually " +<a name="line.163"></a>
+<span class="sourceLineNo">164</span>          "because the server is alread dead, give up and mark the procedure as complete, " +<a name="line.164"></a>
+<span class="sourceLineNo">165</span>          "the parent procedure will take care of this.", this, region, targetServer, e);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        return null;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      dispatched = true;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      event.suspend();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      event.suspendIfNotReady(this);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      throw new ProcedureSuspendedException();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    } finally {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      regionNode.unlock();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>  @Override<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    serializer.serialize(RegionRemoteProcedureBaseStateData.newBuilder()<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      .setRegion(ProtobufUtil.toRegionInfo(region))<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      .setTargetServer(ProtobufUtil.toServerName(targetServer)).build());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Override<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    RegionRemoteProcedureBaseStateData data =<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      serializer.deserialize(RegionRemoteProcedureBaseStateData.class);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    region = ProtobufUtil.toRegionInfo(data.getRegion());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    targetServer = ProtobufUtil.toServerName(data.getTargetServer());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>}<a name="line.191"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessChecker.InputUser.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessChecker.InputUser.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessChecker.InputUser.html
index f8acad1..daabce4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessChecker.InputUser.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessChecker.InputUser.html
@@ -58,7 +58,7 @@
 <span class="sourceLineNo">050</span>  // TODO: we should move to a design where we don't even instantiate an AccessChecker if<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  // authorization is not enabled (like in RSRpcServices), instead of always instantiating one and<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  // calling requireXXX() only to do nothing (since authorizationEnabled will be false).<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private TableAuthManager authManager;<a name="line.53"></a>
+<span class="sourceLineNo">053</span>  private AuthManager authManager;<a name="line.53"></a>
 <span class="sourceLineNo">054</span><a name="line.54"></a>
 <span class="sourceLineNo">055</span>  /** Group service to retrieve the user group information */<a name="line.55"></a>
 <span class="sourceLineNo">056</span>  private static Groups groupService;<a name="line.56"></a>
@@ -83,7 +83,7 @@
 <span class="sourceLineNo">075</span>      throws RuntimeException {<a name="line.75"></a>
 <span class="sourceLineNo">076</span>    if (zkw != null) {<a name="line.76"></a>
 <span class="sourceLineNo">077</span>      try {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>        this.authManager = TableAuthManager.getOrCreate(zkw, conf);<a name="line.78"></a>
+<span class="sourceLineNo">078</span>        this.authManager = AuthManager.getOrCreate(zkw, conf);<a name="line.78"></a>
 <span class="sourceLineNo">079</span>      } catch (IOException ioe) {<a name="line.79"></a>
 <span class="sourceLineNo">080</span>        throw new RuntimeException("Error obtaining AccessChecker", ioe);<a name="line.80"></a>
 <span class="sourceLineNo">081</span>      }<a name="line.81"></a>
@@ -95,13 +95,13 @@
 <span class="sourceLineNo">087</span>  }<a name="line.87"></a>
 <span class="sourceLineNo">088</span><a name="line.88"></a>
 <span class="sourceLineNo">089</span>  /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * Releases {@link TableAuthManager}'s reference.<a name="line.90"></a>
+<span class="sourceLineNo">090</span>   * Releases {@link AuthManager}'s reference.<a name="line.90"></a>
 <span class="sourceLineNo">091</span>   */<a name="line.91"></a>
 <span class="sourceLineNo">092</span>  public void stop() {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    TableAuthManager.release(authManager);<a name="line.93"></a>
+<span class="sourceLineNo">093</span>    AuthManager.release(authManager);<a name="line.93"></a>
 <span class="sourceLineNo">094</span>  }<a name="line.94"></a>
 <span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public TableAuthManager getAuthManager() {<a name="line.96"></a>
+<span class="sourceLineNo">096</span>  public AuthManager getAuthManager() {<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    return authManager;<a name="line.97"></a>
 <span class="sourceLineNo">098</span>  }<a name="line.98"></a>
 <span class="sourceLineNo">099</span><a name="line.99"></a>
@@ -123,7 +123,7 @@
 <span class="sourceLineNo">115</span>    AuthResult result = null;<a name="line.115"></a>
 <span class="sourceLineNo">116</span><a name="line.116"></a>
 <span class="sourceLineNo">117</span>    for (Action permission : permissions) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      if (authManager.hasAccess(user, tableName, permission)) {<a name="line.118"></a>
+<span class="sourceLineNo">118</span>      if (authManager.accessUserTable(user, tableName, permission)) {<a name="line.118"></a>
 <span class="sourceLineNo">119</span>        result = AuthResult.allow(request, "Table permission granted",<a name="line.119"></a>
 <span class="sourceLineNo">120</span>            user, permission, tableName, null, null);<a name="line.120"></a>
 <span class="sourceLineNo">121</span>        break;<a name="line.121"></a>
@@ -172,7 +172,7 @@
 <span class="sourceLineNo">164</span>      return;<a name="line.164"></a>
 <span class="sourceLineNo">165</span>    }<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    AuthResult result;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    if (authManager.authorize(user, perm)) {<a name="line.167"></a>
+<span class="sourceLineNo">167</span>    if (authManager.authorizeUserGlobal(user, perm)) {<a name="line.167"></a>
 <span class="sourceLineNo">168</span>      result = AuthResult.allow(request, "Global check allowed", user, perm, tableName, familyMap);<a name="line.168"></a>
 <span class="sourceLineNo">169</span>    } else {<a name="line.169"></a>
 <span class="sourceLineNo">170</span>      result = AuthResult.deny(request, "Global check failed", user, perm, tableName, familyMap);<a name="line.170"></a>
@@ -203,7 +203,7 @@
 <span class="sourceLineNo">195</span>      return;<a name="line.195"></a>
 <span class="sourceLineNo">196</span>    }<a name="line.196"></a>
 <span class="sourceLineNo">197</span>    AuthResult authResult;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    if (authManager.authorize(user, perm)) {<a name="line.198"></a>
+<span class="sourceLineNo">198</span>    if (authManager.authorizeUserGlobal(user, perm)) {<a name="line.198"></a>
 <span class="sourceLineNo">199</span>      authResult = AuthResult.allow(request, "Global check allowed", user, perm, null);<a name="line.199"></a>
 <span class="sourceLineNo">200</span>      authResult.getParams().setNamespace(namespace);<a name="line.200"></a>
 <span class="sourceLineNo">201</span>      logResult(authResult);<a name="line.201"></a>
@@ -233,7 +233,7 @@
 <span class="sourceLineNo">225</span>    AuthResult result = null;<a name="line.225"></a>
 <span class="sourceLineNo">226</span><a name="line.226"></a>
 <span class="sourceLineNo">227</span>    for (Action permission : permissions) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      if (authManager.authorize(user, namespace, permission)) {<a name="line.228"></a>
+<span class="sourceLineNo">228</span>      if (authManager.authorizeUserNamespace(user, namespace, permission)) {<a name="line.228"></a>
 <span class="sourceLineNo">229</span>        result =<a name="line.229"></a>
 <span class="sourceLineNo">230</span>            AuthResult.allow(request, "Namespace permission granted", user, permission, namespace);<a name="line.230"></a>
 <span class="sourceLineNo">231</span>        break;<a name="line.231"></a>
@@ -268,7 +268,7 @@
 <span class="sourceLineNo">260</span>    AuthResult result = null;<a name="line.260"></a>
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>    for (Action permission : permissions) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      if (authManager.authorize(user, namespace, permission)) {<a name="line.263"></a>
+<span class="sourceLineNo">263</span>      if (authManager.authorizeUserNamespace(user, namespace, permission)) {<a name="line.263"></a>
 <span class="sourceLineNo">264</span>        result =<a name="line.264"></a>
 <span class="sourceLineNo">265</span>            AuthResult.allow(request, "Namespace permission granted", user, permission, namespace);<a name="line.265"></a>
 <span class="sourceLineNo">266</span>        result.getParams().setTableName(tableName).setFamilies(familyMap);<a name="line.266"></a>
@@ -307,7 +307,7 @@
 <span class="sourceLineNo">299</span>    AuthResult result = null;<a name="line.299"></a>
 <span class="sourceLineNo">300</span><a name="line.300"></a>
 <span class="sourceLineNo">301</span>    for (Action permission : permissions) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      if (authManager.authorize(user, tableName, family, qualifier, permission)) {<a name="line.302"></a>
+<span class="sourceLineNo">302</span>      if (authManager.authorizeUserTable(user, tableName, family, qualifier, permission)) {<a name="line.302"></a>
 <span class="sourceLineNo">303</span>        result = AuthResult.allow(request, "Table permission granted",<a name="line.303"></a>
 <span class="sourceLineNo">304</span>            user, permission, tableName, family, qualifier);<a name="line.304"></a>
 <span class="sourceLineNo">305</span>        break;<a name="line.305"></a>
@@ -345,7 +345,7 @@
 <span class="sourceLineNo">337</span>    AuthResult result = null;<a name="line.337"></a>
 <span class="sourceLineNo">338</span><a name="line.338"></a>
 <span class="sourceLineNo">339</span>    for (Action permission : permissions) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      if (authManager.authorize(user, tableName, null, null, permission)) {<a name="line.340"></a>
+<span class="sourceLineNo">340</span>      if (authManager.authorizeUserTable(user, tableName, permission)) {<a name="line.340"></a>
 <span class="sourceLineNo">341</span>        result = AuthResult.allow(request, "Table permission granted",<a name="line.341"></a>
 <span class="sourceLineNo">342</span>            user, permission, tableName, null, null);<a name="line.342"></a>
 <span class="sourceLineNo">343</span>        result.getParams().setFamily(family).setQualifier(qualifier);<a name="line.343"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessChecker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessChecker.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessChecker.html
index f8acad1..daabce4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessChecker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessChecker.html
@@ -58,7 +58,7 @@
 <span class="sourceLineNo">050</span>  // TODO: we should move to a design where we don't even instantiate an AccessChecker if<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  // authorization is not enabled (like in RSRpcServices), instead of always instantiating one and<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  // calling requireXXX() only to do nothing (since authorizationEnabled will be false).<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private TableAuthManager authManager;<a name="line.53"></a>
+<span class="sourceLineNo">053</span>  private AuthManager authManager;<a name="line.53"></a>
 <span class="sourceLineNo">054</span><a name="line.54"></a>
 <span class="sourceLineNo">055</span>  /** Group service to retrieve the user group information */<a name="line.55"></a>
 <span class="sourceLineNo">056</span>  private static Groups groupService;<a name="line.56"></a>
@@ -83,7 +83,7 @@
 <span class="sourceLineNo">075</span>      throws RuntimeException {<a name="line.75"></a>
 <span class="sourceLineNo">076</span>    if (zkw != null) {<a name="line.76"></a>
 <span class="sourceLineNo">077</span>      try {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>        this.authManager = TableAuthManager.getOrCreate(zkw, conf);<a name="line.78"></a>
+<span class="sourceLineNo">078</span>        this.authManager = AuthManager.getOrCreate(zkw, conf);<a name="line.78"></a>
 <span class="sourceLineNo">079</span>      } catch (IOException ioe) {<a name="line.79"></a>
 <span class="sourceLineNo">080</span>        throw new RuntimeException("Error obtaining AccessChecker", ioe);<a name="line.80"></a>
 <span class="sourceLineNo">081</span>      }<a name="line.81"></a>
@@ -95,13 +95,13 @@
 <span class="sourceLineNo">087</span>  }<a name="line.87"></a>
 <span class="sourceLineNo">088</span><a name="line.88"></a>
 <span class="sourceLineNo">089</span>  /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * Releases {@link TableAuthManager}'s reference.<a name="line.90"></a>
+<span class="sourceLineNo">090</span>   * Releases {@link AuthManager}'s reference.<a name="line.90"></a>
 <span class="sourceLineNo">091</span>   */<a name="line.91"></a>
 <span class="sourceLineNo">092</span>  public void stop() {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    TableAuthManager.release(authManager);<a name="line.93"></a>
+<span class="sourceLineNo">093</span>    AuthManager.release(authManager);<a name="line.93"></a>
 <span class="sourceLineNo">094</span>  }<a name="line.94"></a>
 <span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public TableAuthManager getAuthManager() {<a name="line.96"></a>
+<span class="sourceLineNo">096</span>  public AuthManager getAuthManager() {<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    return authManager;<a name="line.97"></a>
 <span class="sourceLineNo">098</span>  }<a name="line.98"></a>
 <span class="sourceLineNo">099</span><a name="line.99"></a>
@@ -123,7 +123,7 @@
 <span class="sourceLineNo">115</span>    AuthResult result = null;<a name="line.115"></a>
 <span class="sourceLineNo">116</span><a name="line.116"></a>
 <span class="sourceLineNo">117</span>    for (Action permission : permissions) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      if (authManager.hasAccess(user, tableName, permission)) {<a name="line.118"></a>
+<span class="sourceLineNo">118</span>      if (authManager.accessUserTable(user, tableName, permission)) {<a name="line.118"></a>
 <span class="sourceLineNo">119</span>        result = AuthResult.allow(request, "Table permission granted",<a name="line.119"></a>
 <span class="sourceLineNo">120</span>            user, permission, tableName, null, null);<a name="line.120"></a>
 <span class="sourceLineNo">121</span>        break;<a name="line.121"></a>
@@ -172,7 +172,7 @@
 <span class="sourceLineNo">164</span>      return;<a name="line.164"></a>
 <span class="sourceLineNo">165</span>    }<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    AuthResult result;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    if (authManager.authorize(user, perm)) {<a name="line.167"></a>
+<span class="sourceLineNo">167</span>    if (authManager.authorizeUserGlobal(user, perm)) {<a name="line.167"></a>
 <span class="sourceLineNo">168</span>      result = AuthResult.allow(request, "Global check allowed", user, perm, tableName, familyMap);<a name="line.168"></a>
 <span class="sourceLineNo">169</span>    } else {<a name="line.169"></a>
 <span class="sourceLineNo">170</span>      result = AuthResult.deny(request, "Global check failed", user, perm, tableName, familyMap);<a name="line.170"></a>
@@ -203,7 +203,7 @@
 <span class="sourceLineNo">195</span>      return;<a name="line.195"></a>
 <span class="sourceLineNo">196</span>    }<a name="line.196"></a>
 <span class="sourceLineNo">197</span>    AuthResult authResult;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    if (authManager.authorize(user, perm)) {<a name="line.198"></a>
+<span class="sourceLineNo">198</span>    if (authManager.authorizeUserGlobal(user, perm)) {<a name="line.198"></a>
 <span class="sourceLineNo">199</span>      authResult = AuthResult.allow(request, "Global check allowed", user, perm, null);<a name="line.199"></a>
 <span class="sourceLineNo">200</span>      authResult.getParams().setNamespace(namespace);<a name="line.200"></a>
 <span class="sourceLineNo">201</span>      logResult(authResult);<a name="line.201"></a>
@@ -233,7 +233,7 @@
 <span class="sourceLineNo">225</span>    AuthResult result = null;<a name="line.225"></a>
 <span class="sourceLineNo">226</span><a name="line.226"></a>
 <span class="sourceLineNo">227</span>    for (Action permission : permissions) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      if (authManager.authorize(user, namespace, permission)) {<a name="line.228"></a>
+<span class="sourceLineNo">228</span>      if (authManager.authorizeUserNamespace(user, namespace, permission)) {<a name="line.228"></a>
 <span class="sourceLineNo">229</span>        result =<a name="line.229"></a>
 <span class="sourceLineNo">230</span>            AuthResult.allow(request, "Namespace permission granted", user, permission, namespace);<a name="line.230"></a>
 <span class="sourceLineNo">231</span>        break;<a name="line.231"></a>
@@ -268,7 +268,7 @@
 <span class="sourceLineNo">260</span>    AuthResult result = null;<a name="line.260"></a>
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>    for (Action permission : permissions) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      if (authManager.authorize(user, namespace, permission)) {<a name="line.263"></a>
+<span class="sourceLineNo">263</span>      if (authManager.authorizeUserNamespace(user, namespace, permission)) {<a name="line.263"></a>
 <span class="sourceLineNo">264</span>        result =<a name="line.264"></a>
 <span class="sourceLineNo">265</span>            AuthResult.allow(request, "Namespace permission granted", user, permission, namespace);<a name="line.265"></a>
 <span class="sourceLineNo">266</span>        result.getParams().setTableName(tableName).setFamilies(familyMap);<a name="line.266"></a>
@@ -307,7 +307,7 @@
 <span class="sourceLineNo">299</span>    AuthResult result = null;<a name="line.299"></a>
 <span class="sourceLineNo">300</span><a name="line.300"></a>
 <span class="sourceLineNo">301</span>    for (Action permission : permissions) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      if (authManager.authorize(user, tableName, family, qualifier, permission)) {<a name="line.302"></a>
+<span class="sourceLineNo">302</span>      if (authManager.authorizeUserTable(user, tableName, family, qualifier, permission)) {<a name="line.302"></a>
 <span class="sourceLineNo">303</span>        result = AuthResult.allow(request, "Table permission granted",<a name="line.303"></a>
 <span class="sourceLineNo">304</span>            user, permission, tableName, family, qualifier);<a name="line.304"></a>
 <span class="sourceLineNo">305</span>        break;<a name="line.305"></a>
@@ -345,7 +345,7 @@
 <span class="sourceLineNo">337</span>    AuthResult result = null;<a name="line.337"></a>
 <span class="sourceLineNo">338</span><a name="line.338"></a>
 <span class="sourceLineNo">339</span>    for (Action permission : permissions) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      if (authManager.authorize(user, tableName, null, null, permission)) {<a name="line.340"></a>
+<span class="sourceLineNo">340</span>      if (authManager.authorizeUserTable(user, tableName, permission)) {<a name="line.340"></a>
 <span class="sourceLineNo">341</span>        result = AuthResult.allow(request, "Table permission granted",<a name="line.341"></a>
 <span class="sourceLineNo">342</span>            user, permission, tableName, null, null);<a name="line.342"></a>
 <span class="sourceLineNo">343</span>        result.getParams().setFamily(family).setQualifier(qualifier);<a name="line.343"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html
index d69fb6a..f5e1bf7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html
@@ -46,7 +46,7 @@
 <span class="sourceLineNo">038</span> *<a name="line.38"></a>
 <span class="sourceLineNo">039</span> * &lt;p&gt;<a name="line.39"></a>
 <span class="sourceLineNo">040</span> * TODO: There is room for further performance optimization here.<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * Calling TableAuthManager.authorize() per KeyValue imposes a fair amount of<a name="line.41"></a>
+<span class="sourceLineNo">041</span> * Calling AuthManager.authorize() per KeyValue imposes a fair amount of<a name="line.41"></a>
 <span class="sourceLineNo">042</span> * overhead.  A more optimized solution might look at the qualifiers where<a name="line.42"></a>
 <span class="sourceLineNo">043</span> * permissions are actually granted and explicitly limit the scan to those.<a name="line.43"></a>
 <span class="sourceLineNo">044</span> * &lt;/p&gt;<a name="line.44"></a>
@@ -66,7 +66,7 @@
 <span class="sourceLineNo">058</span>    CHECK_CELL_DEFAULT,<a name="line.58"></a>
 <span class="sourceLineNo">059</span>  }<a name="line.59"></a>
 <span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  private TableAuthManager authManager;<a name="line.61"></a>
+<span class="sourceLineNo">061</span>  private AuthManager authManager;<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  private TableName table;<a name="line.62"></a>
 <span class="sourceLineNo">063</span>  private User user;<a name="line.63"></a>
 <span class="sourceLineNo">064</span>  private boolean isSystemTable;<a name="line.64"></a>
@@ -83,7 +83,7 @@
 <span class="sourceLineNo">075</span>  AccessControlFilter() {<a name="line.75"></a>
 <span class="sourceLineNo">076</span>  }<a name="line.76"></a>
 <span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>  AccessControlFilter(TableAuthManager mgr, User ugi, TableName tableName,<a name="line.78"></a>
+<span class="sourceLineNo">078</span>  AccessControlFilter(AuthManager mgr, User ugi, TableName tableName,<a name="line.78"></a>
 <span class="sourceLineNo">079</span>      Strategy strategy, Map&lt;ByteRange, Integer&gt; cfVsMaxVersions) {<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    authManager = mgr;<a name="line.80"></a>
 <span class="sourceLineNo">081</span>    table = tableName;<a name="line.81"></a>
@@ -127,20 +127,20 @@
 <span class="sourceLineNo">119</span>      return ReturnCode.SKIP;<a name="line.119"></a>
 <span class="sourceLineNo">120</span>    }<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    // XXX: Compare in place, don't clone<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    byte[] family = CellUtil.cloneFamily(cell);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    byte[] qualifier = CellUtil.cloneQualifier(cell);<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    byte[] f = CellUtil.cloneFamily(cell);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    byte[] q = CellUtil.cloneQualifier(cell);<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    switch (strategy) {<a name="line.124"></a>
 <span class="sourceLineNo">125</span>      // Filter only by checking the table or CF permissions<a name="line.125"></a>
 <span class="sourceLineNo">126</span>      case CHECK_TABLE_AND_CF_ONLY: {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        if (authManager.authorize(user, table, family, qualifier, Permission.Action.READ)) {<a name="line.127"></a>
+<span class="sourceLineNo">127</span>        if (authManager.authorizeUserTable(user, table, f, q, Permission.Action.READ)) {<a name="line.127"></a>
 <span class="sourceLineNo">128</span>          return ReturnCode.INCLUDE;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>        }<a name="line.129"></a>
 <span class="sourceLineNo">130</span>      }<a name="line.130"></a>
 <span class="sourceLineNo">131</span>      break;<a name="line.131"></a>
 <span class="sourceLineNo">132</span>      // Cell permissions can override table or CF permissions<a name="line.132"></a>
 <span class="sourceLineNo">133</span>      case CHECK_CELL_DEFAULT: {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        if (authManager.authorize(user, table, family, qualifier, Permission.Action.READ) ||<a name="line.134"></a>
-<span class="sourceLineNo">135</span>            authManager.authorize(user, table, cell, Permission.Action.READ)) {<a name="line.135"></a>
+<span class="sourceLineNo">134</span>        if (authManager.authorizeUserTable(user, table, f, q, Permission.Action.READ) ||<a name="line.134"></a>
+<span class="sourceLineNo">135</span>            authManager.authorizeCell(user, table, cell, Permission.Action.READ)) {<a name="line.135"></a>
 <span class="sourceLineNo">136</span>          return ReturnCode.INCLUDE;<a name="line.136"></a>
 <span class="sourceLineNo">137</span>        }<a name="line.137"></a>
 <span class="sourceLineNo">138</span>      }<a name="line.138"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.html
index d69fb6a..f5e1bf7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.html
@@ -46,7 +46,7 @@
 <span class="sourceLineNo">038</span> *<a name="line.38"></a>
 <span class="sourceLineNo">039</span> * &lt;p&gt;<a name="line.39"></a>
 <span class="sourceLineNo">040</span> * TODO: There is room for further performance optimization here.<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * Calling TableAuthManager.authorize() per KeyValue imposes a fair amount of<a name="line.41"></a>
+<span class="sourceLineNo">041</span> * Calling AuthManager.authorize() per KeyValue imposes a fair amount of<a name="line.41"></a>
 <span class="sourceLineNo">042</span> * overhead.  A more optimized solution might look at the qualifiers where<a name="line.42"></a>
 <span class="sourceLineNo">043</span> * permissions are actually granted and explicitly limit the scan to those.<a name="line.43"></a>
 <span class="sourceLineNo">044</span> * &lt;/p&gt;<a name="line.44"></a>
@@ -66,7 +66,7 @@
 <span class="sourceLineNo">058</span>    CHECK_CELL_DEFAULT,<a name="line.58"></a>
 <span class="sourceLineNo">059</span>  }<a name="line.59"></a>
 <span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  private TableAuthManager authManager;<a name="line.61"></a>
+<span class="sourceLineNo">061</span>  private AuthManager authManager;<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  private TableName table;<a name="line.62"></a>
 <span class="sourceLineNo">063</span>  private User user;<a name="line.63"></a>
 <span class="sourceLineNo">064</span>  private boolean isSystemTable;<a name="line.64"></a>
@@ -83,7 +83,7 @@
 <span class="sourceLineNo">075</span>  AccessControlFilter() {<a name="line.75"></a>
 <span class="sourceLineNo">076</span>  }<a name="line.76"></a>
 <span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>  AccessControlFilter(TableAuthManager mgr, User ugi, TableName tableName,<a name="line.78"></a>
+<span class="sourceLineNo">078</span>  AccessControlFilter(AuthManager mgr, User ugi, TableName tableName,<a name="line.78"></a>
 <span class="sourceLineNo">079</span>      Strategy strategy, Map&lt;ByteRange, Integer&gt; cfVsMaxVersions) {<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    authManager = mgr;<a name="line.80"></a>
 <span class="sourceLineNo">081</span>    table = tableName;<a name="line.81"></a>
@@ -127,20 +127,20 @@
 <span class="sourceLineNo">119</span>      return ReturnCode.SKIP;<a name="line.119"></a>
 <span class="sourceLineNo">120</span>    }<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    // XXX: Compare in place, don't clone<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    byte[] family = CellUtil.cloneFamily(cell);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    byte[] qualifier = CellUtil.cloneQualifier(cell);<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    byte[] f = CellUtil.cloneFamily(cell);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    byte[] q = CellUtil.cloneQualifier(cell);<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    switch (strategy) {<a name="line.124"></a>
 <span class="sourceLineNo">125</span>      // Filter only by checking the table or CF permissions<a name="line.125"></a>
 <span class="sourceLineNo">126</span>      case CHECK_TABLE_AND_CF_ONLY: {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        if (authManager.authorize(user, table, family, qualifier, Permission.Action.READ)) {<a name="line.127"></a>
+<span class="sourceLineNo">127</span>        if (authManager.authorizeUserTable(user, table, f, q, Permission.Action.READ)) {<a name="line.127"></a>
 <span class="sourceLineNo">128</span>          return ReturnCode.INCLUDE;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>        }<a name="line.129"></a>
 <span class="sourceLineNo">130</span>      }<a name="line.130"></a>
 <span class="sourceLineNo">131</span>      break;<a name="line.131"></a>
 <span class="sourceLineNo">132</span>      // Cell permissions can override table or CF permissions<a name="line.132"></a>
 <span class="sourceLineNo">133</span>      case CHECK_CELL_DEFAULT: {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        if (authManager.authorize(user, table, family, qualifier, Permission.Action.READ) ||<a name="line.134"></a>
-<span class="sourceLineNo">135</span>            authManager.authorize(user, table, cell, Permission.Action.READ)) {<a name="line.135"></a>
+<span class="sourceLineNo">134</span>        if (authManager.authorizeUserTable(user, table, f, q, Permission.Action.READ) ||<a name="line.134"></a>
+<span class="sourceLineNo">135</span>            authManager.authorizeCell(user, table, cell, Permission.Action.READ)) {<a name="line.135"></a>
 <span class="sourceLineNo">136</span>          return ReturnCode.INCLUDE;<a name="line.136"></a>
 <span class="sourceLineNo">137</span>        }<a name="line.137"></a>
 <span class="sourceLineNo">138</span>      }<a name="line.138"></a>


[47/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/AuthUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/AuthUtil.html b/devapidocs/org/apache/hadoop/hbase/AuthUtil.html
index 86e2a30..cb321b1 100644
--- a/devapidocs/org/apache/hadoop/hbase/AuthUtil.html
+++ b/devapidocs/org/apache/hadoop/hbase/AuthUtil.html
@@ -152,7 +152,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  an example of configuring a user of this Auth Chore to run on a secure cluster.
  <pre>
  </pre>
- This class will be internal use only from 2.2.0 version, and will transparently work
+ This class will be internal used only from 2.2.0 version, and will transparently work
  for kerberized applications. For more, please refer
  <a href="http://hbase.apache.org/book.html#hbase.secure.configuration">Client-side Configuration for Secure Operation</a></div>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 155a44c..38f7cc7 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -169,8 +169,8 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
index a2e2524..320a52a 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
@@ -8234,11 +8234,11 @@ service.</div>
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
-         <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Authorize a user for a given KV.</div>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeCell-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeCell</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+             <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+             <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+             <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in cell scope.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -8255,7 +8255,7 @@ service.</div>
                          <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#parsePermissionRecord-byte:A-org.apache.hadoop.hbase.Cell-byte:A-byte:A-boolean-java.lang.String-">parsePermissionRecord</a></span>(byte[]&nbsp;entryName,
                      <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv,
                      byte[]&nbsp;cf,


[35/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/TableAuthManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/TableAuthManager.html b/devapidocs/org/apache/hadoop/hbase/security/access/TableAuthManager.html
deleted file mode 100644
index 08041b5..0000000
--- a/devapidocs/org/apache/hadoop/hbase/security/access/TableAuthManager.html
+++ /dev/null
@@ -1,1290 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TableAuthManager (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TableAuthManager (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":9,"i16":10,"i17":9,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":9,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TableAuthManager.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TableAuthManager.html" target="_top">Frames</a></li>
-<li><a href="TableAuthManager.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
-<h2 title="Class TableAuthManager" class="title">Class TableAuthManager</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.security.access.TableAuthManager</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></dd>
-</dl>
-<hr>
-<br>
-<pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.56">TableAuthManager</a>
-extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
-implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></pre>
-<div class="block">Performs authorization checks for a given user's assigned permissions</div>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="nested.class.summary">
-<!--   -->
-</a>
-<h3>Nested Class Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
-<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a> extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private org.apache.hadoop.conf.Configuration</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#conf">conf</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#globalCache">globalCache</a></span></code>
-<div class="block">Cache of global permissions</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#LOG">LOG</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#managerMap">managerMap</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#mtime">mtime</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#nsCache">nsCache</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#refCount">refCount</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#tableCache">tableCache</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#zkperms">zkperms</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier</th>
-<th class="colLast" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#TableAuthManager-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">TableAuthManager</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
-                org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Authorizes a global permission</div>
-</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         byte[]&nbsp;family,
-         byte[]&nbsp;qualifier,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Authorize a global permission based on ACLs for the given user and the
- user's groups.</div>
-</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         byte[]&nbsp;family,
-         byte[]&nbsp;qualifier,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr id="i6" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         byte[]&nbsp;family,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Authorize a user for a given KV.</div>
-</td>
-</tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeGroup-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeGroup</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
-              <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks global authorization for a given action for a group, based on the stored
- permissions.</div>
-</td>
-</tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeGroup-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeGroup</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
-              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-              byte[]&nbsp;family,
-              byte[]&nbsp;qualifier,
-              <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks authorization to a given table, column family and column for a group, based
- on the stored permissions.</div>
-</td>
-</tr>
-<tr id="i10" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUser</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             byte[]&nbsp;family,
-             byte[]&nbsp;qualifier,
-             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr id="i11" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUser</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             byte[]&nbsp;family,
-             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks authorization to a given table and column family for a user, based on the
- stored user permissions.</div>
-</td>
-</tr>
-<tr id="i12" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#close--">close</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i13" class="rowColor">
-<td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getMTime--">getMTime</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i14" class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getNamespacePermissions-java.lang.String-">getNamespacePermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</code>&nbsp;</td>
-</tr>
-<tr id="i15" class="rowColor">
-<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getOrCreate-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">getOrCreate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
-           org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block">Returns a TableAuthManager from the cache.</div>
-</td>
-</tr>
-<tr id="i16" class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getTablePermissions-org.apache.hadoop.hbase.TableName-">getTablePermissions</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>&nbsp;</td>
-</tr>
-<tr id="i17" class="rowColor">
-<td class="colFirst"><code>static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getTotalRefCount--">getTotalRefCount</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i18" class="altColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getZKPermissionWatcher--">getZKPermissionWatcher</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i19" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#groupHasAccess-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">groupHasAccess</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
-              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-              <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks if the user has access to the full table or at least a family/qualifier
- for the specified action.</div>
-</td>
-</tr>
-<tr id="i20" class="altColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#hasAccess-java.util.List-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccess</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr id="i21" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#hasAccess-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccess</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr id="i22" class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#initGlobal-org.apache.hadoop.conf.Configuration-">initGlobal</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block">Returns a new <code>PermissionCache</code> initialized with permission assignments
- from the <code>hbase.superuser</code> configuration key.</div>
-</td>
-</tr>
-<tr id="i23" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#matchPermission-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchPermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-               byte[]&nbsp;family,
-               byte[]&nbsp;qualifier,
-               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr id="i24" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#matchPermission-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchPermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-               byte[]&nbsp;family,
-               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Returns true if the given user has a <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access"><code>TablePermission</code></a> matching up
- to the column family portion of a permission.</div>
-</td>
-</tr>
-<tr id="i25" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#refreshNamespaceCacheFromWritable-java.lang.String-byte:A-">refreshNamespaceCacheFromWritable</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                                 byte[]&nbsp;data)</code>&nbsp;</td>
-</tr>
-<tr id="i26" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#refreshTableCacheFromWritable-org.apache.hadoop.hbase.TableName-byte:A-">refreshTableCacheFromWritable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                             byte[]&nbsp;data)</code>&nbsp;</td>
-</tr>
-<tr id="i27" class="rowColor">
-<td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#release-org.apache.hadoop.hbase.security.access.TableAuthManager-">release</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;instance)</code>
-<div class="block">Releases the resources for the given TableAuthManager if the reference count is down to 0.</div>
-</td>
-</tr>
-<tr id="i28" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#removeNamespace-byte:A-">removeNamespace</a></span>(byte[]&nbsp;ns)</code>&nbsp;</td>
-</tr>
-<tr id="i29" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#removeTable-org.apache.hadoop.hbase.TableName-">removeTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>&nbsp;</td>
-</tr>
-<tr id="i30" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#setNamespaceGroupPermissions-java.lang.String-java.lang.String-java.util.List-">setNamespaceGroupPermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;group,
-                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms)</code>
-<div class="block">Overwrites the existing permission set for a group and triggers an update
- for zookeeper synchronization.</div>
-</td>
-</tr>
-<tr id="i31" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#setNamespaceUserPermissions-java.lang.String-java.lang.String-java.util.List-">setNamespaceUserPermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
-                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms)</code>
-<div class="block">Overwrites the existing permission set for a given user for a table, and
- triggers an update for zookeeper synchronization.</div>
-</td>
-</tr>
-<tr id="i32" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#setTableGroupPermissions-java.lang.String-org.apache.hadoop.hbase.TableName-java.util.List-">setTableGroupPermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;group,
-                        <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms)</code>
-<div class="block">Overwrites the existing permission set for a group and triggers an update
- for zookeeper synchronization.</div>
-</td>
-</tr>
-<tr id="i33" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#setTableUserPermissions-java.lang.String-org.apache.hadoop.hbase.TableName-java.util.List-">setTableUserPermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
-                       <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms)</code>
-<div class="block">Overwrites the existing permission set for a given user for a table, and
- triggers an update for zookeeper synchronization.</div>
-</td>
-</tr>
-<tr id="i34" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#updateGlobalCache-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">updateGlobalCache</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;userPerms)</code>
-<div class="block">Updates the internal global permissions cache</div>
-</td>
-</tr>
-<tr id="i35" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#updateNsCache-java.lang.String-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">updateNsCache</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-             org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;tablePerms)</code>
-<div class="block">Updates the internal permissions cache for a single table, splitting
- the permissions listed into separate caches for users and groups to optimize
- group lookups.</div>
-</td>
-</tr>
-<tr id="i36" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#updateTableCache-org.apache.hadoop.hbase.TableName-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">updateTableCache</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;tablePerms)</code>
-<div class="block">Updates the internal permissions cache for a single table, splitting
- the permissions listed into separate caches for users and groups to optimize
- group lookups.</div>
-</td>
-</tr>
-<tr id="i37" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#userHasAccess-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">userHasAccess</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks if the user has access to the full table or at least a family/qualifier
- for the specified action.</div>
-</td>
-</tr>
-<tr id="i38" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#writeNamespaceToZooKeeper-java.lang.String-org.apache.hadoop.hbase.security.access.TableAuthManager.PermissionCache-">writeNamespaceToZooKeeper</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                         <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;tablePerms)</code>&nbsp;</td>
-</tr>
-<tr id="i39" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#writeTableToZooKeeper-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.TableAuthManager.PermissionCache-">writeTableToZooKeeper</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                     <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;tablePerms)</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="LOG">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.101">LOG</a></pre>
-</li>
-</ul>
-<a name="globalCache">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>globalCache</h4>
-<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.104">globalCache</a></pre>
-<div class="block">Cache of global permissions</div>
-</li>
-</ul>
-<a name="tableCache">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>tableCache</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.106">tableCache</a></pre>
-</li>
-</ul>
-<a name="nsCache">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>nsCache</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.109">nsCache</a></pre>
-</li>
-</ul>
-<a name="conf">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>conf</h4>
-<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.112">conf</a></pre>
-</li>
-</ul>
-<a name="zkperms">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>zkperms</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.113">zkperms</a></pre>
-</li>
-</ul>
-<a name="mtime">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>mtime</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.114">mtime</a></pre>
-</li>
-</ul>
-<a name="managerMap">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>managerMap</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.738">managerMap</a></pre>
-</li>
-</ul>
-<a name="refCount">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>refCount</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.740">refCount</a></pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="TableAuthManager-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>TableAuthManager</h4>
-<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.116">TableAuthManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
-                         org.apache.hadoop.conf.Configuration&nbsp;conf)
-                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="close--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.132">close</a>()</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true#close--" title="class or interface in java.io">close</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></code></dd>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="initGlobal-org.apache.hadoop.conf.Configuration-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>initGlobal</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.140">initGlobal</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
-                                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<div class="block">Returns a new <code>PermissionCache</code> initialized with permission assignments
- from the <code>hbase.superuser</code> configuration key.</div>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="getZKPermissionWatcher--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getZKPermissionWatcher</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.166">getZKPermissionWatcher</a>()</pre>
-</li>
-</ul>
-<a name="refreshTableCacheFromWritable-org.apache.hadoop.hbase.TableName-byte:A-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>refreshTableCacheFromWritable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.170">refreshTableCacheFromWritable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                                          byte[]&nbsp;data)
-                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="refreshNamespaceCacheFromWritable-java.lang.String-byte:A-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>refreshNamespaceCacheFromWritable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.192">refreshNamespaceCacheFromWritable</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                                              byte[]&nbsp;data)
-                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="updateGlobalCache-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>updateGlobalCache</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.213">updateGlobalCache</a>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;userPerms)</pre>
-<div class="block">Updates the internal global permissions cache</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>userPerms</code> - </dd>
-</dl>
-</li>
-</ul>
-<a name="updateTableCache-org.apache.hadoop.hbase.TableName-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>updateTableCache</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.241">updateTableCache</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                              org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;tablePerms)</pre>
-<div class="block">Updates the internal permissions cache for a single table, splitting
- the permissions listed into separate caches for users and groups to optimize
- group lookups.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>table</code> - </dd>
-<dd><code>tablePerms</code> - </dd>
-</dl>
-</li>
-</ul>
-<a name="updateNsCache-java.lang.String-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>updateNsCache</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.265">updateNsCache</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                           org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;tablePerms)</pre>
-<div class="block">Updates the internal permissions cache for a single table, splitting
- the permissions listed into separate caches for users and groups to optimize
- group lookups.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>namespace</code> - </dd>
-<dd><code>tablePerms</code> - </dd>
-</dl>
-</li>
-</ul>
-<a name="getTablePermissions-org.apache.hadoop.hbase.TableName-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getTablePermissions</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.281">getTablePermissions</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
-</li>
-</ul>
-<a name="getNamespacePermissions-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getNamespacePermissions</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.285">getNamespacePermissions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</pre>
-</li>
-</ul>
-<a name="authorize-java.util.List-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>authorize</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.295">authorize</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms,
-                          <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-<div class="block">Authorizes a global permission</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>perms</code> - </dd>
-<dd><code>action</code> - </dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if authorized, false otherwise</dd>
-</dl>
-</li>
-</ul>
-<a name="authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>authorize</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.316">authorize</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-                         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-<div class="block">Authorize a global permission based on ACLs for the given user and the
- user's groups.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>user</code> - </dd>
-<dd><code>action</code> - </dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if known and authorized, false otherwise</dd>
-</dl>
-</li>
-</ul>
-<a name="authorize-java.util.List-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>authorize</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.336">authorize</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-                          <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                          byte[]&nbsp;family,
-                          byte[]&nbsp;qualifier,
-                          <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-</li>
-</ul>
-<a name="hasAccess-java.util.List-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>hasAccess</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.351">hasAccess</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-                          <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                          <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-</li>
-</ul>
-<a name="authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>authorize</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.368">authorize</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-                         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                         <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
-                         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-<div class="block">Authorize a user for a given KV. This is called from AccessControlFilter.</div>
-</li>
-</ul>
-<a name="authorize-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>authorize</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.391">authorize</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-</li>
-</ul>
-<a name="authorize-java.util.List-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>authorize</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.416">authorize</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                          <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-</li>
-</ul>
-<a name="authorizeUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>authorizeUser</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.441">authorizeUser</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-                             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                             byte[]&nbsp;family,
-                             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-<div class="block">Checks authorization to a given table and column family for a user, based on the
- stored user permissions.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>user</code> - </dd>
-<dd><code>table</code> - </dd>
-<dd><code>family</code> - </dd>
-<dd><code>action</code> - </dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if known and authorized, false otherwise</dd>
-</dl>
-</li>
-</ul>
-<a name="authorizeUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>authorizeUser</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.446">authorizeUser</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-                             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                             byte[]&nbsp;family,
-                             byte[]&nbsp;qualifier,
-                             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-</li>
-</ul>
-<a name="userHasAccess-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>userHasAccess</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.467">userHasAccess</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-                             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-<div class="block">Checks if the user has access to the full table or at least a family/qualifier
- for the specified action.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>user</code> - </dd>
-<dd><code>table</code> - </dd>
-<dd><code>action</code> - </dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if the user has access to the table, false otherwise</dd>
-</dl>
-</li>
-</ul>
-<a name="authorizeGroup-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>authorizeGroup</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.481">authorizeGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
-                              <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-<div class="block">Checks global authorization for a given action for a group, based on the stored
- permissions.</div>
-</li>
-</ul>
-<a name="authorizeGroup-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>authorizeGroup</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.500">authorizeGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
-                              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                              byte[]&nbsp;family,
-                              byte[]&nbsp;qualifier,
-                              <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-<div class="block">Checks authorization to a given table, column family and column for a group, based
- on the stored permissions.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>groupName</code> - </dd>
-<dd><code>table</code> - </dd>
-<dd><code>family</code> - </dd>
-<dd><code>qualifier</code> - </dd>
-<dd><code>action</code> - </dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if known and authorized, false otherwise</dd>
-</dl>
-</li>
-</ul>
-<a name="groupHasAccess-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>groupHasAccess</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.530">groupHasAccess</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
-                              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                              <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-<div class="block">Checks if the user has access to the full table or at least a family/qualifier
- for the specified action.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>groupName</code> - </dd>
-<dd><code>table</code> - </dd>
-<dd><code>action</code> - </dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if the group has access to the table, false otherwise</dd>
-</dl>
-</li>
-</ul>
-<a name="authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>authorize</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.545">authorize</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-                         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                         byte[]&nbsp;family,
-                         byte[]&nbsp;qualifier,
-                         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-</li>
-</ul>
-<a name="hasAccess-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>hasAccess</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.562">hasAccess</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-                         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-</li>
-</ul>
-<a name="authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>authorize</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.578">authorize</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-                         <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                         byte[]&nbsp;family,
-                         <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
-</li>
-</ul>
-<a name="matchPermission-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>matchPermission</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.589">matchPermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-                               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp

<TRUNCATED>

[16/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html
deleted file mode 100644
index 2e68b22..0000000
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html
+++ /dev/null
@@ -1,859 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
-<span class="sourceLineNo">009</span> *<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
-<span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.util.CollectionUtils.computeIfAbsent;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.io.Closeable;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.io.IOException;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.HashMap;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.Cell;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.TableName;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.security.User;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.zookeeper.KeeperException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.slf4j.Logger;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.slf4j.LoggerFactory;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Performs authorization checks for a given user's assigned permissions<a name="line.53"></a>
-<span class="sourceLineNo">054</span> */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>@InterfaceAudience.Private<a name="line.55"></a>
-<span class="sourceLineNo">056</span>public class TableAuthManager implements Closeable {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private static class PermissionCache&lt;T extends Permission&gt; {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    /** Cache of user permissions */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    private ListMultimap&lt;String,T&gt; userCache = ArrayListMultimap.create();<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    /** Cache of group permissions */<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    private ListMultimap&lt;String,T&gt; groupCache = ArrayListMultimap.create();<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>    public List&lt;T&gt; getUser(String user) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      return userCache.get(user);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    }<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>    public void putUser(String user, T perm) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      userCache.put(user, perm);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>    public List&lt;T&gt; replaceUser(String user, Iterable&lt;? extends T&gt; perms) {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      return userCache.replaceValues(user, perms);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>    public List&lt;T&gt; getGroup(String group) {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      return groupCache.get(group);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public void putGroup(String group, T perm) {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      groupCache.put(group, perm);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>    public List&lt;T&gt; replaceGroup(String group, Iterable&lt;? extends T&gt; perms) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      return groupCache.replaceValues(group, perms);<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>    /**<a name="line.87"></a>
-<span class="sourceLineNo">088</span>     * Returns a combined map of user and group permissions, with group names<a name="line.88"></a>
-<span class="sourceLineNo">089</span>     * distinguished according to {@link AuthUtil#isGroupPrincipal(String)}.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>     */<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    public ListMultimap&lt;String,T&gt; getAllPermissions() {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      ListMultimap&lt;String,T&gt; tmp = ArrayListMultimap.create();<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      tmp.putAll(userCache);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      for (String group : groupCache.keySet()) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        tmp.putAll(AuthUtil.toGroupEntry(group), groupCache.get(group));<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      }<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      return tmp;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private static final Logger LOG = LoggerFactory.getLogger(TableAuthManager.class);<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  /** Cache of global permissions */<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private volatile PermissionCache&lt;Permission&gt; globalCache;<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  private ConcurrentSkipListMap&lt;TableName, PermissionCache&lt;TablePermission&gt;&gt; tableCache =<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      new ConcurrentSkipListMap&lt;&gt;();<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  private ConcurrentSkipListMap&lt;String, PermissionCache&lt;TablePermission&gt;&gt; nsCache =<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    new ConcurrentSkipListMap&lt;&gt;();<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  private Configuration conf;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private ZKPermissionWatcher zkperms;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  private final AtomicLong mtime = new AtomicLong(0L);<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private TableAuthManager(ZKWatcher watcher, Configuration conf)<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      throws IOException {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    this.conf = conf;<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>    // initialize global permissions based on configuration<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    globalCache = initGlobal(conf);<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>    this.zkperms = new ZKPermissionWatcher(watcher, this, conf);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      this.zkperms.start();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    } catch (KeeperException ke) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.error("ZooKeeper initialization failed", ke);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public void close() {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    this.zkperms.close();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * Returns a new {@code PermissionCache} initialized with permission assignments<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * from the {@code hbase.superuser} configuration key.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private PermissionCache&lt;Permission&gt; initGlobal(Configuration conf) throws IOException {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    UserProvider userProvider = UserProvider.instantiate(conf);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    User user = userProvider.getCurrent();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    if (user == null) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      throw new IOException("Unable to obtain the current user, " +<a name="line.144"></a>
-<span class="sourceLineNo">145</span>          "authorization checks for internal operations will not work correctly!");<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    PermissionCache&lt;Permission&gt; newCache = new PermissionCache&lt;&gt;();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    String currentUser = user.getShortName();<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>    // the system user is always included<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    List&lt;String&gt; superusers = Lists.asList(currentUser, conf.getStrings(<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        Superusers.SUPERUSER_CONF_KEY, new String[0]));<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    if (superusers != null) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      for (String name : superusers) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        if (AuthUtil.isGroupPrincipal(name)) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>          newCache.putGroup(AuthUtil.getGroupName(name),<a name="line.156"></a>
-<span class="sourceLineNo">157</span>              new Permission(Permission.Action.values()));<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        } else {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          newCache.putUser(name, new Permission(Permission.Action.values()));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    return newCache;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return this.zkperms;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public void refreshTableCacheFromWritable(TableName table,<a name="line.170"></a>
-<span class="sourceLineNo">171</span>                                       byte[] data) throws IOException {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    if (data != null &amp;&amp; data.length &gt; 0) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      ListMultimap&lt;String,TablePermission&gt; perms;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      try {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        perms = AccessControlLists.readPermissions(data, conf);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      } catch (DeserializationException e) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        throw new IOException(e);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>      if (perms != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        if (Bytes.equals(table.getName(), AccessControlLists.ACL_GLOBAL_NAME)) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>          updateGlobalCache(perms);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        } else {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          updateTableCache(table, perms);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    } else {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      LOG.debug("Skipping permission cache refresh because writable data is empty");<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  public void refreshNamespaceCacheFromWritable(String namespace, byte[] data) throws IOException {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (data != null &amp;&amp; data.length &gt; 0) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      ListMultimap&lt;String,TablePermission&gt; perms;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      try {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        perms = AccessControlLists.readPermissions(data, conf);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      } catch (DeserializationException e) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        throw new IOException(e);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      if (perms != null) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        updateNsCache(namespace, perms);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    } else {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      LOG.debug("Skipping permission cache refresh because writable data is empty");<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  /**<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * Updates the internal global permissions cache<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   *<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * @param userPerms<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  private void updateGlobalCache(ListMultimap&lt;String,TablePermission&gt; userPerms) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    PermissionCache&lt;Permission&gt; newCache = null;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    try {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      newCache = initGlobal(conf);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      for (Map.Entry&lt;String,TablePermission&gt; entry : userPerms.entries()) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        if (AuthUtil.isGroupPrincipal(entry.getKey())) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          newCache.putGroup(AuthUtil.getGroupName(entry.getKey()),<a name="line.219"></a>
-<span class="sourceLineNo">220</span>              new Permission(entry.getValue().getActions()));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        } else {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          newCache.putUser(entry.getKey(), new Permission(entry.getValue().getActions()));<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      globalCache = newCache;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      mtime.incrementAndGet();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    } catch (IOException e) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      // Never happens<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      LOG.error("Error occurred while updating the global cache", e);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * Updates the internal permissions cache for a single table, splitting<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * the permissions listed into separate caches for users and groups to optimize<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * group lookups.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   *<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param table<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @param tablePerms<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  private void updateTableCache(TableName table,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>                                ListMultimap&lt;String,TablePermission&gt; tablePerms) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    PermissionCache&lt;TablePermission&gt; newTablePerms = new PermissionCache&lt;&gt;();<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>    for (Map.Entry&lt;String,TablePermission&gt; entry : tablePerms.entries()) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      if (AuthUtil.isGroupPrincipal(entry.getKey())) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        newTablePerms.putGroup(AuthUtil.getGroupName(entry.getKey()), entry.getValue());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      } else {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        newTablePerms.putUser(entry.getKey(), entry.getValue());<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    tableCache.put(table, newTablePerms);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    mtime.incrementAndGet();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * Updates the internal permissions cache for a single table, splitting<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * the permissions listed into separate caches for users and groups to optimize<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * group lookups.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   *<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * @param namespace<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * @param tablePerms<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  private void updateNsCache(String namespace,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>                             ListMultimap&lt;String, TablePermission&gt; tablePerms) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    PermissionCache&lt;TablePermission&gt; newTablePerms = new PermissionCache&lt;&gt;();<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    for (Map.Entry&lt;String, TablePermission&gt; entry : tablePerms.entries()) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      if (AuthUtil.isGroupPrincipal(entry.getKey())) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        newTablePerms.putGroup(AuthUtil.getGroupName(entry.getKey()), entry.getValue());<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      } else {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        newTablePerms.putUser(entry.getKey(), entry.getValue());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>    nsCache.put(namespace, newTablePerms);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    mtime.incrementAndGet();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private PermissionCache&lt;TablePermission&gt; getTablePermissions(TableName table) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return computeIfAbsent(tableCache, table, PermissionCache::new);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  private PermissionCache&lt;TablePermission&gt; getNamespacePermissions(String namespace) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return computeIfAbsent(nsCache, namespace, PermissionCache::new);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  }<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>  /**<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * Authorizes a global permission<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @param perms<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * @param action<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * @return true if authorized, false otherwise<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  private boolean authorize(List&lt;Permission&gt; perms, Permission.Action action) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    if (perms != null) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      for (Permission p : perms) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        if (p.implies(action)) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          return true;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    } else if (LOG.isDebugEnabled()) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      LOG.debug("No permissions found for " + action);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return false;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>  /**<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * Authorize a global permission based on ACLs for the given user and the<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * user's groups.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @param user<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @param action<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * @return true if known and authorized, false otherwise<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  public boolean authorize(User user, Permission.Action action) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    if (user == null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      return false;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    if (authorize(globalCache.getUser(user.getShortName()), action)) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      return true;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    String[] groups = user.getGroupNames();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (groups != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      for (String group : groups) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        if (authorize(globalCache.getGroup(group), action)) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>          return true;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    return false;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private boolean authorize(List&lt;TablePermission&gt; perms,<a name="line.336"></a>
-<span class="sourceLineNo">337</span>                            TableName table, byte[] family,<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                            byte[] qualifier, Permission.Action action) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    if (perms != null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      for (TablePermission p : perms) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        if (p.implies(table, family, qualifier, action)) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>          return true;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    } else if (LOG.isDebugEnabled()) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      LOG.debug("No permissions found for table="+table);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return false;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>  private boolean hasAccess(List&lt;TablePermission&gt; perms,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>                            TableName table, Permission.Action action) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    if (perms != null) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      for (TablePermission p : perms) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (p.implies(action)) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          return true;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    } else if (LOG.isDebugEnabled()) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      LOG.debug("No permissions found for table="+table);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    return false;<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * Authorize a user for a given KV. This is called from AccessControlFilter.<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   */<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  public boolean authorize(User user, TableName table, Cell cell, Permission.Action action) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    try {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      List&lt;Permission&gt; perms = AccessControlLists.getCellPermissionsForUser(user, cell);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      if (LOG.isTraceEnabled()) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        LOG.trace("Perms for user " + user.getShortName() + " in cell " + cell + ": " +<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          (perms != null ? perms : ""));<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      if (perms != null) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        for (Permission p: perms) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          if (p.implies(action)) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>            return true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    } catch (IOException e) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      // We failed to parse the KV tag<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      LOG.error("Failed parse of ACL tag in cell " + cell);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      // Fall through to check with the table and CF perms we were able<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      // to collect regardless<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return false;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  public boolean authorize(User user, String namespace, Permission.Action action) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // Global authorizations supercede namespace level<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    if (authorize(user, action)) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      return true;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    // Check namespace permissions<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    PermissionCache&lt;TablePermission&gt; tablePerms = nsCache.get(namespace);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    if (tablePerms != null) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      List&lt;TablePermission&gt; userPerms = tablePerms.getUser(user.getShortName());<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      if (authorize(userPerms, namespace, action)) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        return true;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      String[] groupNames = user.getGroupNames();<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      if (groupNames != null) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        for (String group : groupNames) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          List&lt;TablePermission&gt; groupPerms = tablePerms.getGroup(group);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          if (authorize(groupPerms, namespace, action)) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>            return true;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    return false;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private boolean authorize(List&lt;TablePermission&gt; perms, String namespace,<a name="line.416"></a>
-<span class="sourceLineNo">417</span>                            Permission.Action action) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    if (perms != null) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      for (TablePermission p : perms) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        if (p.implies(namespace, action)) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          return true;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      }<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    } else if (LOG.isDebugEnabled()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      LOG.debug("No permissions for authorize() check, table=" + namespace);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    return false;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  /**<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   * Checks authorization to a given table and column family for a user, based on the<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * stored user permissions.<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   *<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * @param user<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * @param table<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @param family<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   * @param action<a name="line.438"></a>
-<span class="sourceLineNo">439</span>   * @return true if known and authorized, false otherwise<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   */<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  public boolean authorizeUser(User user, TableName table, byte[] family,<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      Permission.Action action) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return authorizeUser(user, table, family, null, action);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>  public boolean authorizeUser(User user, TableName table, byte[] family,<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      byte[] qualifier, Permission.Action action) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    if (table == null) table = AccessControlLists.ACL_TABLE_NAME;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    // Global and namespace authorizations supercede table level<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (authorize(user, table.getNamespaceAsString(), action)) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      return true;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    }<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    // Check table permissions<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    return authorize(getTablePermissions(table).getUser(user.getShortName()), table, family,<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        qualifier, action);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>  /**<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * Checks if the user has access to the full table or at least a family/qualifier<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * for the specified action.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   *<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param user<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param table<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @param action<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @return true if the user has access to the table, false otherwise<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  public boolean userHasAccess(User user, TableName table, Permission.Action action) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (table == null) table = AccessControlLists.ACL_TABLE_NAME;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    // Global and namespace authorizations supercede table level<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    if (authorize(user, table.getNamespaceAsString(), action)) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      return true;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    // Check table permissions<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    return hasAccess(getTablePermissions(table).getUser(user.getShortName()), table, action);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>  /**<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   * Checks global authorization for a given action for a group, based on the stored<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * permissions.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  public boolean authorizeGroup(String groupName, Permission.Action action) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    List&lt;Permission&gt; perms = globalCache.getGroup(groupName);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    if (LOG.isDebugEnabled()) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      LOG.debug("authorizing " + (perms != null &amp;&amp; !perms.isEmpty() ? perms.get(0) : "") +<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        " for " + action);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return authorize(perms, action);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Checks authorization to a given table, column family and column for a group, based<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * on the stored permissions.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @param groupName<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * @param table<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * @param family<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * @param qualifier<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @param action<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * @return true if known and authorized, false otherwise<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   */<a name="line.499"></a>
-<span class="sourceLineNo">500</span>  public boolean authorizeGroup(String groupName, TableName table, byte[] family,<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      byte[] qualifier, Permission.Action action) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Global authorization supercedes table level<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    if (authorizeGroup(groupName, action)) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      return true;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    if (table == null) table = AccessControlLists.ACL_TABLE_NAME;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    // Namespace authorization supercedes table level<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    String namespace = table.getNamespaceAsString();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (authorize(getNamespacePermissions(namespace).getGroup(groupName), namespace, action)) {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      return true;<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // Check table level<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    List&lt;TablePermission&gt; tblPerms = getTablePermissions(table).getGroup(groupName);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    if (LOG.isDebugEnabled()) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      LOG.debug("authorizing " + (tblPerms != null &amp;&amp; !tblPerms.isEmpty() ? tblPerms.get(0) : "") +<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        " for " +groupName + " on " + table + "." + Bytes.toString(family) + "." +<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        Bytes.toString(qualifier) + " with " + action);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    return authorize(tblPerms, table, family, qualifier, action);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  /**<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   * Checks if the user has access to the full table or at least a family/qualifier<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * for the specified action.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   * @param groupName<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * @param table<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * @param action<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * @return true if the group has access to the table, false otherwise<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   */<a name="line.529"></a>
-<span class="sourceLineNo">530</span>  public boolean groupHasAccess(String groupName, TableName table, Permission.Action action) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    // Global authorization supercedes table level<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    if (authorizeGroup(groupName, action)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      return true;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    if (table == null) table = AccessControlLists.ACL_TABLE_NAME;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    // Namespace authorization supercedes table level<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    if (hasAccess(getNamespacePermissions(table.getNamespaceAsString()).getGroup(groupName),<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        table, action)) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      return true;<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    // Check table level<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    return hasAccess(getTablePermissions(table).getGroup(groupName), table, action);<a name="line.542"></a>
-<span class="sourceLineNo">543</span>  }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public boolean authorize(User user, TableName table, byte[] family,<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      byte[] qualifier, Permission.Action action) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    if (authorizeUser(user, table, family, qualifier, action)) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      return true;<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
-<span class="sourceLineNo">550</span><a name="line.550"></a>
-<span class="sourceLineNo">551</span>    String[] groups = user.getGroupNames();<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    if (groups != null) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      for (String group : groups) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        if (authorizeGroup(group, table, family, qualifier, action)) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>          return true;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      }<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    return false;<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  }<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>  public boolean hasAccess(User user, TableName table, Permission.Action action) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    if (userHasAccess(user, table, action)) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      return true;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    }<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span>    String[] groups = user.getGroupNames();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    if (groups != null) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      for (String group : groups) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        if (groupHasAccess(group, table, action)) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>          return true;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        }<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    }<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    return false;<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  public boolean authorize(User user, TableName table, byte[] family,<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      Permission.Action action) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    return authorize(user, table, family, null, action);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>  /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * Returns true if the given user has a {@link TablePermission} matching up<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * to the column family portion of a permission.  Note that this permission<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   * may be scoped to a given column qualifier and does not guarantee that<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * authorize() on the same column family would return true.<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  public boolean matchPermission(User user,<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      TableName table, byte[] family, Permission.Action action) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    PermissionCache&lt;TablePermission&gt; tablePerms = tableCache.get(table);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    if (tablePerms != null) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      List&lt;TablePermission&gt; userPerms = tablePerms.getUser(user.getShortName());<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      if (userPerms != null) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        for (TablePermission p : userPerms) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>          if (p.matchesFamily(table, family, action)) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>            return true;<a name="line.597"></a>
-<span class="sourceLineNo">598</span>          }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>        }<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>      String[] groups = user.getGroupNames();<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      if (groups != null) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>        for (String group : groups) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          List&lt;TablePermission&gt; groupPerms = tablePerms.getGroup(group);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>          if (groupPerms != null) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            for (TablePermission p : groupPerms) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>              if (p.matchesFamily(table, family, action)) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>                return true;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>              }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>            }<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          }<a name="line.612"></a>
-<span class="sourceLineNo">613</span>        }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      }<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    return false;<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span>  public boolean matchPermission(User user,<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      TableName table, byte[] family, byte[] qualifier,<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      Permission.Action action) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    PermissionCache&lt;TablePermission&gt; tablePerms = tableCache.get(table);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    if (tablePerms != null) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      List&lt;TablePermission&gt; userPerms = tablePerms.getUser(user.getShortName());<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      if (userPerms != null) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        for (TablePermission p : userPerms) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          if (p.matchesFamilyQualifier(table, family, qualifier, action)) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>            return true;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          }<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        }<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      }<a name="line.632"></a>
-<span class="sourceLineNo">633</span><a name="line.633"></a>
-<span class="sourceLineNo">634</span>      String[] groups = user.getGroupNames();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      if (groups != null) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span>        for (String group : groups) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          List&lt;TablePermission&gt; groupPerms = tablePerms.getGroup(group);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>          if (groupPerms != null) {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>            for (TablePermission p : groupPerms) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>              if (p.matchesFamilyQualifier(table, family, qualifier, action)) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>                return true;<a name="line.641"></a>
-<span class="sourceLineNo">642</span>              }<a name="line.642"></a>
-<span class="sourceLineNo">643</span>            }<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          }<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        }<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      }<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    return false;<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>  public void removeNamespace(byte[] ns) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    nsCache.remove(Bytes.toString(ns));<a name="line.652"></a>
-<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
-<span class="sourceLineNo">654</span><a name="line.654"></a>
-<span class="sourceLineNo">655</span>  public void removeTable(TableName table) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    tableCache.remove(table);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  /**<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * Overwrites the existing permission set for a given user for a table, and<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * triggers an update for zookeeper synchronization.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param username<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param table<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @param perms<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public void setTableUserPermissions(String username, TableName table,<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      List&lt;TablePermission&gt; perms) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    PermissionCache&lt;TablePermission&gt; tablePerms = getTablePermissions(table);<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    tablePerms.replaceUser(username, perms);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    writeTableToZooKeeper(table, tablePerms);<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>  /**<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * Overwrites the existing permission set for a group and triggers an update<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * for zookeeper synchronization.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * @param group<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   * @param table<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param perms<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   */<a name="line.679"></a>
-<span class="sourceLineNo">680</span>  public void setTableGroupPermissions(String group, TableName table,<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      List&lt;TablePermission&gt; perms) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    PermissionCache&lt;TablePermission&gt; tablePerms = getTablePermissions(table);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    tablePerms.replaceGroup(group, perms);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    writeTableToZooKeeper(table, tablePerms);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  }<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span>  /**<a name="line.687"></a>
-<span class="sourceLineNo">688</span>   * Overwrites the existing permission set for a given user for a table, and<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   * triggers an update for zookeeper synchronization.<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * @param username<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * @param namespace<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * @param perms<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   */<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  public void setNamespaceUserPermissions(String username, String namespace,<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      List&lt;TablePermission&gt; perms) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    PermissionCache&lt;TablePermission&gt; tablePerms = getNamespacePermissions(namespace);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    tablePerms.replaceUser(username, perms);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    writeNamespaceToZooKeeper(namespace, tablePerms);<a name="line.698"></a>
-<span class="sourceLineNo">699</span>  }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>  /**<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * Overwrites the existing permission set for a group and triggers an update<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * for zookeeper synchronization.<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * @param group<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   * @param namespace<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * @param perms<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   */<a name="line.707"></a>
-<span class="sourceLineNo">708</span>  public void setNamespaceGroupPermissions(String group, String namespace,<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      List&lt;TablePermission&gt; perms) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    PermissionCache&lt;TablePermission&gt; tablePerms = getNamespacePermissions(namespace);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    tablePerms.replaceGroup(group, perms);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    writeNamespaceToZooKeeper(namespace, tablePerms);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>  }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>  public void writeTableToZooKeeper(TableName table,<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      PermissionCache&lt;TablePermission&gt; tablePerms) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    byte[] serialized = new byte[0];<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    if (tablePerms != null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      serialized = AccessControlLists.writePermissionsAsBytes(tablePerms.getAllPermissions(), conf);<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    }<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    zkperms.writeToZookeeper(table.getName(), serialized);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  public void writeNamespaceToZooKeeper(String namespace,<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      PermissionCache&lt;TablePermission&gt; tablePerms) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    byte[] serialized = new byte[0];<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    if (tablePerms != null) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      serialized = AccessControlLists.writePermissionsAsBytes(tablePerms.getAllPermissions(), conf);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    }<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    zkperms.writeToZookeeper(Bytes.toBytes(AccessControlLists.toNamespaceEntry(namespace)),<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        serialized);<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  public long getMTime() {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    return mtime.get();<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span>  private static Map&lt;ZKWatcher,TableAuthManager&gt; managerMap = new HashMap&lt;&gt;();<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  private static Map&lt;TableAuthManager, Integer&gt; refCount = new HashMap&lt;&gt;();<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>  /** Returns a TableAuthManager from the cache. If not cached, constructs a new one. Returned<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * instance should be released back by calling {@link #release(TableAuthManager)}. */<a name="line.743"></a>
-<span class="sourceLineNo">744</span>  public synchronized static TableAuthManager getOrCreate(<a name="line.744"></a>
-<span class="sourceLineNo">745</span>          ZKWatcher watcher, Configuration conf) throws IOException {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    TableAuthManager instance = managerMap.get(watcher);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    if (instance == null) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      instance = new TableAuthManager(watcher, conf);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      managerMap.put(watcher, instance);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    }<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    int ref = refCount.get(instance) == null ? 0 : refCount.get(instance).intValue();<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    refCount.put(instance, ref + 1);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    return instance;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>  @VisibleForTesting<a name="line.756"></a>
-<span class="sourceLineNo">757</span>  public static int getTotalRefCount() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    int total = 0;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    for (int count : refCount.values()) {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      total += count;<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    }<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    return total;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span>  /**<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * Releases the resources for the given TableAuthManager if the reference count is down to 0.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @param instance TableAuthManager to be released<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  public synchronized static void release(TableAuthManager instance) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    if (refCount.get(instance) == null || refCount.get(instance) &lt; 1) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      String msg = "Something wrong with the TableAuthManager reference counting: " + instance<a name="line.771"></a>
-<span class="sourceLineNo">772</span>          + " whose count is " + refCount.get(instance);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      instance.close();<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      managerMap.remove(instance.getZKPermissionWatcher().getWatcher());<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      instance.getZKPermissionWatcher().getWatcher().abort(msg, null);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    } else {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      int ref = refCount.get(instance);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      refCount.put(instance, ref-1);<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      if (ref-1 == 0) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        instance.close();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>        managerMap.remove(instance.getZKPermissionWatcher().getWatcher());<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        refCount.remove(instance);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      }<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>  }<a name="line.786"></a>
-<span class="sourceLineNo">787</span>}<a name="line.787"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>


[33/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/UserPermission.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/UserPermission.html b/devapidocs/org/apache/hadoop/hbase/security/access/UserPermission.html
index fec80f5..797991d 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/UserPermission.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/UserPermission.html
@@ -74,7 +74,7 @@ var activeTableTab = "activeTableTab";
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">Nested</a>&nbsp;|&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
@@ -100,60 +100,26 @@ var activeTableTab = "activeTableTab";
 <li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
 <li>
 <ul class="inheritance">
-<li>org.apache.hadoop.io.VersionedWritable</li>
-<li>
-<ul class="inheritance">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access.Permission</a></li>
-<li>
-<ul class="inheritance">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access.TablePermission</a></li>
-<li>
-<ul class="inheritance">
 <li>org.apache.hadoop.hbase.security.access.UserPermission</li>
 </ul>
 </li>
 </ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd>org.apache.hadoop.io.Writable</dd>
-</dl>
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.36">UserPermission</a>
-extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></pre>
-<div class="block">Represents an authorization for access over the given table, column family
- plus qualifier, for the given user.</div>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.31">UserPermission</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">UserPermission consists of a user name and a permission.
+ Permission can be one of [Global, Namespace, Table] permission.</div>
 </li>
 </ul>
 </div>
 <div class="summary">
 <ul class="blockList">
 <li class="blockList">
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="nested.class.summary">
-<!--   -->
-</a>
-<h3>Nested Class Summary</h3>
-<ul class="blockList">
-<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">
-<!--   -->
-</a>
-<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a></code></li>
-</ul>
-</li>
-</ul>
 <!-- =========== FIELD SUMMARY =========== -->
 <ul class="blockList">
 <li class="blockList"><a name="field.summary">
@@ -167,21 +133,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Table
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#LOG">LOG</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#permission">permission</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private byte[]</code></td>
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#user">user</a></span></code>&nbsp;</td>
 </tr>
 </table>
-<ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">
-<!--   -->
-</a>
-<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#ACTION_BY_CODE">ACTION_BY_CODE</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#actions">actions</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#VERSION">VERSION</a></code></li>
-</ul>
 </li>
 </ul>
 <!-- ======== CONSTRUCTOR SUMMARY ======== -->
@@ -196,71 +155,61 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Table
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission--">UserPermission</a></span>()</code>
-<div class="block">Nullary constructor for Writable, do not use</div>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-byte:A-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              byte[]&nbsp;actionCode)</code>
+<div class="block">Construct a global user permission.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-byte:A-">UserPermission</a></span>(byte[]&nbsp;user,
-              byte[]&nbsp;actionCodes)</code>
-<div class="block">Creates a new instance for the given user,
- matching the actions with the given codes.</div>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
+<div class="block">Construct a global user permission.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(byte[]&nbsp;user,
-              <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Creates a new instance for the given user.</div>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;permission)</code>
+<div class="block">Construct a user permission given permission.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-java.lang.String-byte:A-">UserPermission</a></span>(byte[]&nbsp;user,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-              byte[]&nbsp;actionCodes)</code>
-<div class="block">Creates a new instance for the given user,
- matching the actions with the given codes.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(byte[]&nbsp;user,
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Creates a new instance for the given user.</div>
+<div class="block">Construct a namespace user permission.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-org.apache.hadoop.hbase.TableName-byte:A-byte:A-byte:A-">UserPermission</a></span>(byte[]&nbsp;user,
-              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-byte:A-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               byte[]&nbsp;family,
               byte[]&nbsp;qualifier,
               byte[]&nbsp;actionCodes)</code>
-<div class="block">Creates a new instance for the given user, table, column family and
- qualifier, matching the actions with the given codes.</div>
+<div class="block">Construct a table:family:qualifier user permission.</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(byte[]&nbsp;user,
-              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               byte[]&nbsp;family,
               byte[]&nbsp;qualifier,
               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Creates a new permission for the given user, table, column family and
- column qualifier.</div>
+<div class="block">Construct a table:family:qualifier user permission.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(byte[]&nbsp;user,
-              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               byte[]&nbsp;family,
               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Creates a new instance for the given user, table and column family.</div>
+<div class="block">Construct a table:family user permission.</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-org.apache.hadoop.hbase.security.access.TablePermission-">UserPermission</a></span>(byte[]&nbsp;user,
-              <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;perm)</code>
-<div class="block">Creates a new instance for the given user, table, column family and
- qualifier, matching the actions with the given codes.</div>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+              <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
+<div class="block">Construct a table user permission.</div>
 </td>
 </tr>
 </table>
@@ -283,47 +232,33 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Table
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#equals-java.lang.Object-">equals</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#getUser--">getUser</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#equalsExceptActions-java.lang.Object-">equalsExceptActions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
-<td class="colFirst"><code>int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#hashCode--">hashCode</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#getAccessScope--">getAccessScope</a></span>()</code>
+<div class="block">Get this permission access scope.</div>
+</td>
 </tr>
 <tr id="i3" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#isGlobal--">isGlobal</a></span>()</code>
-<div class="block">Returns true if this permission describes a global user permission.</div>
-</td>
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#getPermission--">getPermission</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i4" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#readFields-java.io.DataInput-">readFields</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#getUser--">getUser</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i5" class="rowColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#toString--">toString</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#hashCode--">hashCode</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i6" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#write-java.io.DataOutput-">write</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.security.access.TablePermission">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#getFamily--">getFamily</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#getNamespace--">getNamespace</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#getQualifier--">getQualifier</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#getTableName--">getTableName</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#hasFamily--">hasFamily</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#hasNamespace--">hasNamespace</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#hasQualifier--">hasQualifier</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#hasTable--">hasTable</a>, <a href="../../../../../../org/apac
 he/hadoop/hbase/security/access/TablePermission.html#implies-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.KeyValue-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#matchesFamily-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchesFamily</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#matchesFamilyQualifier-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.h
 adoop.hbase.security.access.Permission.Action-">matchesFamilyQualifier</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#setTableName-org.apache.hadoop.hbase.TableName-">setTableName</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#tableFieldsEqual-org.apache.hadoop.hbase.security.access.TablePermission-">tableFieldsEqual</a></code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getActions--">getActions</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getVersion--">getVersion</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#implies-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#setActions-org.apache.hadoop.hbase.security.access.Permission.Action:A-">setActions</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
 <!--   -->
 </a>
@@ -344,22 +279,22 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Table
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="LOG">
+<a name="user">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.37">LOG</a></pre>
+<h4>user</h4>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.33">user</a></pre>
 </li>
 </ul>
-<a name="user">
+<a name="permission">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>user</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.39">user</a></pre>
+<h4>permission</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.34">permission</a></pre>
 </li>
 </ul>
 </li>
@@ -370,171 +305,151 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Table
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="UserPermission--">
+<a name="UserPermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>UserPermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.42">UserPermission</a>()</pre>
-<div class="block">Nullary constructor for Writable, do not use</div>
-</li>
-</ul>
-<a name="UserPermission-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>UserPermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.51">UserPermission</a>(byte[]&nbsp;user,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.41">UserPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                       <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
-<div class="block">Creates a new instance for the given user.</div>
+<div class="block">Construct a global user permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>user</code> - the user</dd>
-<dd><code>assigned</code> - the list of allowed actions</dd>
+<dd><code>user</code> - user name</dd>
+<dd><code>assigned</code> - assigned actions</dd>
 </dl>
 </li>
 </ul>
-<a name="UserPermission-byte:A-byte:A-">
+<a name="UserPermission-java.lang.String-byte:A-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>UserPermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.62">UserPermission</a>(byte[]&nbsp;user,
-                      byte[]&nbsp;actionCodes)</pre>
-<div class="block">Creates a new instance for the given user,
- matching the actions with the given codes.</div>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.51">UserPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+                      byte[]&nbsp;actionCode)</pre>
+<div class="block">Construct a global user permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>user</code> - the user</dd>
-<dd><code>actionCodes</code> - the list of allowed action codes</dd>
+<dd><code>user</code> - user name</dd>
+<dd><code>actionCode</code> - action codes</dd>
 </dl>
 </li>
 </ul>
-<a name="UserPermission-byte:A-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">
+<a name="UserPermission-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>UserPermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.73">UserPermission</a>(byte[]&nbsp;user,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.62">UserPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
                       <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
-<div class="block">Creates a new instance for the given user.</div>
+<div class="block">Construct a namespace user permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>user</code> - the user</dd>
-<dd><code>namespace</code> - </dd>
-<dd><code>assigned</code> - the list of allowed actions</dd>
+<dd><code>user</code> - user name</dd>
+<dd><code>namespace</code> - namespace</dd>
+<dd><code>assigned</code> - assigned actions</dd>
 </dl>
 </li>
 </ul>
-<a name="UserPermission-byte:A-java.lang.String-byte:A-">
+<a name="UserPermission-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action...-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>UserPermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.85">UserPermission</a>(byte[]&nbsp;user,
-                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                      byte[]&nbsp;actionCodes)</pre>
-<div class="block">Creates a new instance for the given user,
- matching the actions with the given codes.</div>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.73">UserPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+                      <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                      <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
+<div class="block">Construct a table user permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>user</code> - the user</dd>
-<dd><code>namespace</code> - </dd>
-<dd><code>actionCodes</code> - the list of allowed action codes</dd>
+<dd><code>user</code> - user name</dd>
+<dd><code>tableName</code> - table name</dd>
+<dd><code>assigned</code> - assigned actions</dd>
 </dl>
 </li>
 </ul>
-<a name="UserPermission-byte:A-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">
+<a name="UserPermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>UserPermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.98">UserPermission</a>(byte[]&nbsp;user,
-                      <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.85">UserPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+                      <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                       byte[]&nbsp;family,
                       <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
-<div class="block">Creates a new instance for the given user, table and column family.</div>
+<div class="block">Construct a table:family user permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>user</code> - the user</dd>
-<dd><code>table</code> - the table</dd>
-<dd><code>family</code> - the family, can be null if action is allowed over the entire
-   table</dd>
-<dd><code>assigned</code> - the list of allowed actions</dd>
+<dd><code>user</code> - user name</dd>
+<dd><code>tableName</code> - table name</dd>
+<dd><code>family</code> - family name of table</dd>
+<dd><code>assigned</code> - assigned actions</dd>
 </dl>
 </li>
 </ul>
-<a name="UserPermission-byte:A-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">
+<a name="UserPermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>UserPermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.115">UserPermission</a>(byte[]&nbsp;user,
-                      <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.98">UserPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+                      <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                       byte[]&nbsp;family,
                       byte[]&nbsp;qualifier,
                       <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
-<div class="block">Creates a new permission for the given user, table, column family and
- column qualifier.</div>
+<div class="block">Construct a table:family:qualifier user permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>user</code> - the user</dd>
-<dd><code>table</code> - the table</dd>
-<dd><code>family</code> - the family, can be null if action is allowed over the entire
-   table</dd>
-<dd><code>qualifier</code> - the column qualifier, can be null if action is allowed
-   over the entire column family</dd>
-<dd><code>assigned</code> - the list of allowed actions</dd>
+<dd><code>user</code> - user name</dd>
+<dd><code>tableName</code> - table name</dd>
+<dd><code>family</code> - family name of table</dd>
+<dd><code>qualifier</code> - qualifier name of table</dd>
+<dd><code>assigned</code> - assigned actions</dd>
 </dl>
 </li>
 </ul>
-<a name="UserPermission-byte:A-org.apache.hadoop.hbase.TableName-byte:A-byte:A-byte:A-">
+<a name="UserPermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-byte:A-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>UserPermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.132">UserPermission</a>(byte[]&nbsp;user,
-                      <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.112">UserPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+                      <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                       byte[]&nbsp;family,
                       byte[]&nbsp;qualifier,
                       byte[]&nbsp;actionCodes)</pre>
-<div class="block">Creates a new instance for the given user, table, column family and
- qualifier, matching the actions with the given codes.</div>
+<div class="block">Construct a table:family:qualifier user permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>user</code> - the user</dd>
-<dd><code>table</code> - the table</dd>
-<dd><code>family</code> - the family, can be null if action is allowed over the entire
-   table</dd>
-<dd><code>qualifier</code> - the column qualifier, can be null if action is allowed
-   over the entire column family</dd>
-<dd><code>actionCodes</code> - the list of allowed action codes</dd>
+<dd><code>user</code> - user name</dd>
+<dd><code>tableName</code> - table name</dd>
+<dd><code>family</code> - family name of table</dd>
+<dd><code>qualifier</code> - qualifier name of table</dd>
+<dd><code>actionCodes</code> - assigned actions</dd>
 </dl>
 </li>
 </ul>
-<a name="UserPermission-byte:A-org.apache.hadoop.hbase.security.access.TablePermission-">
+<a name="UserPermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>UserPermission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.144">UserPermission</a>(byte[]&nbsp;user,
-                      <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;perm)</pre>
-<div class="block">Creates a new instance for the given user, table, column family and
- qualifier, matching the actions with the given codes.</div>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.123">UserPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+                      <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;permission)</pre>
+<div class="block">Construct a user permission given permission.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>user</code> - the user</dd>
-<dd><code>perm</code> - a TablePermission</dd>
+<dd><code>user</code> - user name</dd>
+<dd><code>permission</code> - one of [Global, Namespace, Table] permission</dd>
 </dl>
 </li>
 </ul>
@@ -546,97 +461,83 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Table
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="getUser--">
+<a name="getAccessScope--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getUser</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.150">getUser</a>()</pre>
+<h4>getAccessScope</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.132">getAccessScope</a>()</pre>
+<div class="block">Get this permission access scope.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>access scope</dd>
+</dl>
 </li>
 </ul>
-<a name="isGlobal--">
+<a name="getUser--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>isGlobal</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.157">isGlobal</a>()</pre>
-<div class="block">Returns true if this permission describes a global user permission.</div>
+<h4>getUser</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.136">getUser</a>()</pre>
 </li>
 </ul>
-<a name="equals-java.lang.Object-">
+<a name="getPermission--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.162">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#equals-java.lang.Object-">equals</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></code></dd>
-</dl>
+<h4>getPermission</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.140">getPermission</a>()</pre>
 </li>
 </ul>
-<a name="hashCode--">
+<a name="equalsExceptActions-java.lang.Object-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.177">hashCode</a>()</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#hashCode--">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></code></dd>
-</dl>
+<h4>equalsExceptActions</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.144">equalsExceptActions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
 </li>
 </ul>
-<a name="toString--">
+<a name="equals-java.lang.Object-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.187">toString</a>()</pre>
+<h4>equals</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.153">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#toString--">toString</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
 </dl>
 </li>
 </ul>
-<a name="readFields-java.io.DataInput-">
+<a name="hashCode--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>readFields</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.195">readFields</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in)
-                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<h4>hashCode</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.162">hashCode</a>()</pre>
 <dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>readFields</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.io.Writable</code></dd>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#readFields-java.io.DataInput-">readFields</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
 </dl>
 </li>
 </ul>
-<a name="write-java.io.DataOutput-">
+<a name="toString--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>write</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.201">write</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)
-           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<h4>toString</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/UserPermission.html#line.172">toString</a>()</pre>
 <dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>write</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.io.Writable</code></dd>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#write-java.io.DataOutput-">write</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
 </dl>
 </li>
 </ul>
@@ -693,7 +594,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Table
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.security.access.Permission">Nested</a>&nbsp;|&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html b/devapidocs/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
index 86ecf8e..a5d2d0f 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
@@ -128,7 +128,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
  <code>/hbase/acl/tablename</code>, with the znode data containing a serialized
  list of the permissions granted for the table.  The <code>AccessController</code>
  instances on all other cluster hosts watch the znodes for updates, which
- trigger updates in the <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><code>TableAuthManager</code></a> permission cache.</div>
+ trigger updates in the <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><code>AuthManager</code></a> permission cache.</div>
 </li>
 </ul>
 </div>
@@ -156,7 +156,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#aclZNode">aclZNode</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#authManager">authManager</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -197,8 +197,8 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#ZKPermissionWatcher-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.hbase.security.access.TableAuthManager-org.apache.hadoop.conf.Configuration-">ZKPermissionWatcher</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
-                   <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;authManager,
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#ZKPermissionWatcher-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.hbase.security.access.AuthManager-org.apache.hadoop.conf.Configuration-">ZKPermissionWatcher</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
+                   <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;authManager,
                    org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
 </table>
@@ -341,7 +341,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>authManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.59">authManager</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.59">authManager</a></pre>
 </li>
 </ul>
 <a name="aclZNode">
@@ -388,14 +388,14 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="ZKPermissionWatcher-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.hbase.security.access.TableAuthManager-org.apache.hadoop.conf.Configuration-">
+<a name="ZKPermissionWatcher-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.hbase.security.access.AuthManager-org.apache.hadoop.conf.Configuration-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ZKPermissionWatcher</h4>
 <pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.65">ZKPermissionWatcher</a>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
-                           <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;authManager,
+                           <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;authManager,
                            org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AccessControlFilter.Strategy.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AccessControlFilter.Strategy.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AccessControlFilter.Strategy.html
index 9df43e6..e3609e1 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AccessControlFilter.Strategy.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AccessControlFilter.Strategy.html
@@ -137,7 +137,7 @@ the order they are declared.</div>
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#AccessControlFilter-org.apache.hadoop.hbase.security.access.TableAuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">AccessControlFilter</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;mgr,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#AccessControlFilter-org.apache.hadoop.hbase.security.access.AuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">AccessControlFilter</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;mgr,
                    <a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;ugi,
                    <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                    <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access">AccessControlFilter.Strategy</a>&nbsp;strategy,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AuthManager.PermissionCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AuthManager.PermissionCache.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AuthManager.PermissionCache.html
new file mode 100644
index 0000000..ca6c0cb
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AuthManager.PermissionCache.html
@@ -0,0 +1,208 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/AuthManager.PermissionCache.html" target="_top">Frames</a></li>
+<li><a href="AuthManager.PermissionCache.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache" class="title">Uses of Class<br>org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.security.access">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a> in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#NS_NO_PERMISSION">NS_NO_PERMISSION</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#TBL_NO_PERMISSION">TBL_NO_PERMISSION</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>&gt;&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#namespaceCache">namespaceCache</a></span></code>
+<div class="block">Cache for namespace permission.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#tableCache">tableCache</a></span></code>
+<div class="block">Cache for table permission.</div>
+</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#clearCache-org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache-">clearCache</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&nbsp;cacheToUpdate)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#updateCache-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache-">updateCache</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,? extends <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;newPermissions,
+           <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&nbsp;cacheToUpdate)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/AuthManager.PermissionCache.html" target="_top">Frames</a></li>
+<li><a href="AuthManager.PermissionCache.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[05/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html
new file mode 100644
index 0000000..8ba5775
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html
@@ -0,0 +1,252 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.assignment;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertNotNull;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertNull;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.CountDownLatch;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.conf.Configuration;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.ServerName;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.StartMiniClusterOption;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.TableName;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.zookeeper.KeeperException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.junit.AfterClass;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.junit.BeforeClass;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.junit.ClassRule;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.Test;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.experimental.categories.Category;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.55"></a>
+<span class="sourceLineNo">056</span>public class TestRegionAssignedToMultipleRegionServers {<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  @ClassRule<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    HBaseClassTestRule.forClass(TestRegionAssignedToMultipleRegionServers.class);<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private static final List&lt;ServerName&gt; EXCLUDE_SERVERS = new ArrayList&lt;&gt;();<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static boolean HALT = false;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static boolean KILL = false;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private static CountDownLatch ARRIVE;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private static final class ServerManagerForTest extends ServerManager {<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>    public ServerManagerForTest(MasterServices master) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      super(master);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>    @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    public List&lt;ServerName&gt; createDestinationServersList() {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      return super.createDestinationServersList(EXCLUDE_SERVERS);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  }<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private static final class AssignmentManagerForTest extends AssignmentManager {<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public AssignmentManagerForTest(MasterServices master) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      super(master);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>    @Override<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    public ReportRegionStateTransitionResponse reportRegionStateTransition(<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        ReportRegionStateTransitionRequest req) throws PleaseHoldException {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      if (req.getTransition(0).getTransitionCode() == TransitionCode.OPENED) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        if (ARRIVE != null) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          ARRIVE.countDown();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>          ARRIVE = null;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        while (HALT) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>          try {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>            Thread.sleep(100);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>          } catch (InterruptedException e) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>            throw new RuntimeException(e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>          }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          if (KILL) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>            throw new PleaseHoldException("Inject error!");<a name="line.103"></a>
+<span class="sourceLineNo">104</span>          }<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      return super.reportRegionStateTransition(req);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    }<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public static final class HMasterForTest extends HMaster {<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public HMasterForTest(Configuration conf) throws IOException, KeeperException {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      super(conf);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>    @Override<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      return new AssignmentManagerForTest(master);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    @Override<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    protected ServerManager createServerManager(MasterServices master) throws IOException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      setupClusterConnection();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      return new ServerManagerForTest(master);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  private static TableName NAME = TableName.valueOf("Assign");<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private static byte[] CF = Bytes.toBytes("cf");<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  @BeforeClass<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public static void setUp() throws Exception {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    UTIL.getConfiguration().setClass(HConstants.MASTER_IMPL, HMasterForTest.class, HMaster.class);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    UTIL<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      .startMiniCluster(StartMiniClusterOption.builder().numMasters(2).numRegionServers(2).build());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    UTIL.createTable(NAME, CF);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    UTIL.waitTableAvailable(NAME);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    UTIL.getAdmin().balancerSwitch(false, true);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @AfterClass<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public static void tearDown() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    UTIL.shutdownMiniCluster();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  @Test<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void test() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    RegionInfo region = UTIL.getMiniHBaseCluster().getRegions(NAME).get(0).getRegionInfo();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    AssignmentManager am = UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    RegionStateNode rsn = am.getRegionStates().getRegionStateNode(region);<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>    ServerName sn = rsn.getRegionLocation();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    ARRIVE = new CountDownLatch(1);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    HALT = true;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    am.moveAsync(new RegionPlan(region, sn, sn));<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    ARRIVE.await();<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // let's restart the master<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    EXCLUDE_SERVERS.add(rsn.getRegionLocation());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    KILL = true;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    HMaster activeMaster = UTIL.getMiniHBaseCluster().getMaster();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    activeMaster.abort("For testing");<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    activeMaster.getThread().join();<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    KILL = false;<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // sleep a while to reproduce the problem, as after the fix in HBASE-21472 the execution logic<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // is changed so the old code to reproduce the problem can not compile...<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    Thread.sleep(10000);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    HALT = false;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Thread.sleep(5000);<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>    HRegionServer rs = UTIL.getMiniHBaseCluster().getRegionServer(sn);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    assertNotNull(rs.getRegion(region.getEncodedName()));<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    assertNull(UTIL.getOtherRegionServer(rs).getRegion(region.getEncodedName()));<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>}<a name="line.180"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html
new file mode 100644
index 0000000..8ba5775
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html
@@ -0,0 +1,252 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.assignment;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertNotNull;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertNull;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.CountDownLatch;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.conf.Configuration;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.ServerName;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.StartMiniClusterOption;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.TableName;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.zookeeper.KeeperException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.junit.AfterClass;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.junit.BeforeClass;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.junit.ClassRule;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.Test;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.experimental.categories.Category;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.55"></a>
+<span class="sourceLineNo">056</span>public class TestRegionAssignedToMultipleRegionServers {<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  @ClassRule<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    HBaseClassTestRule.forClass(TestRegionAssignedToMultipleRegionServers.class);<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private static final List&lt;ServerName&gt; EXCLUDE_SERVERS = new ArrayList&lt;&gt;();<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static boolean HALT = false;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static boolean KILL = false;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private static CountDownLatch ARRIVE;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private static final class ServerManagerForTest extends ServerManager {<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>    public ServerManagerForTest(MasterServices master) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      super(master);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>    @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    public List&lt;ServerName&gt; createDestinationServersList() {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      return super.createDestinationServersList(EXCLUDE_SERVERS);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  }<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private static final class AssignmentManagerForTest extends AssignmentManager {<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public AssignmentManagerForTest(MasterServices master) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      super(master);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>    @Override<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    public ReportRegionStateTransitionResponse reportRegionStateTransition(<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        ReportRegionStateTransitionRequest req) throws PleaseHoldException {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      if (req.getTransition(0).getTransitionCode() == TransitionCode.OPENED) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        if (ARRIVE != null) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          ARRIVE.countDown();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>          ARRIVE = null;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        while (HALT) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>          try {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>            Thread.sleep(100);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>          } catch (InterruptedException e) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>            throw new RuntimeException(e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>          }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          if (KILL) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>            throw new PleaseHoldException("Inject error!");<a name="line.103"></a>
+<span class="sourceLineNo">104</span>          }<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      return super.reportRegionStateTransition(req);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    }<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public static final class HMasterForTest extends HMaster {<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public HMasterForTest(Configuration conf) throws IOException, KeeperException {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      super(conf);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>    @Override<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      return new AssignmentManagerForTest(master);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    @Override<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    protected ServerManager createServerManager(MasterServices master) throws IOException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      setupClusterConnection();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      return new ServerManagerForTest(master);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  private static TableName NAME = TableName.valueOf("Assign");<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private static byte[] CF = Bytes.toBytes("cf");<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  @BeforeClass<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public static void setUp() throws Exception {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    UTIL.getConfiguration().setClass(HConstants.MASTER_IMPL, HMasterForTest.class, HMaster.class);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    UTIL<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      .startMiniCluster(StartMiniClusterOption.builder().numMasters(2).numRegionServers(2).build());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    UTIL.createTable(NAME, CF);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    UTIL.waitTableAvailable(NAME);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    UTIL.getAdmin().balancerSwitch(false, true);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @AfterClass<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public static void tearDown() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    UTIL.shutdownMiniCluster();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  @Test<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void test() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    RegionInfo region = UTIL.getMiniHBaseCluster().getRegions(NAME).get(0).getRegionInfo();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    AssignmentManager am = UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    RegionStateNode rsn = am.getRegionStates().getRegionStateNode(region);<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>    ServerName sn = rsn.getRegionLocation();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    ARRIVE = new CountDownLatch(1);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    HALT = true;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    am.moveAsync(new RegionPlan(region, sn, sn));<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    ARRIVE.await();<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // let's restart the master<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    EXCLUDE_SERVERS.add(rsn.getRegionLocation());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    KILL = true;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    HMaster activeMaster = UTIL.getMiniHBaseCluster().getMaster();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    activeMaster.abort("For testing");<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    activeMaster.getThread().join();<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    KILL = false;<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // sleep a while to reproduce the problem, as after the fix in HBASE-21472 the execution logic<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // is changed so the old code to reproduce the problem can not compile...<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    Thread.sleep(10000);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    HALT = false;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Thread.sleep(5000);<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>    HRegionServer rs = UTIL.getMiniHBaseCluster().getRegionServer(sn);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    assertNotNull(rs.getRegion(region.getEncodedName()));<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    assertNull(UTIL.getOtherRegionServer(rs).getRegion(region.getEncodedName()));<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>}<a name="line.180"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html
new file mode 100644
index 0000000..8ba5775
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html
@@ -0,0 +1,252 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.assignment;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertNotNull;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertNull;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.CountDownLatch;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.conf.Configuration;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.ServerName;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.StartMiniClusterOption;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.TableName;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.zookeeper.KeeperException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.junit.AfterClass;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.junit.BeforeClass;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.junit.ClassRule;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.Test;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.experimental.categories.Category;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.55"></a>
+<span class="sourceLineNo">056</span>public class TestRegionAssignedToMultipleRegionServers {<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  @ClassRule<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    HBaseClassTestRule.forClass(TestRegionAssignedToMultipleRegionServers.class);<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private static final List&lt;ServerName&gt; EXCLUDE_SERVERS = new ArrayList&lt;&gt;();<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static boolean HALT = false;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static boolean KILL = false;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private static CountDownLatch ARRIVE;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private static final class ServerManagerForTest extends ServerManager {<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>    public ServerManagerForTest(MasterServices master) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      super(master);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>    @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    public List&lt;ServerName&gt; createDestinationServersList() {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      return super.createDestinationServersList(EXCLUDE_SERVERS);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  }<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private static final class AssignmentManagerForTest extends AssignmentManager {<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public AssignmentManagerForTest(MasterServices master) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      super(master);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>    @Override<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    public ReportRegionStateTransitionResponse reportRegionStateTransition(<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        ReportRegionStateTransitionRequest req) throws PleaseHoldException {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      if (req.getTransition(0).getTransitionCode() == TransitionCode.OPENED) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        if (ARRIVE != null) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          ARRIVE.countDown();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>          ARRIVE = null;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        while (HALT) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>          try {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>            Thread.sleep(100);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>          } catch (InterruptedException e) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>            throw new RuntimeException(e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>          }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          if (KILL) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>            throw new PleaseHoldException("Inject error!");<a name="line.103"></a>
+<span class="sourceLineNo">104</span>          }<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      return super.reportRegionStateTransition(req);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    }<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public static final class HMasterForTest extends HMaster {<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public HMasterForTest(Configuration conf) throws IOException, KeeperException {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      super(conf);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>    @Override<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      return new AssignmentManagerForTest(master);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    @Override<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    protected ServerManager createServerManager(MasterServices master) throws IOException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      setupClusterConnection();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      return new ServerManagerForTest(master);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  private static TableName NAME = TableName.valueOf("Assign");<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private static byte[] CF = Bytes.toBytes("cf");<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  @BeforeClass<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public static void setUp() throws Exception {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    UTIL.getConfiguration().setClass(HConstants.MASTER_IMPL, HMasterForTest.class, HMaster.class);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    UTIL<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      .startMiniCluster(StartMiniClusterOption.builder().numMasters(2).numRegionServers(2).build());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    UTIL.createTable(NAME, CF);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    UTIL.waitTableAvailable(NAME);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    UTIL.getAdmin().balancerSwitch(false, true);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @AfterClass<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public static void tearDown() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    UTIL.shutdownMiniCluster();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  @Test<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void test() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    RegionInfo region = UTIL.getMiniHBaseCluster().getRegions(NAME).get(0).getRegionInfo();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    AssignmentManager am = UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    RegionStateNode rsn = am.getRegionStates().getRegionStateNode(region);<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>    ServerName sn = rsn.getRegionLocation();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    ARRIVE = new CountDownLatch(1);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    HALT = true;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    am.moveAsync(new RegionPlan(region, sn, sn));<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    ARRIVE.await();<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // let's restart the master<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    EXCLUDE_SERVERS.add(rsn.getRegionLocation());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    KILL = true;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    HMaster activeMaster = UTIL.getMiniHBaseCluster().getMaster();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    activeMaster.abort("For testing");<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    activeMaster.getThread().join();<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    KILL = false;<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // sleep a while to reproduce the problem, as after the fix in HBASE-21472 the execution logic<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // is changed so the old code to reproduce the problem can not compile...<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    Thread.sleep(10000);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    HALT = false;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Thread.sleep(5000);<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>    HRegionServer rs = UTIL.getMiniHBaseCluster().getRegionServer(sn);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    assertNotNull(rs.getRegion(region.getEncodedName()));<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    assertNull(UTIL.getOtherRegionServer(rs).getRegion(region.getEncodedName()));<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>}<a name="line.180"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html
new file mode 100644
index 0000000..8ba5775
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html
@@ -0,0 +1,252 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.assignment;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertNotNull;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertNull;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.CountDownLatch;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.conf.Configuration;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.ServerName;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.StartMiniClusterOption;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.TableName;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.zookeeper.KeeperException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.junit.AfterClass;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.junit.BeforeClass;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.junit.ClassRule;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.Test;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.experimental.categories.Category;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.55"></a>
+<span class="sourceLineNo">056</span>public class TestRegionAssignedToMultipleRegionServers {<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  @ClassRule<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    HBaseClassTestRule.forClass(TestRegionAssignedToMultipleRegionServers.class);<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private static final List&lt;ServerName&gt; EXCLUDE_SERVERS = new ArrayList&lt;&gt;();<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static boolean HALT = false;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static boolean KILL = false;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private static CountDownLatch ARRIVE;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private static final class ServerManagerForTest extends ServerManager {<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>    public ServerManagerForTest(MasterServices master) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      super(master);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>    @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    public List&lt;ServerName&gt; createDestinationServersList() {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      return super.createDestinationServersList(EXCLUDE_SERVERS);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  }<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private static final class AssignmentManagerForTest extends AssignmentManager {<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public AssignmentManagerForTest(MasterServices master) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      super(master);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>    @Override<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    public ReportRegionStateTransitionResponse reportRegionStateTransition(<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        ReportRegionStateTransitionRequest req) throws PleaseHoldException {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      if (req.getTransition(0).getTransitionCode() == TransitionCode.OPENED) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        if (ARRIVE != null) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          ARRIVE.countDown();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>          ARRIVE = null;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        while (HALT) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>          try {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>            Thread.sleep(100);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>          } catch (InterruptedException e) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>            throw new RuntimeException(e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>          }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          if (KILL) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>            throw new PleaseHoldException("Inject error!");<a name="line.103"></a>
+<span class="sourceLineNo">104</span>          }<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      return super.reportRegionStateTransition(req);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    }<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public static final class HMasterForTest extends HMaster {<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public HMasterForTest(Configuration conf) throws IOException, KeeperException {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      super(conf);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>    @Override<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      return new AssignmentManagerForTest(master);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    @Override<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    protected ServerManager createServerManager(MasterServices master) throws IOException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      setupClusterConnection();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      return new ServerManagerForTest(master);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  private static TableName NAME = TableName.valueOf("Assign");<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private static byte[] CF = Bytes.toBytes("cf");<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  @BeforeClass<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public static void setUp() throws Exception {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    UTIL.getConfiguration().setClass(HConstants.MASTER_IMPL, HMasterForTest.class, HMaster.class);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    UTIL<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      .startMiniCluster(StartMiniClusterOption.builder().numMasters(2).numRegionServers(2).build());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    UTIL.createTable(NAME, CF);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    UTIL.waitTableAvailable(NAME);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    UTIL.getAdmin().balancerSwitch(false, true);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @AfterClass<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public static void tearDown() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    UTIL.shutdownMiniCluster();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  @Test<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void test() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    RegionInfo region = UTIL.getMiniHBaseCluster().getRegions(NAME).get(0).getRegionInfo();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    AssignmentManager am = UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    RegionStateNode rsn = am.getRegionStates().getRegionStateNode(region);<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>    ServerName sn = rsn.getRegionLocation();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    ARRIVE = new CountDownLatch(1);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    HALT = true;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    am.moveAsync(new RegionPlan(region, sn, sn));<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    ARRIVE.await();<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // let's restart the master<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    EXCLUDE_SERVERS.add(rsn.getRegionLocation());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    KILL = true;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    HMaster activeMaster = UTIL.getMiniHBaseCluster().getMaster();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    activeMaster.abort("For testing");<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    activeMaster.getThread().join();<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    KILL = false;<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // sleep a while to reproduce the problem, as after the fix in HBASE-21472 the execution logic<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // is changed so the old code to reproduce the problem can not compile...<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    Thread.sleep(10000);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    HALT = false;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    Thread.sleep(5000);<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>    HRegionServer rs = UTIL.getMiniHBaseCluster().getRegionServer(sn);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    assertNotNull(rs.getRegion(region.getEncodedName()));<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    assertNull(UTIL.getOtherRegionServer(rs).getRegion(region.getEncodedName()));<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>}<a name="line.180"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.html
index c4712ff..e9ae8b7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.html
@@ -43,9 +43,9 @@
 <span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.security.User;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.security.access.AccessControlClient;<a name="line.36"></a>
 <span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.security.access.AccessControlLists;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.security.access.Permission;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.security.access.SecureTestUtil;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.security.access.TableAuthManager;<a name="line.40"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.security.access.AuthManager;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.security.access.Permission;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.security.access.SecureTestUtil;<a name="line.40"></a>
 <span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.41"></a>
 <span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.SecurityTests;<a name="line.42"></a>
 <span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
@@ -211,7 +211,7 @@
 <span class="sourceLineNo">203</span>  public static void tearDownAfterClass() throws Exception {<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    cleanUp();<a name="line.204"></a>
 <span class="sourceLineNo">205</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    int total = TableAuthManager.getTotalRefCount();<a name="line.206"></a>
+<span class="sourceLineNo">206</span>    int total = AuthManager.getTotalRefCount();<a name="line.206"></a>
 <span class="sourceLineNo">207</span>    assertTrue("Unexpected reference count: " + total, total == 0);<a name="line.207"></a>
 <span class="sourceLineNo">208</span>  }<a name="line.208"></a>
 <span class="sourceLineNo">209</span><a name="line.209"></a>


[03/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.BulkLoadHelper.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.BulkLoadHelper.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.BulkLoadHelper.html
index 5062e9b..23b4be7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.BulkLoadHelper.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.BulkLoadHelper.html
@@ -282,7 +282,7 @@
 <span class="sourceLineNo">274</span>  public static void tearDownAfterClass() throws Exception {<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    cleanUp();<a name="line.275"></a>
 <span class="sourceLineNo">276</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int total = TableAuthManager.getTotalRefCount();<a name="line.277"></a>
+<span class="sourceLineNo">277</span>    int total = AuthManager.getTotalRefCount();<a name="line.277"></a>
 <span class="sourceLineNo">278</span>    assertTrue("Unexpected reference count: " + total, total == 0);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>  }<a name="line.279"></a>
 <span class="sourceLineNo">280</span><a name="line.280"></a>
@@ -1642,12 +1642,12 @@
 <span class="sourceLineNo">1634</span>      }<a name="line.1634"></a>
 <span class="sourceLineNo">1635</span><a name="line.1635"></a>
 <span class="sourceLineNo">1636</span>      UserPermission ownerperm =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>          new UserPermission(Bytes.toBytes(USER_OWNER.getName()), tableName, null, Action.values());<a name="line.1637"></a>
+<span class="sourceLineNo">1637</span>          new UserPermission(USER_OWNER.getName(), tableName, Action.values());<a name="line.1637"></a>
 <span class="sourceLineNo">1638</span>      assertTrue("Owner should have all permissions on table",<a name="line.1638"></a>
 <span class="sourceLineNo">1639</span>        hasFoundUserPermission(ownerperm, perms));<a name="line.1639"></a>
 <span class="sourceLineNo">1640</span><a name="line.1640"></a>
 <span class="sourceLineNo">1641</span>      User user = User.createUserForTesting(TEST_UTIL.getConfiguration(), "user", new String[0]);<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      byte[] userName = Bytes.toBytes(user.getShortName());<a name="line.1642"></a>
+<span class="sourceLineNo">1642</span>      String userName = user.getShortName();<a name="line.1642"></a>
 <span class="sourceLineNo">1643</span><a name="line.1643"></a>
 <span class="sourceLineNo">1644</span>      UserPermission up =<a name="line.1644"></a>
 <span class="sourceLineNo">1645</span>          new UserPermission(userName, tableName, family1, qualifier, Permission.Action.READ);<a name="line.1645"></a>
@@ -1733,7 +1733,7 @@
 <span class="sourceLineNo">1725</span>      }<a name="line.1725"></a>
 <span class="sourceLineNo">1726</span><a name="line.1726"></a>
 <span class="sourceLineNo">1727</span>      UserPermission newOwnerperm =<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          new UserPermission(Bytes.toBytes(newOwner.getName()), tableName, null, Action.values());<a name="line.1728"></a>
+<span class="sourceLineNo">1728</span>          new UserPermission(newOwner.getName(), tableName, Action.values());<a name="line.1728"></a>
 <span class="sourceLineNo">1729</span>      assertTrue("New owner should have all permissions on table",<a name="line.1729"></a>
 <span class="sourceLineNo">1730</span>        hasFoundUserPermission(newOwnerperm, perms));<a name="line.1730"></a>
 <span class="sourceLineNo">1731</span>    } finally {<a name="line.1731"></a>
@@ -1757,1888 +1757,1898 @@
 <span class="sourceLineNo">1749</span><a name="line.1749"></a>
 <span class="sourceLineNo">1750</span>    Collection&lt;String&gt; superUsers = Superusers.getSuperUsers();<a name="line.1750"></a>
 <span class="sourceLineNo">1751</span>    List&lt;UserPermission&gt; adminPerms = new ArrayList&lt;&gt;(superUsers.size() + 1);<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    adminPerms.add(new UserPermission(Bytes.toBytes(USER_ADMIN.getShortName()),<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      AccessControlLists.ACL_TABLE_NAME, null, null, Bytes.toBytes("ACRW")));<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span><a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    for(String user: superUsers) {<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      adminPerms.add(new UserPermission(Bytes.toBytes(user), AccessControlLists.ACL_TABLE_NAME,<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>          null, null, Action.values()));<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    }<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    assertTrue("Only super users, global users and user admin has permission on table hbase:acl " +<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        "per setup", perms.size() == 5 + superUsers.size() &amp;&amp;<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>        hasFoundUserPermission(adminPerms, perms));<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  }<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span><a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  /** global operations */<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private void verifyGlobal(AccessTestAction action) throws Exception {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    verifyAllowed(action, SUPERUSER);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span><a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_NONE, USER_RO);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span><a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>  @Test<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>  public void testCheckPermissions() throws Exception {<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    // --------------------------------------<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    // test global permissions<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>    AccessTestAction globalAdmin = new AccessTestAction() {<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      @Override<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>      public Void run() throws Exception {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.ADMIN);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        return null;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      }<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    };<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    // verify that only superuser can admin<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    verifyGlobal(globalAdmin);<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span><a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>    // --------------------------------------<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    // test multiple permissions<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    AccessTestAction globalReadWrite = new AccessTestAction() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      public Void run() throws Exception {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.READ, Permission.Action.WRITE);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>        return null;<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      }<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    };<a name="line.1793"></a>
+<span class="sourceLineNo">1752</span>    adminPerms.add(new UserPermission(USER_ADMIN.getShortName(), Bytes.toBytes("ACRW")));<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>    for(String user: superUsers) {<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      // Global permission<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      adminPerms.add(new UserPermission(user, Action.values()));<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    }<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    assertTrue("Only super users, global users and user admin has permission on table hbase:acl " +<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        "per setup", perms.size() == 5 + superUsers.size() &amp;&amp;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>        hasFoundUserPermission(adminPerms, perms));<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  /** global operations */<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  private void verifyGlobal(AccessTestAction action) throws Exception {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    verifyAllowed(action, SUPERUSER);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span><a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_NONE, USER_RO);<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span><a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>  @Test<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>  public void testCheckPermissions() throws Exception {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    // --------------------------------------<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    // test global permissions<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    AccessTestAction globalAdmin = new AccessTestAction() {<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      @Override<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>      public Void run() throws Exception {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.ADMIN);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>        return null;<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    };<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    // verify that only superuser can admin<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    verifyGlobal(globalAdmin);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    // --------------------------------------<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    // test multiple permissions<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    AccessTestAction globalReadWrite = new AccessTestAction() {<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      @Override<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>      public Void run() throws Exception {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.READ, Permission.Action.WRITE);<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>        return null;<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    };<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span><a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    verifyGlobal(globalReadWrite);<a name="line.1793"></a>
 <span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    verifyGlobal(globalReadWrite);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span><a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    // --------------------------------------<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    // table/column/qualifier level permissions<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    final byte[] TEST_Q1 = Bytes.toBytes("q1");<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    final byte[] TEST_Q2 = Bytes.toBytes("q2");<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span><a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    User userTable = User.createUserForTesting(conf, "user_check_perms_table", new String[0]);<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    User userColumn = User.createUserForTesting(conf, "user_check_perms_family", new String[0]);<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    User userQualifier = User.createUserForTesting(conf, "user_check_perms_q", new String[0]);<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span><a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    grantOnTable(TEST_UTIL, userTable.getShortName(),<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      TEST_TABLE, null, null,<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      Permission.Action.READ);<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    grantOnTable(TEST_UTIL, userColumn.getShortName(),<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>      TEST_TABLE, TEST_FAMILY, null,<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>      Permission.Action.READ);<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>    grantOnTable(TEST_UTIL, userQualifier.getShortName(),<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>      Permission.Action.READ);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span><a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>    try {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      AccessTestAction tableRead = new AccessTestAction() {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>        @Override<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        public Void run() throws Exception {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, null, null, Permission.Action.READ);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>          return null;<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      };<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      AccessTestAction columnRead = new AccessTestAction() {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        @Override<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>        public Void run() throws Exception {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ);<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          return null;<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      };<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>      AccessTestAction qualifierRead = new AccessTestAction() {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>        @Override<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        public Void run() throws Exception {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ);<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>          return null;<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>        }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>      };<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>      AccessTestAction multiQualifierRead = new AccessTestAction() {<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        @Override<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        public Void run() throws Exception {<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ),<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q2, Permission.Action.READ), });<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>          return null;<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        }<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      };<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>      AccessTestAction globalAndTableRead = new AccessTestAction() {<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>        @Override<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        public Void run() throws Exception {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>              new Permission(Permission.Action.READ),<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>              new TablePermission(TEST_TABLE, null, (byte[]) null, Permission.Action.READ), });<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>          return null;<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>        }<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      };<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span><a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      AccessTestAction noCheck = new AccessTestAction() {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>        @Override<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        public Void run() throws Exception {<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[0]);<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>          return null;<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        }<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      };<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span><a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      verifyAllowed(tableRead, SUPERUSER, userTable);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>      verifyDenied(tableRead, userColumn, userQualifier);<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span><a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      verifyAllowed(columnRead, SUPERUSER, userTable, userColumn);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      verifyDenied(columnRead, userQualifier);<a name="line.1873"></a>
+<span class="sourceLineNo">1795</span>    // --------------------------------------<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    // table/column/qualifier level permissions<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>    final byte[] TEST_Q1 = Bytes.toBytes("q1");<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    final byte[] TEST_Q2 = Bytes.toBytes("q2");<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    User userTable = User.createUserForTesting(conf, "user_check_perms_table", new String[0]);<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    User userColumn = User.createUserForTesting(conf, "user_check_perms_family", new String[0]);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    User userQualifier = User.createUserForTesting(conf, "user_check_perms_q", new String[0]);<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span><a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>    grantOnTable(TEST_UTIL, userTable.getShortName(),<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>      TEST_TABLE, null, null,<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      Permission.Action.READ);<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    grantOnTable(TEST_UTIL, userColumn.getShortName(),<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      TEST_TABLE, TEST_FAMILY, null,<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>      Permission.Action.READ);<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    grantOnTable(TEST_UTIL, userQualifier.getShortName(),<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      Permission.Action.READ);<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span><a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    try {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>      AccessTestAction tableRead = new AccessTestAction() {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>        @Override<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        public Void run() throws Exception {<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, null, null, Permission.Action.READ);<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>          return null;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>        }<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>      };<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span><a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>      AccessTestAction columnRead = new AccessTestAction() {<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>        @Override<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        public Void run() throws Exception {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ);<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>          return null;<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>        }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      };<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      AccessTestAction qualifierRead = new AccessTestAction() {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        @Override<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        public Void run() throws Exception {<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ);<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          return null;<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>      };<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span><a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>      AccessTestAction multiQualifierRead = new AccessTestAction() {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>        @Override<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>        public Void run() throws Exception {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ),<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q2, Permission.Action.READ), });<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          return null;<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>        }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      };<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span><a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>      AccessTestAction globalAndTableRead = new AccessTestAction() {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>        @Override<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>        public Void run() throws Exception {<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>              new Permission(Permission.Action.READ),<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>              new TablePermission(TEST_TABLE, null, (byte[]) null, Permission.Action.READ), });<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>          return null;<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      };<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span><a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      AccessTestAction noCheck = new AccessTestAction() {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>        @Override<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>        public Void run() throws Exception {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[0]);<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>          return null;<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>        }<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      };<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>      verifyAllowed(tableRead, SUPERUSER, userTable);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      verifyDenied(tableRead, userColumn, userQualifier);<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span><a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      verifyAllowed(columnRead, SUPERUSER, userTable, userColumn);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>      verifyDenied(columnRead, userQualifier);<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span><a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      verifyAllowed(qualifierRead, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1873"></a>
 <span class="sourceLineNo">1874</span><a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      verifyAllowed(qualifierRead, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span><a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>      verifyAllowed(multiQualifierRead, SUPERUSER, userTable, userColumn);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      verifyDenied(multiQualifierRead, userQualifier);<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span><a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      verifyAllowed(globalAndTableRead, SUPERUSER);<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>      verifyDenied(globalAndTableRead, userTable, userColumn, userQualifier);<a name="line.1881"></a>
+<span class="sourceLineNo">1875</span>      verifyAllowed(multiQualifierRead, SUPERUSER, userTable, userColumn);<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      verifyDenied(multiQualifierRead, userQualifier);<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span><a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      verifyAllowed(globalAndTableRead, SUPERUSER);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      verifyDenied(globalAndTableRead, userTable, userColumn, userQualifier);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span><a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>      verifyAllowed(noCheck, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1881"></a>
 <span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>      verifyAllowed(noCheck, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span><a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>      // --------------------------------------<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      // test family level multiple permissions<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      AccessTestAction familyReadWrite = new AccessTestAction() {<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>        @Override<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        public Void run() throws Exception {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ,<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>            Permission.Action.WRITE);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          return null;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        }<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>      };<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span><a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      verifyAllowed(familyReadWrite, SUPERUSER, USER_OWNER, USER_CREATE, USER_RW);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      verifyDenied(familyReadWrite, USER_NONE, USER_RO);<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>      // --------------------------------------<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      // check for wrong table region<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>      CheckPermissionsRequest checkRequest =<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>          CheckPermissionsRequest<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>              .newBuilder()<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>              .addPermission(<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>                AccessControlProtos.Permission<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>                    .newBuilder()<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>                    .setType(AccessControlProtos.Permission.Type.Table)<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>                    .setTablePermission(<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>                      AccessControlProtos.TablePermission.newBuilder()<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>                          .setTableName(ProtobufUtil.toProtoTableName(TEST_TABLE))<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>                          .addAction(AccessControlProtos.Permission.Action.CREATE))).build();<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      Table acl = systemUserConnection.getTable(AccessControlLists.ACL_TABLE_NAME);<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      try {<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>        BlockingRpcChannel channel = acl.coprocessorService(new byte[0]);<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        AccessControlService.BlockingInterface protocol =<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>            AccessControlService.newBlockingStub(channel);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        try {<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>          // but ask for TablePermissions for TEST_TABLE<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>          protocol.checkPermissions(null, checkRequest);<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>          fail("this should have thrown CoprocessorException");<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>        } catch (ServiceException ex) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>          // expected<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        }<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>      } finally {<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        acl.close();<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    } finally {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      revokeFromTable(TEST_UTIL, userTable.getShortName(), TEST_TABLE, null, null,<a name="line.1929"></a>
+<span class="sourceLineNo">1883</span>      // --------------------------------------<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>      // test family level multiple permissions<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>      AccessTestAction familyReadWrite = new AccessTestAction() {<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>        @Override<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        public Void run() throws Exception {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>            Permission.Action.WRITE);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>          return null;<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        }<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      };<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span><a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>      verifyAllowed(familyReadWrite, SUPERUSER, USER_OWNER, USER_CREATE, USER_RW);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      verifyDenied(familyReadWrite, USER_NONE, USER_RO);<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span><a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      // --------------------------------------<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>      // check for wrong table region<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>      CheckPermissionsRequest checkRequest =<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>          CheckPermissionsRequest<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>              .newBuilder()<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>              .addPermission(<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>                AccessControlProtos.Permission<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>                    .newBuilder()<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>                    .setType(AccessControlProtos.Permission.Type.Table)<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>                    .setTablePermission(<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>                      AccessControlProtos.TablePermission.newBuilder()<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>                          .setTableName(ProtobufUtil.toProtoTableName(TEST_TABLE))<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>                          .addAction(AccessControlProtos.Permission.Action.CREATE))).build();<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>      Table acl = systemUserConnection.getTable(AccessControlLists.ACL_TABLE_NAME);<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      try {<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>        BlockingRpcChannel channel = acl.coprocessorService(new byte[0]);<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>        AccessControlService.BlockingInterface protocol =<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>            AccessControlService.newBlockingStub(channel);<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>        try {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>          // but ask for TablePermissions for TEST_TABLE<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>          protocol.checkPermissions(null, checkRequest);<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>          fail("this should have thrown CoprocessorException");<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>        } catch (ServiceException ex) {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>          // expected<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>        }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      } finally {<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>        acl.close();<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>      }<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span><a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    } finally {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      revokeFromTable(TEST_UTIL, userTable.getShortName(), TEST_TABLE, null, null,<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        Permission.Action.READ);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      revokeFromTable(TEST_UTIL, userColumn.getShortName(), TEST_TABLE, TEST_FAMILY, null,<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>        Permission.Action.READ);<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      revokeFromTable(TEST_UTIL, userColumn.getShortName(), TEST_TABLE, TEST_FAMILY, null,<a name="line.1931"></a>
+<span class="sourceLineNo">1931</span>      revokeFromTable(TEST_UTIL, userQualifier.getShortName(), TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1931"></a>
 <span class="sourceLineNo">1932</span>        Permission.Action.READ);<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      revokeFromTable(TEST_UTIL, userQualifier.getShortName(), TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>        Permission.Action.READ);<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  }<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  @Test<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>  public void testStopRegionServer() throws Exception {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      @Override<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      public Object run() throws Exception {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        ACCESS_CONTROLLER.preStopRegionServer(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>        return null;<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      }<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    };<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>  }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span><a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>  @Test<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>  public void testRollWALWriterRequest() throws Exception {<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>      @Override<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>      public Object run() throws Exception {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>        ACCESS_CONTROLLER.preRollWALWriterRequest(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>        return null;<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      }<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>    };<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span><a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>  }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span><a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  @Test<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>  public void testOpenRegion() throws Exception {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>      @Override<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>      public Object run() throws Exception {<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>        ACCESS_CONTROLLER.preOpen(ObserverContextImpl.createAndPrepare(RCP_ENV));<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>        return null;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>      }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    };<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span><a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>  @Test<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>  public void testCloseRegion() throws Exception {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>      @Override<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>      public Object run() throws Exception {<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>        ACCESS_CONTROLLER.preClose(ObserverContextImpl.createAndPrepare(RCP_ENV), false);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>        return null;<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      }<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    };<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>  }<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span><a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>  @Test<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  public void testSnapshot() throws Exception {<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    final HTableDescriptor htd = admin.getTableDescriptor(TEST_TABLE);<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    final SnapshotDescription snapshot = new SnapshotDescription(<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>        TEST_TABLE.getNameAsString() + "-snapshot", TEST_TABLE);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    AccessTestAction snapshotAction = new AccessTestAction() {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>      @Override<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      public Object run() throws Exception {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        ACCESS_CONTROLLER.preSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>          snapshot, htd);<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>        return null;<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>      }<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>    };<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span><a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    AccessTestAction deleteAction = new AccessTestAction() {<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>      @Override<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>      public Object run() throws Exception {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        ACCESS_CONTROLLER.preDeleteSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          snapshot);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>        return null;<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>      }<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    };<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span><a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    AccessTestAction restoreAction = new AccessTestAction() {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>      @Override<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      public Object run() throws Exception {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>        ACCESS_CONTROLLER.preRestoreSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>          snapshot, htd);<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>        return null;<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      }<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    };<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span><a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    AccessTestAction cloneAction = new AccessTestAction() {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      @Override<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>      public Object run() throws Exception {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>        ACCESS_CONTROLLER.preCloneSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>          snapshot, null);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>        return null;<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      }<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>    };<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span><a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    verifyAllowed(snapshotAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    verifyDenied(snapshotAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    verifyAllowed(cloneAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    verifyDenied(deleteAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    verifyAllowed(restoreAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    verifyDenied(restoreAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span><a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    verifyAllowed(deleteAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    verifyDenied(cloneAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  }<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span><a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>  @Test<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>  public void testSnapshotWithOwner() throws Exception {<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>    final HTableDescriptor htd = admin.getTableDescriptor(TEST_TABLE);<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>    final SnapshotDescription snapshot = new SnapshotDescription(<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        TEST_TABLE.getNameAsString() + "-snapshot", TEST_TABLE, null, USER_OWNER.getName());<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span><a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    AccessTestAction snapshotAction = new AccessTestAction() {<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>      @Override<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      public Object run() throws Exception {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>        ACCESS_CONTROLLER.preSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>            snapshot, htd);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>        return null;<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    };<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    verifyAllowed(snapshotAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    verifyDenied(snapshotAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span><a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    AccessTestAction deleteAction = new AccessTestAction() {<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      @Override<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      public Object run() throws Exception {<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        ACCESS_CONTROLLER.preDeleteSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>          snapshot);<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        return null;<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    };<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>    verifyAllowed(deleteAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    verifyDenied(deleteAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span><a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    AccessTestAction restoreAction = new AccessTestAction() {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      @Override<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      public Object run() throws Exception {<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>        ACCESS_CONTROLLER.preRestoreSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          snapshot, htd);<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>        return null;<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      }<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    };<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    verifyAllowed(restoreAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    verifyDenied(restoreAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>    AccessTestAction cloneAction = new AccessTestAction() {<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>      @Override<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>      public Object run() throws Exception {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>        ACCESS_CONTROLLER.preCloneSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>          snapshot, htd);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        return null;<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    };<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    verifyAllowed(cloneAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN, USER_OWNER);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    verifyDenied(cloneAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span><a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>  @Test<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>  public void testGlobalAuthorizationForNewRegisteredRS() throws Exception {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    LOG.debug("Test for global authorization for a new registered RegionServer.");<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    MiniHBaseCluster hbaseCluster = TEST_UTIL.getHBaseCluster();<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>    final Admin admin = TEST_UTIL.getAdmin();<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    HTableDescriptor htd = new HTableDescriptor(TEST_TABLE2);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    htd.addFamily(new HColumnDescriptor(TEST_FAMILY));<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>    createTable(TEST_UTIL, htd);<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span><a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    // Starting a new RegionServer.<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    JVMClusterUtil.RegionServerThread newRsThread = hbaseCluster<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>        .startRegionServer();<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>    final HRegionServer newRs = newRsThread.getRegionServer();<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span><a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>    // Move region to the new RegionServer.<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    List&lt;HRegionLocation&gt; regions;<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>    try (RegionLocator locator = systemUserConnection.getRegionLocator(TEST_TABLE2)) {<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      regions = locator.getAllRegionLocations();<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    }<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    HRegionLocation location = regions.get(0);<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    final HRegionInfo hri = location.getRegionInfo();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    final ServerName server = location.getServerName();<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    try (Table table = systemUserConnection.getTable(TEST_TABLE2)) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      AccessTestAction moveAction = new AccessTestAction() {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        @Override<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>        public Object run() throws Exception {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>          admin.move(hri.getEncodedNameAsBytes(),<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>            Bytes.toBytes(newRs.getServerName().getServerName()));<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          return null;<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>        }<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>      };<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      SUPERUSER.runAs(moveAction);<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span><a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      final int RETRIES_LIMIT = 10;<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>      int retries = 0;<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>      while (newRs.getRegions(TEST_TABLE2).size() &lt; 1 &amp;&amp; retries &lt; RETRIES_LIMIT) {<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        LOG.debug("Waiting for region to be opened. Already retried " + retries<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>            + " times.");<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>        try {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>          Thread.sleep(1000);<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>        } catch (InterruptedException e) {<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>        }<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>        retries++;<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>        if (retries == RETRIES_LIMIT - 1) {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>          fail("Retry exhaust for waiting region to be opened.");<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>        }<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>      }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>      // Verify write permission for user "admin2" who has the global<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>      // permissions.<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>      AccessTestAction putAction = new AccessTestAction() {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>        @Override<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>        public Object run() throws Exception {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>          Put put = new Put(Bytes.toBytes("test"));<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          put.addColumn(TEST_FAMILY, Bytes.toBytes("qual"), Bytes.toBytes("value"));<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>          table.put(put);<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>          return null;<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>        }<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>      };<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>      USER_ADMIN.runAs(putAction);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    }<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span><a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>  @Test<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>  public void testTableDescriptorsEnumeration() throws Exception {<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    User TABLE_ADMIN = User.createUserForTesting(conf, "UserA", new String[0]);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span><a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    // Grant TABLE ADMIN privs<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    grantOnTable(TEST_UTIL, TABLE_ADMIN.getShortName(), TEST_TABLE, null, null,<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>      Permission.Action.ADMIN);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    try {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>      AccessTestAction listTablesAction = new AccessTestAction() {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>        @Override<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>        public Object run() throws Exception {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>          try (Connection conn = ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>              Admin admin = conn.getAdmin()) {<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>            return Arrays.asList(admin.listTables());<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>          }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>        }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>      };<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span><a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>      AccessTestAction getTableDescAction = new AccessTestAction() {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>        @Override<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>        public Object run() throws Exception {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>          try (Connection conn = ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>              Admin admin = conn.getAdmin()) {<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>            return admin.getTableDescriptor(TEST_TABLE);<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>          }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>        }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>      };<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      verifyAllowed(listTablesAction, SUPERUSER, USER_ADMIN, USER_CREATE, USER_OWNER, TABLE_ADMIN,<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>        USER_GROUP_CREATE, USER_GROUP_ADMIN);<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      verifyIfEmptyList(listTablesAction, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>        USER_GROUP_WRITE);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span><a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      verifyAllowed(getTableDescAction, SUPERUSER, USER_ADMIN, USER_CREATE, USER_OWNER,<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        TABLE_ADMIN, USER_GROUP_CREATE, USER_GROUP_ADMIN);<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      verifyDenied(getTableDescAction, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        USER_GROUP_WRITE);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    } finally {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      // Cleanup, revoke TABLE ADMIN privs<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      revokeFromTable(TEST_UTIL, TABLE_ADMIN.getShortName(), TEST_TABLE, null, null,<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        Permission.Action.ADMIN);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    }<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>  }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span><a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>  @Test<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  public void testTableNameEnumeration() throws Exception {<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>    AccessTestAction listTablesAction = new AccessTestAction() {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>      @Override<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      public Object run() throws Exception {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>        Connection unmanagedConnection =<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>            ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>        Admin admin = unmanagedConnection.getAdmin();<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        try {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          return Arrays.asList(admin.listTableNames());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>        } finally {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>          admin.close();<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>          unmanagedConnection.close();<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>        }<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    };<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span><a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>    verifyAllowed(listTablesAction, SUPERUSER, USER_ADMIN, USER_CREATE, USER_OWNER, USER_RW,<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      USER_RO, USER_GROUP_CREATE, USER_GROUP_ADMIN, USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>    verifyIfEmptyList(listTablesAction, USER_NONE);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>  }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span><a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  @Test<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  public void testTableDeletion() throws Exception {<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>    User TABLE_ADMIN = User.createUserForTesting(conf, "TestUser", new String[0]);<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>    createTestTable(tableName);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span><a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>    // Grant TABLE ADMIN privs<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>    grantOnTable(TEST_UTIL, TABLE_ADMIN.getShortName(), tableName, null, null, Permission.Action.ADMIN);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span><a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    AccessTestAction deleteTableAction = new AccessTestAction() {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      @Override<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      public Object run() throws Exception {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        Connection unmanagedConnection =<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>            ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>        Admin admin = unmanagedConnection.getAdmin();<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        try {<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>          deleteTable(TEST_UTIL, admin, tableName);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>        } finally {<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>          admin.close();<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>          unmanagedConnection.close();<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>        }<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>        return null;<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>      }<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>    };<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span><a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    verifyDenied(deleteTableAction, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      USER_GROUP_WRITE);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    verifyAllowed(deleteTableAction, TABLE_ADMIN);<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>  }<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span><a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>  private void createTestTable(TableName tname) throws Exception {<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    createTestTable(tname, TEST_FAMILY);<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>  }<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span><a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>  private void createTestTable(TableName tname, byte[] cf) throws Exception {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    HTableDescriptor htd = new HTableDescriptor(tname);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    HColumnDescriptor hcd = new HColumnDescriptor(cf);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    hcd.setMaxVersions(100);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    htd.addFamily(hcd);<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    htd.setOwner(USER_OWNER);<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    createTable(TEST_UTIL, htd, new byte[][] { Bytes.toBytes("s") });<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>  }<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span><a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>  @Test<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>  public void testNamespaceUserGrant() throws Exception {<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    AccessTestAction getAction = new AccessTestAction() {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      @Override<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      public Object run() throws Exception {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        try(Connection conn = ConnectionFactory.createConnection(conf);<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>            Table t = conn.getTable(TEST_TABLE)) {<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          return t.get(new Get(TEST_ROW));<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>        }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    };<a name="line.2295"></a>
+<span class="sourceLineNo">1933</span>    }<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>  }<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span><a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>  @Test<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  public void testStopRegionServer() throws Exception {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>      @Override<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      public Object run() throws Exception {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>        ACCESS_CONTROLLER.preStopRegionServer(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>        return null;<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>      }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    };<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span><a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>  }<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span><a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>  @Test<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>  public void testRollWALWriterRequest() throws Exception {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>      @Override<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>      public Object run() throws Exception {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        ACCESS_CONTROLLER.preRollWALWriterRequest(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        return null;<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    };<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>  }<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span><a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>  @Test<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>  public void testOpenRegion() throws Exception {<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>      @Override<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>      public Object run() throws Exception {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>        ACCESS_CONTROLLER.preOpen(ObserverContextImpl.createAndPrepare(RCP_ENV));<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>        return null;<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>      }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    };<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span><a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span><a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  @Test<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>  public void testCloseRegion() throws Exception {<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>      @Override<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      public Object run() throws Exception {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        ACCESS_CONTROLLER.preClose(ObserverContextImpl.createAndPrepare(RCP_ENV), false);<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>        return null;<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>      }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    };<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>  }<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>  @Test<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>  public void testSnapshot() throws Exception {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>    final HTableDescriptor htd = admin.getTableDescriptor(TEST_TABLE);<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    final SnapshotDescription snapshot = new SnapshotDescription(<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        TEST_TABLE.getNameAsString() + "-snapshot", TEST_TABLE);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    AccessTestAction snapshotAction = new AccessTestAction() {<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      @Override<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      public Object run() throws Exception {<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        ACCESS_CONTROLLER.preSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>          snapshot, htd);<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        return null;<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>      }<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    };<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span><a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    AccessTestAction deleteAction = new AccessTestAction() {<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>      @Override<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      public Object run() throws Exception {<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>        ACCESS_CONTROLLER.preDeleteSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          snapshot);<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>        return null;<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>      }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>    };<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>    AccessTestAction restoreAction = new AccessTestAction() {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>      @Override<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>      public Object run() throws Exception {<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>        ACCESS_CONTROLLER.preRestoreSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>          snapshot, htd);<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        return null;<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>      }<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>    };<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span><a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>    AccessTestAction cloneAction = new AccessTestAction() {<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>      @Override<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>      public Object run() throws Exception {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>        ACCESS_CONTROLLER.preCloneSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>          snapshot, null);<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>        return null;<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>      }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>    };<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    verifyAllowed(snapshotAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    verifyDenied(snapshotAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span><a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    verifyAllowed(cloneAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>    verifyDenied(deleteAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span><a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    verifyAllowed(restoreAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    verifyDenied(restoreAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span><a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    verifyAllowed(deleteAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    verifyDenied(cloneAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>  @Test<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>  public void testSnapshotWithOwner() throws Exception {<a name="line.2056"></a>
+<span class="sou

<TRUNCATED>

[39/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/AuthManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/AuthManager.html b/devapidocs/org/apache/hadoop/hbase/security/access/AuthManager.html
new file mode 100644
index 0000000..12f8242
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/AuthManager.html
@@ -0,0 +1,1134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>AuthManager (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="AuthManager (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":9,"i16":9,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":9,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/AuthManager.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/AuthManager.html" target="_top">Frames</a></li>
+<li><a href="AuthManager.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
+<h2 title="Class AuthManager" class="title">Class AuthManager</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.security.access.AuthManager</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+public final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.68">AuthManager</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></pre>
+<div class="block">Performs authorization checks for a given user's assigned permissions.
+ <p>
+   There're following scopes: <b>Global</b>, <b>Namespace</b>, <b>Table</b>, <b>Family</b>,
+   <b>Qualifier</b>, <b>Cell</b>.
+   Generally speaking, higher scopes can overrides lower scopes,
+   except for Cell permission can be granted even a user has not permission on specified table,
+   which means the user can get/scan only those granted cells parts.
+ </p>
+ e.g, if user A has global permission R(ead), he can
+ read table T without checking table scope permission, so authorization checks alway starts from
+ Global scope.
+ <p>
+   For each scope, not only user but also groups he belongs to will be checked.
+ </p></div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="type parameter in AuthManager.PermissionCache">T</a> extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</span></code>
+<div class="block">Cache of permissions, it is thread safe.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private org.apache.hadoop.conf.Configuration</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#conf">conf</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#globalCache">globalCache</a></span></code>
+<div class="block">Cache for global permission.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#LOG">LOG</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#managerMap">managerMap</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#mtime">mtime</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>&gt;&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#namespaceCache">namespaceCache</a></span></code>
+<div class="block">Cache for namespace permission.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#NS_NO_PERMISSION">NS_NO_PERMISSION</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#refCount">refCount</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#tableCache">tableCache</a></span></code>
+<div class="block">Cache for table permission.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#TBL_NO_PERMISSION">TBL_NO_PERMISSION</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#zkperms">zkperms</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier</th>
+<th class="colLast" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#AuthManager-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">AuthManager</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
+           org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#accessUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">accessUserTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Checks if the user has access to the full table or at least a family/qualifier
+ for the specified action.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeCell-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeCell</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+             <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in cell scope.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeFamily-java.util.Set-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeFamily</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+               byte[]&nbsp;family,
+               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeGlobal-org.apache.hadoop.hbase.security.access.GlobalPermission-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeGlobal</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a>&nbsp;permissions,
+               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeNamespace-java.util.Set-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeNamespace</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>&gt;&nbsp;permissions,
+                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                  <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeTable-java.util.Set-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeTable</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+              byte[]&nbsp;family,
+              byte[]&nbsp;qualifier,
+              <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserFamily-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserFamily</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                   <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                   byte[]&nbsp;family,
+                   <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table:family scope.</div>
+</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserGlobal-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserGlobal</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                   <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in global scope.</div>
+</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserNamespace-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserNamespace</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                      <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in namespace scope.</div>
+</td>
+</tr>
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                  <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                  byte[]&nbsp;family,
+                  byte[]&nbsp;qualifier,
+                  <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table:family:qualifier scope.</div>
+</td>
+</tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                  <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                  byte[]&nbsp;family,
+                  <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table:family scope.</div>
+</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                  <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                  <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table scope.</div>
+</td>
+</tr>
+<tr id="i12" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#clearCache-org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache-">clearCache</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&nbsp;cacheToUpdate)</code>&nbsp;</td>
+</tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#close--">close</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#getMTime--">getMTime</a></span>()</code>
+<div class="block">Last modification logical time</div>
+</td>
+</tr>
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#getOrCreate-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">getOrCreate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
+           org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block">Returns a AuthManager from the cache.</div>
+</td>
+</tr>
+<tr id="i16" class="altColor">
+<td class="colFirst"><code>static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#getTotalRefCount--">getTotalRefCount</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i17" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#getZKPermissionWatcher--">getZKPermissionWatcher</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i18" class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#hasAccessTable-java.util.Set-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccessTable</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+              <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+<tr id="i19" class="rowColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#initGlobal-org.apache.hadoop.conf.Configuration-">initGlobal</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block">Initialize with global permission assignments
+ from the <code>hbase.superuser</code> configuration key.</div>
+</td>
+</tr>
+<tr id="i20" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#refreshNamespaceCacheFromWritable-java.lang.String-byte:A-">refreshNamespaceCacheFromWritable</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                                 byte[]&nbsp;data)</code>
+<div class="block">Update acl info for namespace.</div>
+</td>
+</tr>
+<tr id="i21" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#refreshTableCacheFromWritable-org.apache.hadoop.hbase.TableName-byte:A-">refreshTableCacheFromWritable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                             byte[]&nbsp;data)</code>
+<div class="block">Update acl info for table.</div>
+</td>
+</tr>
+<tr id="i22" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#release-org.apache.hadoop.hbase.security.access.AuthManager-">release</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;instance)</code>
+<div class="block">Releases the resources for the given AuthManager if the reference count is down to 0.</div>
+</td>
+</tr>
+<tr id="i23" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#removeNamespace-byte:A-">removeNamespace</a></span>(byte[]&nbsp;ns)</code>
+<div class="block">Remove given namespace from AuthManager's namespace cache.</div>
+</td>
+</tr>
+<tr id="i24" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#removeTable-org.apache.hadoop.hbase.TableName-">removeTable</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>
+<div class="block">Remove given table from AuthManager's table cache.</div>
+</td>
+</tr>
+<tr id="i25" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#updateCache-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache-">updateCache</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,? extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;newPermissions,
+           <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&nbsp;cacheToUpdate)</code>&nbsp;</td>
+</tr>
+<tr id="i26" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#updateGlobalCache-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">updateGlobalCache</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;globalPerms)</code>
+<div class="block">Updates the internal global permissions cache.</div>
+</td>
+</tr>
+<tr id="i27" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#updateNamespaceCache-java.lang.String-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">updateNamespaceCache</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                    org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;nsPerms)</code>
+<div class="block">Updates the internal namespace permissions cache for specified namespace.</div>
+</td>
+</tr>
+<tr id="i28" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#updateTableCache-org.apache.hadoop.hbase.TableName-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">updateTableCache</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;tablePerms)</code>
+<div class="block">Updates the internal table permissions cache for specified table.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="NS_NO_PERMISSION">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NS_NO_PERMISSION</h4>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.101">NS_NO_PERMISSION</a></pre>
+</li>
+</ul>
+<a name="TBL_NO_PERMISSION">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TBL_NO_PERMISSION</h4>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.102">TBL_NO_PERMISSION</a></pre>
+</li>
+</ul>
+<a name="globalCache">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>globalCache</h4>
+<pre>private volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.108">globalCache</a></pre>
+<div class="block">Cache for global permission.
+ Since every user/group can only have one global permission, no need to user PermissionCache.</div>
+</li>
+</ul>
+<a name="namespaceCache">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>namespaceCache</h4>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.110">namespaceCache</a></pre>
+<div class="block">Cache for namespace permission.</div>
+</li>
+</ul>
+<a name="tableCache">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tableCache</h4>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.113">tableCache</a></pre>
+<div class="block">Cache for table permission.</div>
+</li>
+</ul>
+<a name="LOG">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>LOG</h4>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.116">LOG</a></pre>
+</li>
+</ul>
+<a name="conf">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>conf</h4>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.118">conf</a></pre>
+</li>
+</ul>
+<a name="zkperms">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>zkperms</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.119">zkperms</a></pre>
+</li>
+</ul>
+<a name="mtime">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>mtime</h4>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.120">mtime</a></pre>
+</li>
+</ul>
+<a name="managerMap">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>managerMap</h4>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.552">managerMap</a></pre>
+</li>
+</ul>
+<a name="refCount">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>refCount</h4>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.554">refCount</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="AuthManager-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>AuthManager</h4>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.122">AuthManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
+                    org.apache.hadoop.conf.Configuration&nbsp;conf)
+             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="close--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>close</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.137">close</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true#close--" title="class or interface in java.io">close</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></code></dd>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="initGlobal-org.apache.hadoop.conf.Configuration-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>initGlobal</h4>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.145">initGlobal</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block">Initialize with global permission assignments
+ from the <code>hbase.superuser</code> configuration key.</div>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="getZKPermissionWatcher--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getZKPermissionWatcher</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.165">getZKPermissionWatcher</a>()</pre>
+</li>
+</ul>
+<a name="refreshTableCacheFromWritable-org.apache.hadoop.hbase.TableName-byte:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>refreshTableCacheFromWritable</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.175">refreshTableCacheFromWritable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                                          byte[]&nbsp;data)
+                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block">Update acl info for table.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>table</code> - name of table</dd>
+<dd><code>data</code> - updated acl data</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - exception when deserialize data</dd>
+</dl>
+</li>
+</ul>
+<a name="refreshNamespaceCacheFromWritable-java.lang.String-byte:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>refreshNamespaceCacheFromWritable</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.201">refreshNamespaceCacheFromWritable</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                                              byte[]&nbsp;data)
+                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block">Update acl info for namespace.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>namespace</code> - namespace</dd>
+<dd><code>data</code> - updated acl data</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - exception when deserialize data</dd>
+</dl>
+</li>
+</ul>
+<a name="updateGlobalCache-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>updateGlobalCache</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.221">updateGlobalCache</a>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;globalPerms)</pre>
+<div class="block">Updates the internal global permissions cache.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>globalPerms</code> - new global permissions</dd>
+</dl>
+</li>
+</ul>
+<a name="updateTableCache-org.apache.hadoop.hbase.TableName-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>updateTableCache</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.242">updateTableCache</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                              org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;tablePerms)</pre>
+<div class="block">Updates the internal table permissions cache for specified table.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>table</code> - updated table name</dd>
+<dd><code>tablePerms</code> - new table permissions</dd>
+</dl>
+</li>
+</ul>
+<a name="updateNamespaceCache-java.lang.String-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>updateNamespaceCache</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.256">updateNamespaceCache</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                                  org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;nsPerms)</pre>
+<div class="block">Updates the internal namespace permissions cache for specified namespace.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>namespace</code> - updated namespace</dd>
+<dd><code>nsPerms</code> - new namespace permissions</dd>
+</dl>
+</li>
+</ul>
+<a name="clearCache-org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>clearCache</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.266">clearCache</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&nbsp;cacheToUpdate)</pre>
+</li>
+</ul>
+<a name="updateCache-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>updateCache</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.271">updateCache</a>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,? extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;newPermissions,
+                         <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&nbsp;cacheToUpdate)</pre>
+</li>
+</ul>
+<a name="authorizeUserGlobal-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>authorizeUserGlobal</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.286">authorizeUserGlobal</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                                   <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+<div class="block">Check if user has given action privilige in global scope.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>user</code> - user name</dd>
+<dd><code>action</code> - one of action in [Read, Write, Create, Exec, Admin]</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if user has, false otherwise</dd>
+</dl>
+</li>
+</ul>
+<a name="authorizeGlobal-org.apache.hadoop.hbase.security.access.GlobalPermission-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>authorizeGlobal</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.301">authorizeGlobal</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a>&nbsp;permissions,
+                                <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+</li>
+</ul>
+<a name="authorizeUserNamespace-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>authorizeUserNamespace</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.312">authorizeUserNamespace</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                                      <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+<div class="block">Check if user has given action privilige in namespace scope.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>user</code> - user name</dd>
+<dd><code>namespace</code> - namespace</dd>
+<dd><code>action</code> - one of action in [Read, Write, Create, Exec, Admin]</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if user has, false otherwise</dd>
+</dl>
+</li>
+</ul>
+<a name="authorizeNamespace-java.util.Set-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>authorizeNamespace</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.332">authorizeNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>&gt;&nbsp;permissions,
+                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                                   <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+</li>
+</ul>
+<a name="accessUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>accessUserTable</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.353">accessUserTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+<div class="block">Checks if the user has access to the full table or at least a family/qualifier
+ for the specified action.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>user</code> - user name</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>action</code> - action in one of [Read, Write, Create, Exec, Admin]</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the user has access to the table, false otherwise</dd>
+</dl>
+</li>
+</ul>
+<a name="hasAccessTable-java.util.Set-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>hasAccessTable</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.376">hasAccessTable</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+                               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+</li>
+</ul>
+<a name="authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>authorizeUserTable</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.395">authorizeUserTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                                  <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                                  <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+<div class="block">Check if user has given action privilige in table scope.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>user</code> - user name</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>action</code> - one of action in [Read, Write, Create, Exec, Admin]</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if user has, false otherwise</dd>
+</dl>
+</li>
+</ul>
+<a name="authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>authorizeUserTable</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.407">authorizeUserTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                                  <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                                  byte[]&nbsp;family,
+                                  <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+<div class="block">Check if user has given action privilige in table:family scope.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>user</code> - user name</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>family</code> - family name</dd>
+<dd><code>action</code> - one of action in [Read, Write, Create, Exec, Admin]</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if user has, false otherwise</dd>
+</dl>
+</li>
+</ul>
+<a name="authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>authorizeUserTable</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.421">authorizeUserTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                                  <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                                  byte[]&nbsp;family,
+                                  byte[]&nbsp;qualifier,
+                                  <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+<div class="block">Check if user has given action privilige in table:family:qualifier scope.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>user</code> - user name</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>family</code> - family name</dd>
+<dd><code>qualifier</code> - qualifier name</dd>
+<dd><code>action</code> - one of action in [Read, Write, Create, Exec, Admin]</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if user has, false otherwise</dd>
+</dl>
+</li>
+</ul>
+<a name="authorizeTable-java.util.Set-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>authorizeTable</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.446">authorizeTable</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+                               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                               byte[]&nbsp;family,
+                               byte[]&nbsp;qualifier,
+                               <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+</li>
+</ul>
+<a name="authorizeUserFamily-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>authorizeUserFamily</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.468">authorizeUserFamily</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                                   <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                                   byte[]&nbsp;family,
+                                   <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+<div class="block">Check if user has given action privilige in table:family scope.
+ This method is for backward compatibility.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>user</code> - user name</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>family</code> - family names</dd>
+<dd><code>action</code> - one of action in [Read, Write, Create, Exec, Admin]</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if user has, false otherwise</dd>
+</dl>
+</li>
+</ul>
+<a name="authorizeFamily-java.util.Set-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>authorizeFamily</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.484">authorizeFamily</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+                                <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                                byte[]&nbsp;family,
+                                <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+</li>
+</ul>
+<a name="authorizeCell-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>authorizeCell</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.505">authorizeCell</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                             <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+                             <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+<div class="block">Check if user has given action privilige in cell scope.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>user</code> - user name</dd>
+<dd><code>table</code> - table name</dd>
+<dd><code>cell</code> - cell to be checked</dd>
+<dd><code>action</code> - one of action in [Read, Write, Create, Exec, Admin]</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if user has, false otherwise</dd>
+</dl>
+</li>
+</ul>
+<a name="removeNamespace-byte:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>removeNamespace</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.532">removeNamespace</a>(byte[]&nbsp;ns)</pre>
+<div class="block">Remove given namespace from AuthManager's namespace cache.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>ns</code> - namespace</dd>
+</dl>
+</li>
+</ul>
+<a name="removeTable-org.apache.hadoop.hbase.TableName-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>removeTable</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.540">removeTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
+<div class="block">Remove given table from AuthManager's table cache.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>table</code> - table name</dd>
+</dl>
+</li>
+</ul>
+<a name="getMTime--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMTime</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.548">getMTime</a>()</pre>
+<div class="block">Last modification logical time</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>time</dd>
+</dl>
+</li>
+</ul>
+<a name="getOrCreate-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getOrCreate</h4>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.564">getOrCreate</a>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
+                                      org.apache.hadoop.conf.Configuration&nbsp;conf)
+                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block">Returns a AuthManager from the cache. If not cached, constructs a new one.
+ Returned instance should be released back by calling <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#release-org.apache.hadoop.hbase.security.access.AuthManager-"><code>release(AuthManager)</code></a>.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>watcher</code> - zk watcher</dd>
+<dd><code>conf</code> - configuration</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an AuthManager</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - zookeeper initialization failed</dd>
+</dl>
+</li>
+</ul>
+<a name="getTotalRefCount--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getTotalRefCount</h4>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.577">getTotalRefCount</a>()</pre>
+</li>
+</ul>
+<a name="release-org.apache.hadoop.hbase.security.access.AuthManager-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>release</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.589">release</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;instance)</pre>
+<div class="block">Releases the resources for the given AuthManager if the reference count is down to 0.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>instance</code> - AuthManager to be released</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/AuthManager.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/AuthManager.html" target="_top">Frames</a></li>
+<li><a href="AuthManager.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/AuthResult.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/AuthResult.html b/devapidocs/org/apache/hadoop/hbase/security/access/AuthResult.html
index 0115e57..85187ef 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/AuthResult.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/AuthResult.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.Params.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -802,7 +802,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.Params.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">


[23/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html
index 25b7848..5c428b5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html
@@ -245,20 +245,20 @@
 <span class="sourceLineNo">237</span>    return regionEnv != null ? regionEnv.getRegion() : null;<a name="line.237"></a>
 <span class="sourceLineNo">238</span>  }<a name="line.238"></a>
 <span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  public TableAuthManager getAuthManager() {<a name="line.240"></a>
+<span class="sourceLineNo">240</span>  public AuthManager getAuthManager() {<a name="line.240"></a>
 <span class="sourceLineNo">241</span>    return accessChecker.getAuthManager();<a name="line.241"></a>
 <span class="sourceLineNo">242</span>  }<a name="line.242"></a>
 <span class="sourceLineNo">243</span><a name="line.243"></a>
 <span class="sourceLineNo">244</span>  private void initialize(RegionCoprocessorEnvironment e) throws IOException {<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    final Region region = e.getRegion();<a name="line.245"></a>
 <span class="sourceLineNo">246</span>    Configuration conf = e.getConfiguration();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    Map&lt;byte[], ListMultimap&lt;String, TablePermission&gt;&gt; tables = AccessControlLists.loadAll(region);<a name="line.247"></a>
+<span class="sourceLineNo">247</span>    Map&lt;byte[], ListMultimap&lt;String, UserPermission&gt;&gt; tables = AccessControlLists.loadAll(region);<a name="line.247"></a>
 <span class="sourceLineNo">248</span>    // For each table, write out the table's permissions to the respective<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    // znode for that table.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    for (Map.Entry&lt;byte[], ListMultimap&lt;String,TablePermission&gt;&gt; t:<a name="line.250"></a>
+<span class="sourceLineNo">250</span>    for (Map.Entry&lt;byte[], ListMultimap&lt;String, UserPermission&gt;&gt; t:<a name="line.250"></a>
 <span class="sourceLineNo">251</span>      tables.entrySet()) {<a name="line.251"></a>
 <span class="sourceLineNo">252</span>      byte[] entry = t.getKey();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      ListMultimap&lt;String,TablePermission&gt; perms = t.getValue();<a name="line.253"></a>
+<span class="sourceLineNo">253</span>      ListMultimap&lt;String, UserPermission&gt; perms = t.getValue();<a name="line.253"></a>
 <span class="sourceLineNo">254</span>      byte[] serialized = AccessControlLists.writePermissionsAsBytes(perms, conf);<a name="line.254"></a>
 <span class="sourceLineNo">255</span>      getAuthManager().getZKPermissionWatcher().writeToZookeeper(entry, serialized);<a name="line.255"></a>
 <span class="sourceLineNo">256</span>    }<a name="line.256"></a>
@@ -294,7 +294,7 @@
 <span class="sourceLineNo">286</span>    try (Table t = e.getConnection().getTable(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.286"></a>
 <span class="sourceLineNo">287</span>      for (byte[] entry : entries) {<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        currentEntry = entry;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        ListMultimap&lt;String, TablePermission&gt; perms =<a name="line.289"></a>
+<span class="sourceLineNo">289</span>        ListMultimap&lt;String, UserPermission&gt; perms =<a name="line.289"></a>
 <span class="sourceLineNo">290</span>            AccessControlLists.getPermissions(conf, entry, t, null, null, null, false);<a name="line.290"></a>
 <span class="sourceLineNo">291</span>        byte[] serialized = AccessControlLists.writePermissionsAsBytes(perms, conf);<a name="line.291"></a>
 <span class="sourceLineNo">292</span>        zkw.writeToZookeeper(entry, serialized);<a name="line.292"></a>
@@ -338,7 +338,7 @@
 <span class="sourceLineNo">330</span>    }<a name="line.330"></a>
 <span class="sourceLineNo">331</span><a name="line.331"></a>
 <span class="sourceLineNo">332</span>    // 2. check for the table-level, if successful we can short-circuit<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    if (getAuthManager().authorize(user, tableName, (byte[])null, permRequest)) {<a name="line.333"></a>
+<span class="sourceLineNo">333</span>    if (getAuthManager().authorizeUserTable(user, tableName, permRequest)) {<a name="line.333"></a>
 <span class="sourceLineNo">334</span>      return AuthResult.allow(request, "Table permission granted", user,<a name="line.334"></a>
 <span class="sourceLineNo">335</span>        permRequest, tableName, families);<a name="line.335"></a>
 <span class="sourceLineNo">336</span>    }<a name="line.336"></a>
@@ -348,7 +348,7 @@
 <span class="sourceLineNo">340</span>      // all families must pass<a name="line.340"></a>
 <span class="sourceLineNo">341</span>      for (Map.Entry&lt;byte [], ? extends Collection&lt;?&gt;&gt; family : families.entrySet()) {<a name="line.341"></a>
 <span class="sourceLineNo">342</span>        // a) check for family level access<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        if (getAuthManager().authorize(user, tableName, family.getKey(),<a name="line.343"></a>
+<span class="sourceLineNo">343</span>        if (getAuthManager().authorizeUserTable(user, tableName, family.getKey(),<a name="line.343"></a>
 <span class="sourceLineNo">344</span>            permRequest)) {<a name="line.344"></a>
 <span class="sourceLineNo">345</span>          continue;  // family-level permission overrides per-qualifier<a name="line.345"></a>
 <span class="sourceLineNo">346</span>        }<a name="line.346"></a>
@@ -359,17 +359,17 @@
 <span class="sourceLineNo">351</span>            // for each qualifier of the family<a name="line.351"></a>
 <span class="sourceLineNo">352</span>            Set&lt;byte[]&gt; familySet = (Set&lt;byte[]&gt;)family.getValue();<a name="line.352"></a>
 <span class="sourceLineNo">353</span>            for (byte[] qualifier : familySet) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>              if (!getAuthManager().authorize(user, tableName, family.getKey(),<a name="line.354"></a>
-<span class="sourceLineNo">355</span>                                         qualifier, permRequest)) {<a name="line.355"></a>
+<span class="sourceLineNo">354</span>              if (!getAuthManager().authorizeUserTable(user, tableName,<a name="line.354"></a>
+<span class="sourceLineNo">355</span>                    family.getKey(), qualifier, permRequest)) {<a name="line.355"></a>
 <span class="sourceLineNo">356</span>                return AuthResult.deny(request, "Failed qualifier check", user,<a name="line.356"></a>
-<span class="sourceLineNo">357</span>                    permRequest, tableName, makeFamilyMap(family.getKey(), qualifier));<a name="line.357"></a>
+<span class="sourceLineNo">357</span>                  permRequest, tableName, makeFamilyMap(family.getKey(), qualifier));<a name="line.357"></a>
 <span class="sourceLineNo">358</span>              }<a name="line.358"></a>
 <span class="sourceLineNo">359</span>            }<a name="line.359"></a>
 <span class="sourceLineNo">360</span>          } else if (family.getValue() instanceof List) { // List&lt;Cell&gt;<a name="line.360"></a>
 <span class="sourceLineNo">361</span>            List&lt;Cell&gt; cellList = (List&lt;Cell&gt;)family.getValue();<a name="line.361"></a>
 <span class="sourceLineNo">362</span>            for (Cell cell : cellList) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>              if (!getAuthManager().authorize(user, tableName, family.getKey(),<a name="line.363"></a>
-<span class="sourceLineNo">364</span>                CellUtil.cloneQualifier(cell), permRequest)) {<a name="line.364"></a>
+<span class="sourceLineNo">363</span>              if (!getAuthManager().authorizeUserTable(user, tableName, family.getKey(),<a name="line.363"></a>
+<span class="sourceLineNo">364</span>                  CellUtil.cloneQualifier(cell), permRequest)) {<a name="line.364"></a>
 <span class="sourceLineNo">365</span>                return AuthResult.deny(request, "Failed qualifier check", user, permRequest,<a name="line.365"></a>
 <span class="sourceLineNo">366</span>                  tableName, makeFamilyMap(family.getKey(), CellUtil.cloneQualifier(cell)));<a name="line.366"></a>
 <span class="sourceLineNo">367</span>              }<a name="line.367"></a>
@@ -378,7 +378,7 @@
 <span class="sourceLineNo">370</span>        } else {<a name="line.370"></a>
 <span class="sourceLineNo">371</span>          // no qualifiers and family-level check already failed<a name="line.371"></a>
 <span class="sourceLineNo">372</span>          return AuthResult.deny(request, "Failed family check", user, permRequest,<a name="line.372"></a>
-<span class="sourceLineNo">373</span>              tableName, makeFamilyMap(family.getKey(), null));<a name="line.373"></a>
+<span class="sourceLineNo">373</span>            tableName, makeFamilyMap(family.getKey(), null));<a name="line.373"></a>
 <span class="sourceLineNo">374</span>        }<a name="line.374"></a>
 <span class="sourceLineNo">375</span>      }<a name="line.375"></a>
 <span class="sourceLineNo">376</span><a name="line.376"></a>
@@ -495,2153 +495,2161 @@
 <span class="sourceLineNo">487</span>          familyMap.entrySet()) {<a name="line.487"></a>
 <span class="sourceLineNo">488</span>        if (family.getValue() != null &amp;&amp; !family.getValue().isEmpty()) {<a name="line.488"></a>
 <span class="sourceLineNo">489</span>          for (byte[] qualifier : family.getValue()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            if (getAuthManager().matchPermission(user, tableName,<a name="line.490"></a>
-<span class="sourceLineNo">491</span>                family.getKey(), qualifier, perm)) {<a name="line.491"></a>
+<span class="sourceLineNo">490</span>            if (getAuthManager().authorizeUserTable(user, tableName,<a name="line.490"></a>
+<span class="sourceLineNo">491</span>                  family.getKey(), qualifier, perm)) {<a name="line.491"></a>
 <span class="sourceLineNo">492</span>              return true;<a name="line.492"></a>
 <span class="sourceLineNo">493</span>            }<a name="line.493"></a>
 <span class="sourceLineNo">494</span>          }<a name="line.494"></a>
 <span class="sourceLineNo">495</span>        } else {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          if (getAuthManager().matchPermission(user, tableName, family.getKey(),<a name="line.496"></a>
-<span class="sourceLineNo">497</span>              perm)) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>            return true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          }<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      }<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    } else if (LOG.isDebugEnabled()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      LOG.debug("Empty family map passed for permission check");<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>    return false;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>  private enum OpType {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    GET("get"),<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    EXISTS("exists"),<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    SCAN("scan"),<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    PUT("put"),<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    DELETE("delete"),<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    CHECK_AND_PUT("checkAndPut"),<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    CHECK_AND_DELETE("checkAndDelete"),<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    INCREMENT_COLUMN_VALUE("incrementColumnValue"),<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    APPEND("append"),<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    INCREMENT("increment");<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>    private String type;<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    private OpType(String type) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      this.type = type;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span>    @Override<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    public String toString() {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return type;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>  /**<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * Determine if cell ACLs covered by the operation grant access. This is expensive.<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   * @return false if cell ACLs failed to grant access, true otherwise<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   * @throws IOException<a name="line.536"></a>
-<span class="sourceLineNo">537</span>   */<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  private boolean checkCoveringPermission(User user, OpType request, RegionCoprocessorEnvironment e,<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      byte[] row, Map&lt;byte[], ? extends Collection&lt;?&gt;&gt; familyMap, long opTs, Action... actions)<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      throws IOException {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    if (!cellFeaturesEnabled) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      return false;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    long cellGrants = 0;<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    long latestCellTs = 0;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    Get get = new Get(row);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    // Only in case of Put/Delete op, consider TS within cell (if set for individual cells).<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // When every cell, within a Mutation, can be linked with diff TS we can not rely on only one<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // version. We have to get every cell version and check its TS against the TS asked for in<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    // Mutation and skip those Cells which is outside this Mutation TS.In case of Put, we have to<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    // consider only one such passing cell. In case of Delete we have to consider all the cell<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    // versions under this passing version. When Delete Mutation contains columns which are a<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // version delete just consider only one version for those column cells.<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    boolean considerCellTs  = (request == OpType.PUT || request == OpType.DELETE);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    if (considerCellTs) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      get.setMaxVersions();<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    } else {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      get.setMaxVersions(1);<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    }<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    boolean diffCellTsFromOpTs = false;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    for (Map.Entry&lt;byte[], ? extends Collection&lt;?&gt;&gt; entry: familyMap.entrySet()) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      byte[] col = entry.getKey();<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      // TODO: HBASE-7114 could possibly unify the collection type in family<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      // maps so we would not need to do this<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      if (entry.getValue() instanceof Set) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>        Set&lt;byte[]&gt; set = (Set&lt;byte[]&gt;)entry.getValue();<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        if (set == null || set.isEmpty()) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          get.addFamily(col);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        } else {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>          for (byte[] qual: set) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>            get.addColumn(col, qual);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>          }<a name="line.572"></a>
-<span class="sourceLineNo">573</span>        }<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      } else if (entry.getValue() instanceof List) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        List&lt;Cell&gt; list = (List&lt;Cell&gt;)entry.getValue();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>        if (list == null || list.isEmpty()) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          get.addFamily(col);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        } else {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          // In case of family delete, a Cell will be added into the list with Qualifier as null.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          for (Cell cell : list) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            if (cell.getQualifierLength() == 0<a name="line.581"></a>
-<span class="sourceLineNo">582</span>                &amp;&amp; (cell.getTypeByte() == Type.DeleteFamily.getCode()<a name="line.582"></a>
-<span class="sourceLineNo">583</span>                || cell.getTypeByte() == Type.DeleteFamilyVersion.getCode())) {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>              get.addFamily(col);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>            } else {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              get.addColumn(col, CellUtil.cloneQualifier(cell));<a name="line.586"></a>
-<span class="sourceLineNo">587</span>            }<a name="line.587"></a>
-<span class="sourceLineNo">588</span>            if (considerCellTs) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>              long cellTs = cell.getTimestamp();<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              latestCellTs = Math.max(latestCellTs, cellTs);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>              diffCellTsFromOpTs = diffCellTsFromOpTs || (opTs != cellTs);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            }<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          }<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        }<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      } else if (entry.getValue() == null) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        get.addFamily(col);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      } else {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        throw new RuntimeException("Unhandled collection type " +<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          entry.getValue().getClass().getName());<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      }<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    // We want to avoid looking into the future. So, if the cells of the<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    // operation specify a timestamp, or the operation itself specifies a<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    // timestamp, then we use the maximum ts found. Otherwise, we bound<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    // the Get to the current server time. We add 1 to the timerange since<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    // the upper bound of a timerange is exclusive yet we need to examine<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    // any cells found there inclusively.<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    long latestTs = Math.max(opTs, latestCellTs);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    if (latestTs == 0 || latestTs == HConstants.LATEST_TIMESTAMP) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      latestTs = EnvironmentEdgeManager.currentTime();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    get.setTimeRange(0, latestTs + 1);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    // In case of Put operation we set to read all versions. This was done to consider the case<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    // where columns are added with TS other than the Mutation TS. But normally this wont be the<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    // case with Put. There no need to get all versions but get latest version only.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    if (!diffCellTsFromOpTs &amp;&amp; request == OpType.PUT) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      get.setMaxVersions(1);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    }<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (LOG.isTraceEnabled()) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      LOG.trace("Scanning for cells with " + get);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    // This Map is identical to familyMap. The key is a BR rather than byte[].<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    // It will be easy to do gets over this new Map as we can create get keys over the Cell cf by<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    // new SimpleByteRange(cell.familyArray, cell.familyOffset, cell.familyLen)<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    Map&lt;ByteRange, List&lt;Cell&gt;&gt; familyMap1 = new HashMap&lt;&gt;();<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    for (Entry&lt;byte[], ? extends Collection&lt;?&gt;&gt; entry : familyMap.entrySet()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      if (entry.getValue() instanceof List) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        familyMap1.put(new SimpleMutableByteRange(entry.getKey()), (List&lt;Cell&gt;) entry.getValue());<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    }<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    RegionScanner scanner = getRegion(e).getScanner(new Scan(get));<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    List&lt;Cell&gt; cells = Lists.newArrayList();<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    Cell prevCell = null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    ByteRange curFam = new SimpleMutableByteRange();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    boolean curColAllVersions = (request == OpType.DELETE);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    long curColCheckTs = opTs;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    boolean foundColumn = false;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    try {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      boolean more = false;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      ScannerContext scannerContext = ScannerContext.newBuilder().setBatchLimit(1).build();<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>      do {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        cells.clear();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        // scan with limit as 1 to hold down memory use on wide rows<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        more = scanner.next(cells, scannerContext);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        for (Cell cell: cells) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          if (LOG.isTraceEnabled()) {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>            LOG.trace("Found cell " + cell);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          }<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          boolean colChange = prevCell == null || !CellUtil.matchingColumn(prevCell, cell);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          if (colChange) foundColumn = false;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          prevCell = cell;<a name="line.652"></a>
-<span class="sourceLineNo">653</span>          if (!curColAllVersions &amp;&amp; foundColumn) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>            continue;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>          }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          if (colChange &amp;&amp; considerCellTs) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>            curFam.set(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());<a name="line.657"></a>
-<span class="sourceLineNo">658</span>            List&lt;Cell&gt; cols = familyMap1.get(curFam);<a name="line.658"></a>
-<span class="sourceLineNo">659</span>            for (Cell col : cols) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>              // null/empty qualifier is used to denote a Family delete. The TS and delete type<a name="line.660"></a>
-<span class="sourceLineNo">661</span>              // associated with this is applicable for all columns within the family. That is<a name="line.661"></a>
-<span class="sourceLineNo">662</span>              // why the below (col.getQualifierLength() == 0) check.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>              if ((col.getQualifierLength() == 0 &amp;&amp; request == OpType.DELETE)<a name="line.663"></a>
-<span class="sourceLineNo">664</span>                  || CellUtil.matchingQualifier(cell, col)) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>                byte type = col.getTypeByte();<a name="line.665"></a>
-<span class="sourceLineNo">666</span>                if (considerCellTs) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>                  curColCheckTs = col.getTimestamp();<a name="line.667"></a>
-<span class="sourceLineNo">668</span>                }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>                // For a Delete op we pass allVersions as true. When a Delete Mutation contains<a name="line.669"></a>
-<span class="sourceLineNo">670</span>                // a version delete for a column no need to check all the covering cells within<a name="line.670"></a>
-<span class="sourceLineNo">671</span>                // that column. Check all versions when Type is DeleteColumn or DeleteFamily<a name="line.671"></a>
-<span class="sourceLineNo">672</span>                // One version delete types are Delete/DeleteFamilyVersion<a name="line.672"></a>
-<span class="sourceLineNo">673</span>                curColAllVersions = (KeyValue.Type.DeleteColumn.getCode() == type)<a name="line.673"></a>
-<span class="sourceLineNo">674</span>                    || (KeyValue.Type.DeleteFamily.getCode() == type);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>                break;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>              }<a name="line.676"></a>
-<span class="sourceLineNo">677</span>            }<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          }<a name="line.678"></a>
-<span class="sourceLineNo">679</span>          if (cell.getTimestamp() &gt; curColCheckTs) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>            // Just ignore this cell. This is not a covering cell.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            continue;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          }<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          foundColumn = true;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          for (Action action: actions) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            // Are there permissions for this user for the cell?<a name="line.685"></a>
-<span class="sourceLineNo">686</span>            if (!getAuthManager().authorize(user, getTableName(e), cell, action)) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>              // We can stop if the cell ACL denies access<a name="line.687"></a>
-<span class="sourceLineNo">688</span>              return false;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            }<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          }<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          cellGrants++;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>        }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      } while (more);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    } catch (AccessDeniedException ex) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      throw ex;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    } catch (IOException ex) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      LOG.error("Exception while getting cells to calculate covering permission", ex);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    } finally {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      scanner.close();<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    // We should not authorize unless we have found one or more cell ACLs that<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    // grant access. This code is used to check for additional permissions<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    // after no table or CF grants are found.<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    return cellGrants &gt; 0;<a name="line.704"></a>
-<span class="sourceLineNo">705</span>  }<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>  private static void addCellPermissions(final byte[] perms, Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    // Iterate over the entries in the familyMap, replacing the cells therein<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    // with new cells including the ACL data<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    for (Map.Entry&lt;byte[], List&lt;Cell&gt;&gt; e: familyMap.entrySet()) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      List&lt;Cell&gt; newCells = Lists.newArrayList();<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      for (Cell cell: e.getValue()) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        // Prepend the supplied perms in a new ACL tag to an update list of tags for the cell<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        List&lt;Tag&gt; tags = new ArrayList&lt;&gt;();<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        tags.add(new ArrayBackedTag(AccessControlLists.ACL_TAG_TYPE, perms));<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        Iterator&lt;Tag&gt; tagIterator = PrivateCellUtil.tagsIterator(cell);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        while (tagIterator.hasNext()) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          tags.add(tagIterator.next());<a name="line.718"></a>
-<span class="sourceLineNo">719</span>        }<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        newCells.add(PrivateCellUtil.createCell(cell, tags));<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      // This is supposed to be safe, won't CME<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      e.setValue(newCells);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
-<span class="sourceLineNo">725</span>  }<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>  // Checks whether incoming cells contain any tag with type as ACL_TAG_TYPE. This tag<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  // type is reserved and should not be explicitly set by user.<a name="line.728"></a>
-<span class="sourceLineNo">729</span>  private void checkForReservedTagPresence(User user, Mutation m) throws IOException {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // No need to check if we're not going to throw<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    if (!authorizationEnabled) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      m.setAttribute(TAG_CHECK_PASSED, TRUE);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      return;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    }<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    // Superusers are allowed to store cells unconditionally.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    if (Superusers.isSuperUser(user)) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      m.setAttribute(TAG_CHECK_PASSED, TRUE);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      return;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    }<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    // We already checked (prePut vs preBatchMutation)<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    if (m.getAttribute(TAG_CHECK_PASSED) != null) {<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      return;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    }<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    for (CellScanner cellScanner = m.cellScanner(); cellScanner.advance();) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      Iterator&lt;Tag&gt; tagsItr = PrivateCellUtil.tagsIterator(cellScanner.current());<a name="line.745"></a>
-<span class="sourceLineNo">746</span>      while (tagsItr.hasNext()) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        if (tagsItr.next().getType() == AccessControlLists.ACL_TAG_TYPE) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          throw new AccessDeniedException("Mutation contains cell with reserved type tag");<a name="line.748"></a>
-<span class="sourceLineNo">749</span>        }<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      }<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    }<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    m.setAttribute(TAG_CHECK_PASSED, TRUE);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>  }<a name="line.753"></a>
-<span class="sourceLineNo">754</span><a name="line.754"></a>
-<span class="sourceLineNo">755</span>  /* ---- MasterObserver implementation ---- */<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  @Override<a name="line.756"></a>
-<span class="sourceLineNo">757</span>  public void start(CoprocessorEnvironment env) throws IOException {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    CompoundConfiguration conf = new CompoundConfiguration();<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    conf.add(env.getConfiguration());<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>    authorizationEnabled = AccessChecker.isAuthorizationSupported(conf);<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    if (!authorizationEnabled) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      LOG.warn("AccessController has been loaded with authorization checks DISABLED!");<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>    shouldCheckExecPermission = conf.getBoolean(AccessControlConstants.EXEC_PERMISSION_CHECKS_KEY,<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      AccessControlConstants.DEFAULT_EXEC_PERMISSION_CHECKS);<a name="line.767"></a>
-<span class="sourceLineNo">768</span><a name="line.768"></a>
-<span class="sourceLineNo">769</span>    cellFeaturesEnabled = (HFile.getFormatVersion(conf) &gt;= HFile.MIN_FORMAT_VERSION_WITH_TAGS);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    if (!cellFeaturesEnabled) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      LOG.info("A minimum HFile version of " + HFile.MIN_FORMAT_VERSION_WITH_TAGS<a name="line.771"></a>
-<span class="sourceLineNo">772</span>          + " is required to persist cell ACLs. Consider setting " + HFile.FORMAT_VERSION_KEY<a name="line.772"></a>
-<span class="sourceLineNo">773</span>          + " accordingly.");<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>    ZKWatcher zk = null;<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    if (env instanceof MasterCoprocessorEnvironment) {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      // if running on HMaster<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      MasterCoprocessorEnvironment mEnv = (MasterCoprocessorEnvironment)env;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      if (mEnv instanceof HasMasterServices) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        zk = ((HasMasterServices)mEnv).getMasterServices().getZooKeeper();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    } else if (env instanceof RegionServerCoprocessorEnvironment) {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      RegionServerCoprocessorEnvironment rsEnv = (RegionServerCoprocessorEnvironment)env;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>      if (rsEnv instanceof HasRegionServerServices) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>        zk = ((HasRegionServerServices)rsEnv).getRegionServerServices().getZooKeeper();<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    } else if (env instanceof RegionCoprocessorEnvironment) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      // if running at region<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      regionEnv = (RegionCoprocessorEnvironment) env;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      conf.addBytesMap(regionEnv.getRegion().getTableDescriptor().getValues());<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      compatibleEarlyTermination = conf.getBoolean(AccessControlConstants.CF_ATTRIBUTE_EARLY_OUT,<a name="line.792"></a>
-<span class="sourceLineNo">793</span>          AccessControlConstants.DEFAULT_ATTRIBUTE_EARLY_OUT);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      if (regionEnv instanceof HasRegionServerServices) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>        zk = ((HasRegionServerServices)regionEnv).getRegionServerServices().getZooKeeper();<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    }<a name="line.797"></a>
-<span class="sourceLineNo">798</span><a name="line.798"></a>
-<span class="sourceLineNo">799</span>    // set the user-provider.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    this.userProvider = UserProvider.instantiate(env.getConfiguration());<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    // Throws RuntimeException if fails to load TableAuthManager so that coprocessor is unloaded.<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    accessChecker = new AccessChecker(env.getConfiguration(), zk);<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    tableAcls = new MapMaker().weakValues().makeMap();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  }<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>  @Override<a name="line.806"></a>
-<span class="sourceLineNo">807</span>  public void stop(CoprocessorEnvironment env) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    accessChecker.stop();<a name="line.808"></a>
-<span class="sourceLineNo">809</span>  }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>  /*********************************** Observer/Service Getters ***********************************/<a name="line.811"></a>
-<span class="sourceLineNo">812</span>  @Override<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  public Optional&lt;RegionObserver&gt; getRegionObserver() {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    return Optional.of(this);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>  }<a name="line.815"></a>
-<span class="sourceLineNo">816</span><a name="line.816"></a>
-<span class="sourceLineNo">817</span>  @Override<a name="line.817"></a>
-<span class="sourceLineNo">818</span>  public Optional&lt;MasterObserver&gt; getMasterObserver() {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    return Optional.of(this);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  }<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>  @Override<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  public Optional&lt;EndpointObserver&gt; getEndpointObserver() {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    return Optional.of(this);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>  }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>  @Override<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  public Optional&lt;BulkLoadObserver&gt; getBulkLoadObserver() {<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    return Optional.of(this);<a name="line.829"></a>
-<span class="sourceLineNo">830</span>  }<a name="line.830"></a>
-<span class="sourceLineNo">831</span><a name="line.831"></a>
-<span class="sourceLineNo">832</span>  @Override<a name="line.832"></a>
-<span class="sourceLineNo">833</span>  public Optional&lt;RegionServerObserver&gt; getRegionServerObserver() {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    return Optional.of(this);<a name="line.834"></a>
-<span class="sourceLineNo">835</span>  }<a name="line.835"></a>
-<span class="sourceLineNo">836</span><a name="line.836"></a>
-<span class="sourceLineNo">837</span>  @Override<a name="line.837"></a>
-<span class="sourceLineNo">838</span>  public Iterable&lt;Service&gt; getServices() {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    return Collections.singleton(<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        AccessControlProtos.AccessControlService.newReflectiveService(this));<a name="line.840"></a>
-<span class="sourceLineNo">841</span>  }<a name="line.841"></a>
-<span class="sourceLineNo">842</span><a name="line.842"></a>
-<span class="sourceLineNo">843</span>  /*********************************** Observer implementations ***********************************/<a name="line.843"></a>
-<span class="sourceLineNo">844</span><a name="line.844"></a>
-<span class="sourceLineNo">845</span>  @Override<a name="line.845"></a>
-<span class="sourceLineNo">846</span>  public void preCreateTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c,<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      TableDescriptor desc, RegionInfo[] regions) throws IOException {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    Set&lt;byte[]&gt; families = desc.getColumnFamilyNames();<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    Map&lt;byte[], Set&lt;byte[]&gt;&gt; familyMap = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    for (byte[] family: families) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      familyMap.put(family, null);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    }<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    requireNamespacePermission(c, "createTable",<a name="line.853"></a>
-<span class="sourceLineNo">854</span>        desc.getTableName().getNamespaceAsString(), desc.getTableName(), familyMap, Action.CREATE);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>  @Override<a name="line.857"></a>
-<span class="sourceLineNo">858</span>  public void postCompletedCreateTableAction(<a name="line.858"></a>
-<span class="sourceLineNo">859</span>      final ObserverContext&lt;MasterCoprocessorEnvironment&gt; c,<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      final TableDescriptor desc,<a name="line.860"></a>
-<span class="sourceLineNo">861</span>      final RegionInfo[] regions) throws IOException {<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    // When AC is used, it should be configured as the 1st CP.<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    // In Master, the table operations like create, are handled by a Thread pool but the max size<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    // for this pool is 1. So if multiple CPs create tables on startup, these creations will happen<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    // sequentially only.<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    // Related code in HMaster#startServiceThreads<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    // {code}<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    //   // We depend on there being only one instance of this executor running<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    //   // at a time. To do concurrency, would need fencing of enable/disable of<a name="line.869"></a>
-<span class="sourceLineNo">870</span>    //   // tables.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    //   this.service.startExecutorService(ExecutorType.MASTER_TABLE_OPERATIONS, 1);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    // {code}<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    // In future if we change this pool to have more threads, then there is a chance for thread,<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    // creating acl table, getting delayed and by that time another table creation got over and<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    // this hook is getting called. In such a case, we will need a wait logic here which will<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    // wait till the acl table is created.<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    if (AccessControlLists.isAclTable(desc)) {<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      this.aclTabAvailable = true;<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    } else if (!(TableName.NAMESPACE_TABLE_NAME.equals(desc.getTableName()))) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      if (!aclTabAvailable) {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>        LOG.warn("Not adding owner permission for table " + desc.getTableName() + ". "<a name="line.881"></a>
-<span class="sourceLineNo">882</span>            + AccessControlLists.ACL_TABLE_NAME + " is not yet created. "<a name="line.882"></a>
-<span class="sourceLineNo">883</span>            + getClass().getSimpleName() + " should be configured as the first Coprocessor");<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      } else {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>        String owner = desc.getOwnerString();<a name="line.885"></a>
-<span class="sourceLineNo">886</span>        // default the table owner to current user, if not specified.<a name="line.886"></a>
-<span class="sourceLineNo">887</span>        if (owner == null)<a name="line.887"></a>
-<span class="sourceLineNo">888</span>          owner = getActiveUser(c).getShortName();<a name="line.888"></a>
-<span class="sourceLineNo">889</span>        final UserPermission userperm = new UserPermission(Bytes.toBytes(owner),<a name="line.889"></a>
-<span class="sourceLineNo">890</span>            desc.getTableName(), null, Action.values());<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        // switch to the real hbase master user for doing the RPC on the ACL table<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        User.runAsLoginUser(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>          @Override<a name="line.893"></a>
-<span class="sourceLineNo">894</span>          public Void run() throws Exception {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>            try (Table table = c.getEnvironment().getConnection().<a name="line.895"></a>
-<span class="sourceLineNo">896</span>                getTable(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>              AccessControlLists.addUserPermission(c.getEnvironment().getConfiguration(),<a name="line.897"></a>
-<span class="sourceLineNo">898</span>                  userperm, table);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>            }<a name="line.899"></a>
-<span class="sourceLineNo">900</span>            return null;<a name="line.900"></a>
-<span class="sourceLineNo">901</span>          }<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        });<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    }<a name="line.904"></a>
-<span class="sourceLineNo">905</span>  }<a name="line.905"></a>
-<span class="sourceLineNo">906</span><a name="line.906"></a>
-<span class="sourceLineNo">907</span>  @Override<a name="line.907"></a>
-<span class="sourceLineNo">908</span>  public void preDeleteTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, TableName tableName)<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      throws IOException {<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    requirePermission(c, "deleteTable",<a name="line.910"></a>
-<span class="sourceLineNo">911</span>        tableName, null, null, Action.ADMIN, Action.CREATE);<a name="line.911"></a>
-<span class="sourceLineNo">912</span>  }<a name="line.912"></a>
-<span class="sourceLineNo">913</span><a name="line.913"></a>
-<span class="sourceLineNo">914</span>  @Override<a name="line.914"></a>
-<span class="sourceLineNo">915</span>  public void postDeleteTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c,<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      final TableName tableName) throws IOException {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    final Configuration conf = c.getEnvironment().getConfiguration();<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    User.runAsLoginUser(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      @Override<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      public Void run() throws Exception {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        try (Table table = c.getEnvironment().getConnection().<a name="line.921"></a>
-<span class="sourceLineNo">922</span>            getTable(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.922"></a>
-<span class="sourceLineNo">923</span>          AccessControlLists.removeTablePermissions(conf, tableName, table);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>        }<a name="line.924"></a>
-<span class="sourceLineNo">925</span>        return null;<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      }<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    });<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    getAuthManager().getZKPermissionWatcher().deleteTableACLNode(tableName);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
-<span class="sourceLineNo">930</span><a name="line.930"></a>
-<span class="sourceLineNo">931</span>  @Override<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  public void preTruncateTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c,<a name="line.932"></a>
-<span class="sourceLineNo">933</span>      final TableName tableName) throws IOException {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    requirePermission(c, "truncateTable",<a name="line.934"></a>
-<span class="sourceLineNo">935</span>        tableName, null, null, Action.ADMIN, Action.CREATE);<a name="line.935"></a>
-<span class="sourceLineNo">936</span><a name="line.936"></a>
-<span class="sourceLineNo">937</span>    final Configuration conf = c.getEnvironment().getConfiguration();<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    User.runAsLoginUser(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      @Override<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      public Void run() throws Exception {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>        List&lt;UserPermission&gt; acls =<a name="line.941"></a>
-<span class="sourceLineNo">942</span>            AccessControlLists.getUserTablePermissions(conf, tableName, null, null, null, false);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>        if (acls != null) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>          tableAcls.put(tableName, acls);<a name="line.944"></a>
-<span class="sourceLineNo">945</span>        }<a name="line.945"></a>
-<span class="sourceLineNo">946</span>        return null;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      }<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    });<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>  @Override<a name="line.951"></a>
-<span class="sourceLineNo">952</span>  public void postTruncateTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      final TableName tableName) throws IOException {<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    final Configuration conf = ctx.getEnvironment().getConfiguration();<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    User.runAsLoginUser(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      public Void run() throws Exception {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>        List&lt;UserPermission&gt; perms = tableAcls.get(tableName);<a name="line.958"></a>
-<span class="sourceLineNo">959</span>        if (perms != null) {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>          for (UserPermission perm : perms) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>            try (Table table = ctx.getEnvironment().getConnection().<a name="line.961"></a>
-<span class="sourceLineNo">962</span>                getTable(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.962"></a>
-<span class="sourceLineNo">963</span>              AccessControlLists.addUserPermission(conf, perm, table);<a name="line.963"></a>
-<span class="sourceLineNo">964</span>            }<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          }<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        }<a name="line.966"></a>
-<span class="sourceLineNo">967</span>        tableAcls.remove(tableName);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        return null;<a name="line.968"></a>
-<span class="sourceLineNo">969</span>      }<a name="line.969"></a>
-<span class="sourceLineNo">970</span>    });<a name="line.970"></a>
-<span class="sourceLineNo">971</span>  }<a name="line.971"></a>
-<span class="sourceLineNo">972</span><a name="line.972"></a>
-<span class="sourceLineNo">973</span>  @Override<a name="line.973"></a>
-<span class="sourceLineNo">974</span>  public void preModifyTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, TableName tableName,<a name="line.974"></a>
-<span class="sourceLineNo">975</span>      TableDescriptor currentDesc, TableDescriptor newDesc) throws IOException {<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    // TODO: potentially check if this is a add/modify/delete column operation<a name="line.976"></a>
-<span class="sourceLineNo">977</span>    requirePermission(c, "modifyTable",<a name="line.977"></a>
-<span class="sourceLineNo">978</span>        tableName, null, null, Action.ADMIN, Action.CREATE);<a name="line.978"></a>
-<span class="sourceLineNo">979</span>  }<a name="line.979"></a>
-<span class="sourceLineNo">980</span><a name="line.980"></a>
-<span class="sourceLineNo">981</span>  @Override<a name="line.981"></a>
-<span class="sourceLineNo">982</span>  public void postModifyTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, TableName tableName,<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    TableDescriptor oldDesc, TableDescriptor currentDesc) throws IOException {<a name="line.983"></a>
-<span class="sourceLineNo">984</span>    final Configuration conf = c.getEnvironment().getConfiguration();<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    // default the table owner to current user, if not specified.<a name="line.985"></a>
-<span class="sourceLineNo">986</span>    final String owner = (currentDesc.getOwnerString() != null) ? currentDesc.getOwnerString() :<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      getActiveUser(c).getShortName();<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    User.runAsLoginUser(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.988"></a>
-<span class="sourceLineNo">989</span>      @Override<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      public Void run() throws Exception {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>        UserPermission userperm = new UserPermission(Bytes.toBytes(owner),<a name="line.991"></a>
-<span class="sourceLineNo">992</span>            currentDesc.getTableName(), null, Action.values());<a name="line.992"></a>
-<span class="sourceLineNo">993</span>        try (Table table = c.getEnvironment().getConnection().<a name="line.993"></a>
-<span class="sourceLineNo">994</span>            getTable(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          AccessControlLists.addUserPermission(conf, userperm, table);<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>        return null;<a name="line.997"></a>
-<span class="sourceLineNo">998</span>      }<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    });<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>  }<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span><a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  @Override<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>  public void preEnableTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, TableName tableName)<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      throws IOException {<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    requirePermission(c, "enableTable",<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>        tableName, null, null, Action.ADMIN, Action.CREATE);<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>  }<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span><a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>  @Override<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>  public void preDisableTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, TableName tableName)<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      throws IOException {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>    if (Bytes.equals(tableName.getName(), AccessControlLists.ACL_GLOBAL_NAME)) {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      // We have to unconditionally disallow disable of the ACL table when we are installed,<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // even if not enforcing authorizations. We are still allowing grants and revocations,<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      // checking permissions and logging audit messages, etc. If the ACL table is not<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      // available we will fail random actions all over the place.<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      throw new AccessDeniedException("Not allowed to disable "<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>          + AccessControlLists.ACL_TABLE_NAME + " table with AccessController installed");<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    requirePermission(c, "disableTable",<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>        tableName, null, null, Action.ADMIN, Action.CREATE);<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  }<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span><a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>  @Override<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  public void preAbortProcedure(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>      final long procId) throws IOException {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>    requirePermission(ctx, "abortProcedure", Action.ADMIN);<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>  }<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span><a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>  @Override<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>  public void postAbortProcedure(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      throws IOException {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>    // There is nothing to do at this time after the procedure abort request was sent.<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>  }<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span><a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>  @Override<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>  public void preGetProcedures(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      throws IOException {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    requirePermission(ctx, "getProcedure", Action.ADMIN);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>  }<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span><a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>  @Override<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  public void preGetLocks(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>      throws IOException {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    User user = getActiveUser(ctx);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    accessChecker.requirePermission(user, "getLocks", null, Action.ADMIN);<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>  }<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span><a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>  @Override<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>  public void preMove(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, RegionInfo region,<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>      ServerName srcServer, ServerName destServer) throws IOException {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    requirePermission(c, "move",<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>        region.getTable(), null, null, Action.ADMIN);<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>  }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  @Override<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>  public void preAssign(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, RegionInfo regionInfo)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      throws IOException {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    requirePermission(c, "assign",<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>        regionInfo.getTable(), null, null, Action.ADMIN);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>  }<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span><a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  @Override<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>  public void preUnassign(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, RegionInfo regionInfo,<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>      boolean force) throws IOException {<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    requirePermission(c, "unassign",<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>        regionInfo.getTable(), null, null, Action.ADMIN);<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>  @Override<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>  public void preRegionOffline(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c,<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      RegionInfo regionInfo) throws IOException {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    requirePermission(c, "regionOffline",<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>        regionInfo.getTable(), null, null, Action.ADMIN);<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>  }<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>  @Override<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>  public void preSetSplitOrMergeEnabled(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>      final boolean newValue, final MasterSwitchType switchType) throws IOException {<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    requirePermission(ctx, "setSplitOrMergeEnabled",<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>        Action.ADMIN);<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>  }<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span><a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>  @Override<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>  public void preBalance(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c)<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      throws IOException {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    requirePermission(c, "balance", Action.ADMIN);<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>  }<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span><a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>  @Override<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>  public void preBalanceSwitch(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c,<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      boolean newValue) throws IOException {<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    requirePermission(c, "balanceSwitch", Action.ADMIN);<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>  }<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span><a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>  @Override<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>  public void preShutdown(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c)<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      throws IOException {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    requirePermission(c, "shutdown", Action.ADMIN);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>  }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span><a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>  @Override<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>  public void preStopMaster(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c)<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      throws IOException {<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    requirePermission(c, "stopMaster", Action.ADMIN);<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>  }<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span><a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>  @Override<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>  public void postStartMaster(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      throws IOException {<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    try (Admin admin = ctx.getEnvironment().getConnection().getAdmin()) {<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>      if (!admin.tableExists(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        createACLTable(admin);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      } else {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        this.aclTabAvailable = true;<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      }<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>  }<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  /**<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>   * Create the ACL table<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>   * @throws IOException<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>   */<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>  private static void createACLTable(Admin admin) throws IOException {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    /** Table descriptor for ACL table */<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    ColumnFamilyDescriptor cfd =<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>        ColumnFamilyDescriptorBuilder.newBuilder(AccessControlLists.ACL_LIST_FAMILY).<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>        setMaxVersions(1).<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>        setInMemory(true).<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>        setBlockCacheEnabled(true).<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>        setBlocksize(8 * 1024).<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>        setBloomFilterType(BloomType.NONE).<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>        setScope(HConstants.REPLICATION_SCOPE_LOCAL).build();<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    TableDescriptor td =<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        TableDescriptorBuilder.newBuilder(AccessControlLists.ACL_TABLE_NAME).<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>          setColumnFamily(cfd).build();<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    admin.createTable(td);<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>  }<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span><a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>  @Override<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>  public void preSnapshot(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>      final SnapshotDescription snapshot, final TableDescriptor hTableDescriptor)<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      throws IOException {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    // Move this ACL check to SnapshotManager#checkPermissions as part of AC deprecation.<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    requirePermission(ctx, "snapshot " + snapshot.getName(),<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>        hTableDescriptor.getTableName(), null, null, Permission.Action.ADMIN);<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>  }<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span><a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>  @Override<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>  public void preListSnapshot(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>      final SnapshotDescription snapshot) throws IOException {<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    User user = getActiveUser(ctx);<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (SnapshotDescriptionUtils.isSnapshotOwner(snapshot, user)) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      // list it, if user is the owner of snapshot<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      AuthResult result = AuthResult.allow("listSnapshot " + snapshot.getName(),<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>          "Snapshot owner check allowed", user, null, null, null);<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      AccessChecker.logResult(result);<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    } else {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      accessChecker.requirePermission(user, "listSnapshot " + snapshot.getName(), null,<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>        Action.ADMIN);<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>    }<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>  }<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span><a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>  @Override<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>  public void preCloneSnapshot(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>      final SnapshotDescription snapshot, final TableDescriptor hTableDescriptor)<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>      throws IOException {<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    User user = getActiveUser(ctx);<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    if (SnapshotDescriptionUtils.isSnapshotOwner(snapshot, user)<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>        &amp;&amp; hTableDescriptor.getTableName().getNameAsString().equals(snapshot.getTable())) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>      // Snapshot owner is allowed to create a table with the same name as the snapshot he took<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      AuthResult result = AuthResult.allow("cloneSnapshot " + snapshot.getName(),<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>        "Snapshot owner check allowed", user, null, hTableDescriptor.getTableName(), null);<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>      AccessChecker.logResult(result);<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    } else {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>      accessChecker.requirePermission(user, "cloneSnapshot " + snapshot.getName(), null,<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>        Action.ADMIN);<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    }<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>  }<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>  @Override<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>  public void preRestoreSnapshot(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      final SnapshotDescription snapshot, final TableDescriptor hTableDescriptor)<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>      throws IOException {<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    User user = getActiveUser(ctx);<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    if (SnapshotDescriptionUtils.isSnapshotOwner(snapshot, user)) {<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>      accessChecker.requirePermission(user, "restoreSnapshot " + snapshot.getName(),<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>        hTableDescriptor.getTableName(), null, null, null, Permission.Action.ADMIN);<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>    } else {<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      accessChecker.requirePermission(user, "restoreSnapshot " + snapshot.getName(), null,<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>        Action.ADMIN);<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>  }<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  @Override<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>  public void preDeleteSnapshot(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      final SnapshotDescription snapshot) throws IOException {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    User user = getActiveUser(ctx);<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>    if (SnapshotDescriptionUtils.isSnapshotOwner(snapshot, user)) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>      // Snapshot owner is allowed to delete the snapshot<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      AuthResult result = AuthResult.allow("deleteSnapshot " + snapshot.getName(),<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>          "Snapshot owner check allowed", user, null, null, null);<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>      AccessChecker.logResult(result);<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>    } else {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      accessChecker.requirePermission(user, "deleteSnapshot " + snapshot.getName(), null,<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>        Action.ADMIN);<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>    }<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>  }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span><a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>  @Override<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>  public void preCreateNamespace(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      NamespaceDescriptor ns) throws IOException {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>    requireGlobalPermission(ctx, "createNamespace",<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>        Action.ADMIN, ns.getName());<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>  }<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span><a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>  @Override<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>  public void preDeleteNamespace(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx, String namespace)<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      throws IOException {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>    requireGlobalPermission(ctx, "deleteNamespace",<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>        Action.ADMIN, namespace);<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>  }<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span><a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>  @Override<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>  public void postDeleteNamespace(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      final String namespace) throws IOException {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>    final Configuration conf = ctx.getEnvironment().getConfiguration();<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>    User.runAsLoginUser(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      @Override<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      public Void run() throws Exception {<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>        try (Table table = ctx.getEnvironment().getConnection().<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>            getTable(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>          AccessControlLists.removeNamespacePermissions(conf, namespace, table);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        return null;<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>    });<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    getAuthManager().getZKPermissionWatcher().deleteNamespaceACLNode(namespace);<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    LOG.info(namespace + " entry deleted in " + AccessControlLists.ACL_TABLE_NAME + " table.");<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  }<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span><a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>  @Override<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>  public void preModifyNamespace(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      NamespaceDescriptor currentNsDesc, NamespaceDescriptor newNsDesc) throws IOException {<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    // We require only global permission so that<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    // a user with NS admin cannot altering namespace configurations. i.e. namespace quota<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    requireGlobalPermission(ctx, "modifyNamespace", Action.ADMIN, newNsDesc.getName());<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>  }<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span><a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>  @Override<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>  public void preGetNamespaceDescriptor(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    String namespace) throws IOException {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    requireNamespacePermission(ctx, "getNamespaceDescriptor", namespace, Action.ADMIN);<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>  }<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span><a name="line.1254"></a>
-<span class

<TRUNCATED>

[09/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html
new file mode 100644
index 0000000..b308bce
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html
@@ -0,0 +1,307 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestRegionAssignedToMultipleRegionServers.ServerManagerForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestRegionAssignedToMultipleRegionServers.ServerManagerForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.ServerManager">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master.assignment</div>
+<h2 title="Class TestRegionAssignedToMultipleRegionServers.ServerManagerForTest" class="title">Class TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.ServerManager</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.70">TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</a>
+extends org.apache.hadoop.hbase.master.ServerManager</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.ServerManager">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.ServerManager</h3>
+<code>FLUSHEDSEQUENCEID_FLUSHER_INTERVAL, FLUSHEDSEQUENCEID_FLUSHER_INTERVAL_DEFAULT, PERSIST_FLUSHEDSEQUENCEID, PERSIST_FLUSHEDSEQUENCEID_DEFAULT, WAIT_ON_REGIONSERVERS_INTERVAL, WAIT_ON_REGIONSERVERS_MAXTOSTART, WAIT_ON_REGIONSERVERS_MINTOSTART, WAIT_ON_REGIONSERVERS_TIMEOUT</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html#ServerManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">ServerManagerForTest</a></span>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.ServerName&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html#createDestinationServersList--">createDestinationServersList</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.ServerManager">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.ServerManager</h3>
+<code>addServerToDrainList, areDeadServersInProgress, closeRegionSilentlyAndWait, countOfRegionServers, createDestinationServersList, expireServer, getAverageLoad, getDeadServers, getDrainingServersList, getFlushedSequenceIdByRegion, getInfoPort, getLastFlushedSequenceId, getLoad, getOnlineServers, getOnlineServersList, getOnlineServersListWithPredicator, getRsAdmin, getVersion, getVersionNumber, isClusterShutdown, isRegionInServerManagerStates, isServerDead, isServerOnline, loadLastFlushedSequenceIds, moveFromOnlineToDeadServers, regionServerReport, registerListener, removeDeletedRegionFromLoadedFlushedSequenceIds, removeRegion, removeRegions, removeServerFromDrainList, sendRegionWarmup, shutdownCluster, startChore, stop, unregisterListener, waitForRegionServers</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="ServerManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ServerManagerForTest</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html#line.72">ServerManagerForTest</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="createDestinationServersList--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>createDestinationServersList</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.ServerName&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html#line.77">createDestinationServersList</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>createDestinationServersList</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.master.ServerManager</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.ServerManager">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html
new file mode 100644
index 0000000..2f74df2
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html
@@ -0,0 +1,467 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestRegionAssignedToMultipleRegionServers (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestRegionAssignedToMultipleRegionServers (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":9,"i2":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRegionAssignedToMultipleRegionServers.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master.assignment</div>
+<h2 title="Class TestRegionAssignedToMultipleRegionServers" class="title">Class TestRegionAssignedToMultipleRegionServers</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.56">TestRegionAssignedToMultipleRegionServers</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.HMasterForTest</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#ARRIVE">ARRIVE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#CF">CF</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.ServerName&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#EXCLUDE_SERVERS">EXCLUDE_SERVERS</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#HALT">HALT</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#KILL">KILL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.TableName</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#NAME">NAME</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#TestRegionAssignedToMultipleRegionServers--">TestRegionAssignedToMultipleRegionServers</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#setUp--">setUp</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#tearDown--">tearDown</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#test--">test</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="CLASS_RULE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CLASS_RULE</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.59">CLASS_RULE</a></pre>
+</li>
+</ul>
+<a name="EXCLUDE_SERVERS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>EXCLUDE_SERVERS</h4>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.ServerName&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.62">EXCLUDE_SERVERS</a></pre>
+</li>
+</ul>
+<a name="HALT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>HALT</h4>
+<pre>private static&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.64">HALT</a></pre>
+</li>
+</ul>
+<a name="KILL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>KILL</h4>
+<pre>private static&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.66">KILL</a></pre>
+</li>
+</ul>
+<a name="ARRIVE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ARRIVE</h4>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.68">ARRIVE</a></pre>
+</li>
+</ul>
+<a name="UTIL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>UTIL</h4>
+<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.129">UTIL</a></pre>
+</li>
+</ul>
+<a name="NAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NAME</h4>
+<pre>private static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.131">NAME</a></pre>
+</li>
+</ul>
+<a name="CF">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CF</h4>
+<pre>private static&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.133">CF</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestRegionAssignedToMultipleRegionServers--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestRegionAssignedToMultipleRegionServers</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.56">TestRegionAssignedToMultipleRegionServers</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="setUp--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUp</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.136">setUp</a>()
+                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="tearDown--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tearDown</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.146">tearDown</a>()
+                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="test--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>test</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#line.151">test</a>()
+          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRegionAssignedToMultipleRegionServers.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html
index 3aa0ba9..fdcd071 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionBypass.StallingAssignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -395,7 +395,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionBypass.StallingAssignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html
new file mode 100644
index 0000000..07d6133
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html
new file mode 100644
index 0000000..9ec5d42
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.HMasterForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.HMasterForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.HMasterForTest" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.HMasterForTest</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.HMasterForTest</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html
new file mode 100644
index 0000000..326e22e
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.ServerManagerForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.ServerManagerForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.ServerManagerForTest" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.html
new file mode 100644
index 0000000..a0f40d6
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestRegionAssignedToMultipleRegionServers.html" target="_top">Frames</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
index e9ea8ea..b260ebe 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
@@ -34,6 +34,10 @@
 <li><a href="TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestMasterAbortWhileMergingTable.MergeRegionObserver</a></li>
 <li><a href="TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestMergeTableRegionsProcedure</a></li>
 <li><a href="TestModifyTableWhileMerging.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestModifyTableWhileMerging</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionAssignedToMultipleRegionServers</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionAssignedToMultipleRegionServers.HMasterForTest</a></li>
+<li><a href="TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</a></li>
 <li><a href="TestRegionBypass.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionBypass</a></li>
 <li><a href="TestRegionBypass.StallingAssignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionBypass.StallingAssignProcedure</a></li>
 <li><a href="TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionMoveAndAbandon</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
index daf9cdc..4be3c2a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
@@ -173,6 +173,22 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.HMasterForTest</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionBypass</a></td>
 <td class="colLast">
 <div class="block">Tests bypass on a region assign/unassign</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
index 54ea0d1..4fba670 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
@@ -83,6 +83,7 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.AssignmentManager (implements org.apache.hadoop.hbase.master.ServerListener)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.AssignmentManagerForTest</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</span></a></li>
 </ul>
@@ -94,6 +95,7 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.HMaster (implements org.apache.hadoop.hbase.master.MasterServices)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers.HMasterForTest</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.HMasterForTest</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry.HMasterForTest</span></a></li>
 </ul>
@@ -143,6 +145,11 @@
 </li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.master.ServerManager
+<ul>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestAssignmentManagerBase</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAMAssignWithRandExec.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestAMAssignWithRandExec</span></a></li>
@@ -173,6 +180,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestMasterAbortWhileMergingTable.MergeRegionObserver</span></a> (implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.MasterObserver)</li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestMergeTableRegionsProcedure</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestModifyTableWhileMerging</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionBypass</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionMoveAndAbandon</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionReplicaSplit.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionReplicaSplit</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
index 56726ae..de3dc6f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -579,15 +579,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
index 28973e0..a1c9b1d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
@@ -81,14 +81,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
+<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
 </ul>
 </li>
-<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
+<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.procedure.ProcedureManager


[13/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html
index cbae28e..aec5920 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html
@@ -64,825 +64,827 @@
 <span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.56"></a>
 <span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.57"></a>
 <span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.security.access.AccessControlClient;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.security.access.ShadedAccessControlUtil;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.security.access.TablePermission;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.io.IOUtils;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>/**<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * Helper to Restore/Clone a Snapshot<a name="line.75"></a>
-<span class="sourceLineNo">076</span> *<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * &lt;p&gt;The helper assumes that a table is already created, and by calling restore()<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * the content present in the snapshot will be restored as the new content of the table.<a name="line.78"></a>
-<span class="sourceLineNo">079</span> *<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * &lt;p&gt;Clone from Snapshot: If the target table is empty, the restore operation<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * is just a "clone operation", where the only operations are:<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * &lt;ul&gt;<a name="line.82"></a>
-<span class="sourceLineNo">083</span> *  &lt;li&gt;for each region in the snapshot create a new region<a name="line.83"></a>
-<span class="sourceLineNo">084</span> *    (note that the region will have a different name, since the encoding contains the table name)<a name="line.84"></a>
-<span class="sourceLineNo">085</span> *  &lt;li&gt;for each file in the region create a new HFileLink to point to the original file.<a name="line.85"></a>
-<span class="sourceLineNo">086</span> *  &lt;li&gt;restore the logs, if any<a name="line.86"></a>
-<span class="sourceLineNo">087</span> * &lt;/ul&gt;<a name="line.87"></a>
-<span class="sourceLineNo">088</span> *<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * &lt;p&gt;Restore from Snapshot:<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * &lt;ul&gt;<a name="line.90"></a>
-<span class="sourceLineNo">091</span> *  &lt;li&gt;for each region in the table verify which are available in the snapshot and which are not<a name="line.91"></a>
-<span class="sourceLineNo">092</span> *    &lt;ul&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span> *    &lt;li&gt;if the region is not present in the snapshot, remove it.<a name="line.93"></a>
-<span class="sourceLineNo">094</span> *    &lt;li&gt;if the region is present in the snapshot<a name="line.94"></a>
-<span class="sourceLineNo">095</span> *      &lt;ul&gt;<a name="line.95"></a>
-<span class="sourceLineNo">096</span> *      &lt;li&gt;for each file in the table region verify which are available in the snapshot<a name="line.96"></a>
-<span class="sourceLineNo">097</span> *        &lt;ul&gt;<a name="line.97"></a>
-<span class="sourceLineNo">098</span> *          &lt;li&gt;if the hfile is not present in the snapshot, remove it<a name="line.98"></a>
-<span class="sourceLineNo">099</span> *          &lt;li&gt;if the hfile is present, keep it (nothing to do)<a name="line.99"></a>
-<span class="sourceLineNo">100</span> *        &lt;/ul&gt;<a name="line.100"></a>
-<span class="sourceLineNo">101</span> *      &lt;li&gt;for each file in the snapshot region but not in the table<a name="line.101"></a>
-<span class="sourceLineNo">102</span> *        &lt;ul&gt;<a name="line.102"></a>
-<span class="sourceLineNo">103</span> *          &lt;li&gt;create a new HFileLink that point to the original file<a name="line.103"></a>
-<span class="sourceLineNo">104</span> *        &lt;/ul&gt;<a name="line.104"></a>
-<span class="sourceLineNo">105</span> *      &lt;/ul&gt;<a name="line.105"></a>
-<span class="sourceLineNo">106</span> *    &lt;/ul&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span> *  &lt;li&gt;for each region in the snapshot not present in the current table state<a name="line.107"></a>
-<span class="sourceLineNo">108</span> *    &lt;ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span> *    &lt;li&gt;create a new region and for each file in the region create a new HFileLink<a name="line.109"></a>
-<span class="sourceLineNo">110</span> *      (This is the same as the clone operation)<a name="line.110"></a>
-<span class="sourceLineNo">111</span> *    &lt;/ul&gt;<a name="line.111"></a>
-<span class="sourceLineNo">112</span> *  &lt;li&gt;restore the logs, if any<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * &lt;/ul&gt;<a name="line.113"></a>
-<span class="sourceLineNo">114</span> */<a name="line.114"></a>
-<span class="sourceLineNo">115</span>@InterfaceAudience.Private<a name="line.115"></a>
-<span class="sourceLineNo">116</span>public class RestoreSnapshotHelper {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private static final Logger LOG = LoggerFactory.getLogger(RestoreSnapshotHelper.class);<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private final Map&lt;byte[], byte[]&gt; regionsMap = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private final Map&lt;String, Pair&lt;String, String&gt; &gt; parentsMap = new HashMap&lt;&gt;();<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private final ForeignExceptionDispatcher monitor;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private final MonitoredTask status;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private final SnapshotManifest snapshotManifest;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private final SnapshotDescription snapshotDesc;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private final TableName snapshotTable;<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private final TableDescriptor tableDesc;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  private final Path rootDir;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private final Path tableDir;<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private final Configuration conf;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  private final FileSystem fs;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  private final boolean createBackRefs;<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public RestoreSnapshotHelper(final Configuration conf,<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      final FileSystem fs,<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      final SnapshotManifest manifest,<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      final TableDescriptor tableDescriptor,<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      final Path rootDir,<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      final ForeignExceptionDispatcher monitor,<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      final MonitoredTask status) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    this(conf, fs, manifest, tableDescriptor, rootDir, monitor, status, true);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public RestoreSnapshotHelper(final Configuration conf,<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      final FileSystem fs,<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      final SnapshotManifest manifest,<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      final TableDescriptor tableDescriptor,<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      final Path rootDir,<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      final ForeignExceptionDispatcher monitor,<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      final MonitoredTask status,<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      final boolean createBackRefs)<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    this.fs = fs;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    this.conf = conf;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    this.snapshotManifest = manifest;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    this.snapshotDesc = manifest.getSnapshotDescription();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    this.snapshotTable = TableName.valueOf(snapshotDesc.getTable());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    this.tableDesc = tableDescriptor;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    this.rootDir = rootDir;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.tableDir = FSUtils.getTableDir(rootDir, tableDesc.getTableName());<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    this.monitor = monitor;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    this.status = status;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    this.createBackRefs = createBackRefs;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * Restore the on-disk table to a specified snapshot state.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @return the set of regions touched by the restore operation<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  public RestoreMetaChanges restoreHdfsRegions() throws IOException {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    ThreadPoolExecutor exec = SnapshotManifest.createExecutor(conf, "RestoreSnapshot");<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    try {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      return restoreHdfsRegions(exec);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    } finally {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      exec.shutdown();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  private RestoreMetaChanges restoreHdfsRegions(final ThreadPoolExecutor exec) throws IOException {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    LOG.info("starting restore table regions using snapshot=" + snapshotDesc);<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>    Map&lt;String, SnapshotRegionManifest&gt; regionManifests = snapshotManifest.getRegionManifestsMap();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    if (regionManifests == null) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      LOG.warn("Nothing to restore. Snapshot " + snapshotDesc + " looks empty");<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return null;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>    RestoreMetaChanges metaChanges = new RestoreMetaChanges(tableDesc, parentsMap);<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>    // Take a copy of the manifest.keySet() since we are going to modify<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // this instance, by removing the regions already present in the restore dir.<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    Set&lt;String&gt; regionNames = new HashSet&lt;&gt;(regionManifests.keySet());<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    List&lt;RegionInfo&gt; tableRegions = getTableRegions();<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>    RegionInfo mobRegion = MobUtils.getMobRegionInfo(snapshotManifest.getTableDescriptor()<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        .getTableName());<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    if (tableRegions != null) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // restore the mob region in case<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      if (regionNames.contains(mobRegion.getEncodedName())) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        monitor.rethrowException();<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        status.setStatus("Restoring mob region...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        List&lt;RegionInfo&gt; mobRegions = new ArrayList&lt;&gt;(1);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        mobRegions.add(mobRegion);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        restoreHdfsMobRegions(exec, regionManifests, mobRegions);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        regionNames.remove(mobRegion.getEncodedName());<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        status.setStatus("Finished restoring mob region.");<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    if (regionNames.contains(mobRegion.getEncodedName())) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      // add the mob region<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      monitor.rethrowException();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      status.setStatus("Cloning mob region...");<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      cloneHdfsMobRegion(regionManifests, mobRegion);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      regionNames.remove(mobRegion.getEncodedName());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      status.setStatus("Finished cloning mob region.");<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>    // Identify which region are still available and which not.<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    // NOTE: we rely upon the region name as: "table name, start key, end key"<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    if (tableRegions != null) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      monitor.rethrowException();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      for (RegionInfo regionInfo: tableRegions) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        String regionName = regionInfo.getEncodedName();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        if (regionNames.contains(regionName)) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          LOG.info("region to restore: " + regionName);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          regionNames.remove(regionName);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          metaChanges.addRegionToRestore(ProtobufUtil.toRegionInfo(regionManifests.get(regionName)<a name="line.232"></a>
-<span class="sourceLineNo">233</span>              .getRegionInfo()));<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        } else {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          LOG.info("region to remove: " + regionName);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          metaChanges.addRegionToRemove(regionInfo);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    // Regions to Add: present in the snapshot but not in the current table<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    List&lt;RegionInfo&gt; regionsToAdd = new ArrayList&lt;&gt;(regionNames.size());<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    if (regionNames.size() &gt; 0) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      monitor.rethrowException();<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      for (String regionName: regionNames) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        LOG.info("region to add: " + regionName);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        regionsToAdd.add(ProtobufUtil.toRegionInfo(regionManifests.get(regionName)<a name="line.247"></a>
-<span class="sourceLineNo">248</span>            .getRegionInfo()));<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    // Create new regions cloning from the snapshot<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    // HBASE-19980: We need to call cloneHdfsRegions() before restoreHdfsRegions() because<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // regionsMap is constructed in cloneHdfsRegions() and it can be used in restoreHdfsRegions().<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    monitor.rethrowException();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    status.setStatus("Cloning regions...");<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    RegionInfo[] clonedRegions = cloneHdfsRegions(exec, regionManifests, regionsToAdd);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    metaChanges.setNewRegions(clonedRegions);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    status.setStatus("Finished cloning regions.");<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // Restore regions using the snapshot data<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    monitor.rethrowException();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    status.setStatus("Restoring table regions...");<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    restoreHdfsRegions(exec, regionManifests, metaChanges.getRegionsToRestore());<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    status.setStatus("Finished restoring all table regions.");<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    // Remove regions from the current table<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    monitor.rethrowException();<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    status.setStatus("Starting to delete excess regions from table");<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    removeHdfsRegions(exec, metaChanges.getRegionsToRemove());<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    status.setStatus("Finished deleting excess regions from table.");<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    LOG.info("finishing restore table regions using snapshot=" + snapshotDesc);<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    return metaChanges;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * Describe the set of operations needed to update hbase:meta after restore.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  public static class RestoreMetaChanges {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    private final Map&lt;String, Pair&lt;String, String&gt; &gt; parentsMap;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    private final TableDescriptor htd;<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>    private List&lt;RegionInfo&gt; regionsToRestore = null;<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    private List&lt;RegionInfo&gt; regionsToRemove = null;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    private List&lt;RegionInfo&gt; regionsToAdd = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>    public RestoreMetaChanges(TableDescriptor htd, Map&lt;String, Pair&lt;String, String&gt; &gt; parentsMap) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      this.parentsMap = parentsMap;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      this.htd = htd;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    public TableDescriptor getTableDescriptor() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      return htd;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>     * Returns the map of parent-children_pair.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>     * @return the map<a name="line.300"></a>
-<span class="sourceLineNo">301</span>     */<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    public Map&lt;String, Pair&lt;String, String&gt;&gt; getParentToChildrenPairMap() {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      return this.parentsMap;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>    /**<a name="line.306"></a>
-<span class="sourceLineNo">307</span>     * @return true if there're new regions<a name="line.307"></a>
-<span class="sourceLineNo">308</span>     */<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    public boolean hasRegionsToAdd() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return this.regionsToAdd != null &amp;&amp; this.regionsToAdd.size() &gt; 0;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>    /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>     * Returns the list of new regions added during the on-disk restore.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>     * The caller is responsible to add the regions to META.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>     * e.g MetaTableAccessor.addRegionsToMeta(...)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>     * @return the list of regions to add to META<a name="line.317"></a>
-<span class="sourceLineNo">318</span>     */<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    public List&lt;RegionInfo&gt; getRegionsToAdd() {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      return this.regionsToAdd;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>    /**<a name="line.323"></a>
-<span class="sourceLineNo">324</span>     * @return true if there're regions to restore<a name="line.324"></a>
-<span class="sourceLineNo">325</span>     */<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public boolean hasRegionsToRestore() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      return this.regionsToRestore != null &amp;&amp; this.regionsToRestore.size() &gt; 0;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>    /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>     * Returns the list of 'restored regions' during the on-disk restore.<a name="line.331"></a>
-<span class="sourceLineNo">332</span>     * The caller is responsible to add the regions to hbase:meta if not present.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>     * @return the list of regions restored<a name="line.333"></a>
-<span class="sourceLineNo">334</span>     */<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    public List&lt;RegionInfo&gt; getRegionsToRestore() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return this.regionsToRestore;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>    /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>     * @return true if there're regions to remove<a name="line.340"></a>
-<span class="sourceLineNo">341</span>     */<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    public boolean hasRegionsToRemove() {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      return this.regionsToRemove != null &amp;&amp; this.regionsToRemove.size() &gt; 0;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    /**<a name="line.346"></a>
-<span class="sourceLineNo">347</span>     * Returns the list of regions removed during the on-disk restore.<a name="line.347"></a>
-<span class="sourceLineNo">348</span>     * The caller is responsible to remove the regions from META.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     * e.g. MetaTableAccessor.deleteRegions(...)<a name="line.349"></a>
-<span class="sourceLineNo">350</span>     * @return the list of regions to remove from META<a name="line.350"></a>
-<span class="sourceLineNo">351</span>     */<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    public List&lt;RegionInfo&gt; getRegionsToRemove() {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      return this.regionsToRemove;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    void setNewRegions(final RegionInfo[] hris) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      if (hris != null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        regionsToAdd = Arrays.asList(hris);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      } else {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        regionsToAdd = null;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      }<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    void addRegionToRemove(final RegionInfo hri) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      if (regionsToRemove == null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        regionsToRemove = new LinkedList&lt;&gt;();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      regionsToRemove.add(hri);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    void addRegionToRestore(final RegionInfo hri) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      if (regionsToRestore == null) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        regionsToRestore = new LinkedList&lt;&gt;();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      regionsToRestore.add(hri);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    public void updateMetaParentRegions(Connection connection,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        final List&lt;RegionInfo&gt; regionInfos) throws IOException {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      if (regionInfos == null || parentsMap.isEmpty()) return;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>      // Extract region names and offlined regions<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      Map&lt;String, RegionInfo&gt; regionsByName = new HashMap&lt;&gt;(regionInfos.size());<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      List&lt;RegionInfo&gt; parentRegions = new LinkedList&lt;&gt;();<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      for (RegionInfo regionInfo: regionInfos) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        if (regionInfo.isSplitParent()) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>          parentRegions.add(regionInfo);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        } else {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          regionsByName.put(regionInfo.getEncodedName(), regionInfo);<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>      // Update Offline parents<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      for (RegionInfo regionInfo: parentRegions) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        Pair&lt;String, String&gt; daughters = parentsMap.get(regionInfo.getEncodedName());<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (daughters == null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // The snapshot contains an unreferenced region.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          // It will be removed by the CatalogJanitor.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          LOG.warn("Skip update of unreferenced offline parent: " + regionInfo);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          continue;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>        // One side of the split is already compacted<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        if (daughters.getSecond() == null) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          daughters.setSecond(daughters.getFirst());<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>        LOG.debug("Update splits parent " + regionInfo.getEncodedName() + " -&gt; " + daughters);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        MetaTableAccessor.addSplitsToParent(connection, regionInfo,<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          regionsByName.get(daughters.getFirst()),<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          regionsByName.get(daughters.getSecond()));<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * Remove specified regions from the file-system, using the archiver.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   */<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private void removeHdfsRegions(final ThreadPoolExecutor exec, final List&lt;RegionInfo&gt; regions)<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      throws IOException {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    if (regions == null || regions.isEmpty()) return;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    ModifyRegionUtils.editRegions(exec, regions, new ModifyRegionUtils.RegionEditTask() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      @Override<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      public void editRegion(final RegionInfo hri) throws IOException {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        HFileArchiver.archiveRegion(conf, fs, hri);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    });<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>  /**<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   * Restore specified regions by restoring content to the snapshot state.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   */<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private void restoreHdfsRegions(final ThreadPoolExecutor exec,<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      final Map&lt;String, SnapshotRegionManifest&gt; regionManifests,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    if (regions == null || regions.isEmpty()) return;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    ModifyRegionUtils.editRegions(exec, regions, new ModifyRegionUtils.RegionEditTask() {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      public void editRegion(final RegionInfo hri) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        restoreRegion(hri, regionManifests.get(hri.getEncodedName()));<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    });<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  /**<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * Restore specified mob regions by restoring content to the snapshot state.<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   */<a name="line.447"></a>
-<span class="sourceLineNo">448</span>  private void restoreHdfsMobRegions(final ThreadPoolExecutor exec,<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      final Map&lt;String, SnapshotRegionManifest&gt; regionManifests,<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (regions == null || regions.isEmpty()) return;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    ModifyRegionUtils.editRegions(exec, regions, new ModifyRegionUtils.RegionEditTask() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      public void editRegion(final RegionInfo hri) throws IOException {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        restoreMobRegion(hri, regionManifests.get(hri.getEncodedName()));<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    });<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private Map&lt;String, List&lt;SnapshotRegionManifest.StoreFile&gt;&gt; getRegionHFileReferences(<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      final SnapshotRegionManifest manifest) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    Map&lt;String, List&lt;SnapshotRegionManifest.StoreFile&gt;&gt; familyMap =<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      new HashMap&lt;&gt;(manifest.getFamilyFilesCount());<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (SnapshotRegionManifest.FamilyFiles familyFiles: manifest.getFamilyFilesList()) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      familyMap.put(familyFiles.getFamilyName().toStringUtf8(),<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        new ArrayList&lt;&gt;(familyFiles.getStoreFilesList()));<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return familyMap;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>  /**<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * Restore region by removing files not in the snapshot<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * and adding the missing ones from the snapshot.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  private void restoreRegion(final RegionInfo regionInfo,<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      final SnapshotRegionManifest regionManifest) throws IOException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    restoreRegion(regionInfo, regionManifest, new Path(tableDir, regionInfo.getEncodedName()));<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * Restore mob region by removing files not in the snapshot<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * and adding the missing ones from the snapshot.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   */<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  private void restoreMobRegion(final RegionInfo regionInfo,<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      final SnapshotRegionManifest regionManifest) throws IOException {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    if (regionManifest == null) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      return;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    restoreRegion(regionInfo, regionManifest,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      MobUtils.getMobRegionPath(conf, tableDesc.getTableName()));<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  }<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>  /**<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * Restore region by removing files not in the snapshot<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * and adding the missing ones from the snapshot.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  private void restoreRegion(final RegionInfo regionInfo,<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      final SnapshotRegionManifest regionManifest, Path regionDir) throws IOException {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    Map&lt;String, List&lt;SnapshotRegionManifest.StoreFile&gt;&gt; snapshotFiles =<a name="line.499"></a>
-<span class="sourceLineNo">500</span>                getRegionHFileReferences(regionManifest);<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    String tableName = tableDesc.getTableName().getNameAsString();<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span>    // Restore families present in the table<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    for (Path familyDir: FSUtils.getFamilyDirs(fs, regionDir)) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      byte[] family = Bytes.toBytes(familyDir.getName());<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      Set&lt;String&gt; familyFiles = getTableRegionFamilyFiles(familyDir);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      List&lt;SnapshotRegionManifest.StoreFile&gt; snapshotFamilyFiles =<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          snapshotFiles.remove(familyDir.getName());<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      if (snapshotFamilyFiles != null) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>        List&lt;SnapshotRegionManifest.StoreFile&gt; hfilesToAdd = new ArrayList&lt;&gt;();<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        for (SnapshotRegionManifest.StoreFile storeFile: snapshotFamilyFiles) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          if (familyFiles.contains(storeFile.getName())) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            // HFile already present<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            familyFiles.remove(storeFile.getName());<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          } else {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>            // HFile missing<a name="line.517"></a>
-<span class="sourceLineNo">518</span>            hfilesToAdd.add(storeFile);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>        // Remove hfiles not present in the snapshot<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        for (String hfileName: familyFiles) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          Path hfile = new Path(familyDir, hfileName);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>          LOG.trace("Removing hfile=" + hfileName +<a name="line.525"></a>
-<span class="sourceLineNo">526</span>            " from region=" + regionInfo.getEncodedName() + " table=" + tableName);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          HFileArchiver.archiveStoreFile(conf, fs, regionInfo, tableDir, family, hfile);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>        // Restore Missing files<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        for (SnapshotRegionManifest.StoreFile storeFile: hfilesToAdd) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          LOG.debug("Adding HFileLink " + storeFile.getName() +<a name="line.532"></a>
-<span class="sourceLineNo">533</span>            " to region=" + regionInfo.getEncodedName() + " table=" + tableName);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>          restoreStoreFile(familyDir, regionInfo, storeFile, createBackRefs);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        }<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } else {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        // Family doesn't exists in the snapshot<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        LOG.trace("Removing family=" + Bytes.toString(family) +<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          " from region=" + regionInfo.getEncodedName() + " table=" + tableName);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        HFileArchiver.archiveFamilyByFamilyDir(fs, conf, regionInfo, familyDir, family);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        fs.delete(familyDir, true);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    // Add families not present in the table<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    for (Map.Entry&lt;String, List&lt;SnapshotRegionManifest.StoreFile&gt;&gt; familyEntry:<a name="line.546"></a>
-<span class="sourceLineNo">547</span>                                                                      snapshotFiles.entrySet()) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      Path familyDir = new Path(regionDir, familyEntry.getKey());<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      if (!fs.mkdirs(familyDir)) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        throw new IOException("Unable to create familyDir=" + familyDir);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>      for (SnapshotRegionManifest.StoreFile storeFile: familyEntry.getValue()) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        LOG.trace("Adding HFileLink " + storeFile.getName() + " to table=" + tableName);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        restoreStoreFile(familyDir, regionInfo, storeFile, createBackRefs);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * @return The set of files in the specified family directory.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   */<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  private Set&lt;String&gt; getTableRegionFamilyFiles(final Path familyDir) throws IOException {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    FileStatus[] hfiles = FSUtils.listStatus(fs, familyDir);<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    if (hfiles == null) return Collections.emptySet();<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Set&lt;String&gt; familyFiles = new HashSet&lt;&gt;(hfiles.length);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    for (int i = 0; i &lt; hfiles.length; ++i) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      String hfileName = hfiles[i].getPath().getName();<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      familyFiles.add(hfileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return familyFiles;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  /**<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * Clone specified regions. For each region create a new region<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * and create a HFileLink for each hfile.<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  private RegionInfo[] cloneHdfsRegions(final ThreadPoolExecutor exec,<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      final Map&lt;String, SnapshotRegionManifest&gt; regionManifests,<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    if (regions == null || regions.isEmpty()) return null;<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>    final Map&lt;String, RegionInfo&gt; snapshotRegions = new HashMap&lt;&gt;(regions.size());<a name="line.585"></a>
-<span class="sourceLineNo">586</span><a name="line.586"></a>
-<span class="sourceLineNo">587</span>    // clone region info (change embedded tableName with the new one)<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    RegionInfo[] clonedRegionsInfo = new RegionInfo[regions.size()];<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    for (int i = 0; i &lt; clonedRegionsInfo.length; ++i) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      // clone the region info from the snapshot region info<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      RegionInfo snapshotRegionInfo = regions.get(i);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      clonedRegionsInfo[i] = cloneRegionInfo(snapshotRegionInfo);<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>      // add the region name mapping between snapshot and cloned<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      String snapshotRegionName = snapshotRegionInfo.getEncodedName();<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      String clonedRegionName = clonedRegionsInfo[i].getEncodedName();<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      regionsMap.put(Bytes.toBytes(snapshotRegionName), Bytes.toBytes(clonedRegionName));<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      LOG.info("clone region=" + snapshotRegionName + " as " + clonedRegionName);<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // Add mapping between cloned region name and snapshot region info<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      snapshotRegions.put(clonedRegionName, snapshotRegionInfo);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    // create the regions on disk<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    ModifyRegionUtils.createRegions(exec, conf, rootDir,<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      tableDesc, clonedRegionsInfo, new ModifyRegionUtils.RegionFillTask() {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        @Override<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        public void fillRegion(final HRegion region) throws IOException {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>          RegionInfo snapshotHri = snapshotRegions.get(region.getRegionInfo().getEncodedName());<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          cloneRegion(region, snapshotHri, regionManifests.get(snapshotHri.getEncodedName()));<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      });<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span>    return clonedRegionsInfo;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>  /**<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * Clone the mob region. For the region create a new region<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * and create a HFileLink for each hfile.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   */<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  private void cloneHdfsMobRegion(final Map&lt;String, SnapshotRegionManifest&gt; regionManifests,<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      final RegionInfo region) throws IOException {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    // clone region info (change embedded tableName with the new one)<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    Path clonedRegionPath = MobUtils.getMobRegionPath(conf, tableDesc.getTableName());<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    cloneRegion(clonedRegionPath, region, regionManifests.get(region.getEncodedName()));<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>  /**<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * Clone region directory content from the snapshot info.<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   *<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * Each region is encoded with the table name, so the cloned region will have<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * a different region name.<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   *<a name="line.633"></a>
-<span class="sourceLineNo">634</span>   * Instead of copying the hfiles a HFileLink is created.<a name="line.634"></a>
-<span class="sourceLineNo">635</span>   *<a name="line.635"></a>
-<span class="sourceLineNo">636</span>   * @param regionDir {@link Path} cloned dir<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * @param snapshotRegionInfo<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   */<a name="line.638"></a>
-<span class="sourceLineNo">639</span>  private void cloneRegion(final Path regionDir, final RegionInfo snapshotRegionInfo,<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      final SnapshotRegionManifest manifest) throws IOException {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    final String tableName = tableDesc.getTableName().getNameAsString();<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    for (SnapshotRegionManifest.FamilyFiles familyFiles: manifest.getFamilyFilesList()) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      Path familyDir = new Path(regionDir, familyFiles.getFamilyName().toStringUtf8());<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      for (SnapshotRegionManifest.StoreFile storeFile: familyFiles.getStoreFilesList()) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        LOG.info("Adding HFileLink " + storeFile.getName() + " to table=" + tableName);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        restoreStoreFile(familyDir, snapshotRegionInfo, storeFile, createBackRefs);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * Clone region directory content from the snapshot info.<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   *<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   * Each region is encoded with the table name, so the cloned region will have<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * a different region name.<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   *<a name="line.656"></a>
-<span class="sourceLineNo">657</span>   * Instead of copying the hfiles a HFileLink is created.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>   *<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   * @param region {@link HRegion} cloned<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * @param snapshotRegionInfo<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   */<a name="line.661"></a>
-<span class="sourceLineNo">662</span>  private void cloneRegion(final HRegion region, final RegionInfo snapshotRegionInfo,<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      final SnapshotRegionManifest manifest) throws IOException {<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    cloneRegion(new Path(tableDir, region.getRegionInfo().getEncodedName()), snapshotRegionInfo,<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      manifest);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>  /**<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   * Create a new {@link HFileLink} to reference the store file.<a name="line.669"></a>
-<span class="sourceLineNo">670</span>   * &lt;p&gt;The store file in the snapshot can be a simple hfile, an HFileLink or a reference.<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * &lt;ul&gt;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   *   &lt;li&gt;hfile: abc -&gt; table=region-abc<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   *   &lt;li&gt;reference: abc.1234 -&gt; table=region-abc.1234<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   *   &lt;li&gt;hfilelink: table=region-hfile -&gt; table=region-hfile<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * &lt;/ul&gt;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * @param familyDir destination directory for the store file<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   * @param regionInfo destination region info for the table<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param createBackRef - Whether back reference should be created. Defaults to true.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * @param storeFile store file name (can be a Reference, HFileLink or simple HFile)<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  private void restoreStoreFile(final Path familyDir, final RegionInfo regionInfo,<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      final SnapshotRegionManifest.StoreFile storeFile, final boolean createBackRef)<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          throws IOException {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    String hfileName = storeFile.getName();<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    if (HFileLink.isHFileLink(hfileName)) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      HFileLink.createFromHFileLink(conf, fs, familyDir, hfileName, createBackRef);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    } else if (StoreFileInfo.isReference(hfileName)) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      restoreReferenceFile(familyDir, regionInfo, storeFile);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    } else {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      HFileLink.create(conf, fs, familyDir, regionInfo, hfileName, createBackRef);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>  /**<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   * Create a new {@link Reference} as copy of the source one.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>   * &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>   * The source table looks like:<a name="line.697"></a>
-<span class="sourceLineNo">698</span>   *    1234/abc      (original file)<a name="line.698"></a>
-<span class="sourceLineNo">699</span>   *    5678/abc.1234 (reference file)<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   *<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * After the clone operation looks like:<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   *   wxyz/table=1234-abc<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   *   stuv/table=1234-abc.wxyz<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   *<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   * NOTE that the region name in the clone changes (md5 of regioninfo)<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * and the reference should reflect that change.<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   * &lt;/pre&gt;&lt;/blockquote&gt;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   * @param familyDir destination directory for the store file<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * @param regionInfo destination region info for the table<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @param storeFile reference file name<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  private void restoreReferenceFile(final Path familyDir, final RegionInfo regionInfo,<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      final SnapshotRegionManifest.StoreFile storeFile) throws IOException {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    String hfileName = storeFile.getName();<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>    // Extract the referred information (hfile name and parent region)<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    Path refPath =<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        StoreFileInfo.getReferredToFile(new Path(new Path(new Path(new Path(snapshotTable<a name="line.718"></a>
-<span class="sourceLineNo">719</span>            .getNamespaceAsString(), snapshotTable.getQualifierAsString()), regionInfo<a name="line.719"></a>
-<span class="sourceLineNo">720</span>            .getEncodedName()), familyDir.getName()), hfileName));<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    String snapshotRegionName = refPath.getParent().getParent().getName();<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    String fileName = refPath.getName();<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>    // The new reference should have the cloned region name as parent, if it is a clone.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    String clonedRegionName = Bytes.toString(regionsMap.get(Bytes.toBytes(snapshotRegionName)));<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    if (clonedRegionName == null) clonedRegionName = snapshotRegionName;<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span>    // The output file should be a reference link table=snapshotRegion-fileName.clonedRegionName<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    Path linkPath = null;<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    String refLink = fileName;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    if (!HFileLink.isHFileLink(fileName)) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      refLink = HFileLink.createHFileLinkName(snapshotTable, snapshotRegionName, fileName);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      linkPath = new Path(familyDir,<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        HFileLink.createHFileLinkName(snapshotTable, regionInfo.getEncodedName(), hfileName));<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    }<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    Path outPath = new Path(familyDir, refLink + '.' + clonedRegionName);<a name="line.737"></a>
-<span class="sourceLineNo">738</span><a name="line.738"></a>
-<span class="sourceLineNo">739</span>    // Create the new reference<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    if (storeFile.hasReference()) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      Reference reference = Reference.convert(storeFile.getReference());<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      reference.write(fs, outPath);<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    } else {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      InputStream in;<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      if (linkPath != null) {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        in = HFileLink.buildFromHFileLinkPattern(conf, linkPath).open(fs);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      } else {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>        linkPath = new Path(new Path(HRegion.getRegionDir(snapshotManifest.getSnapshotDir(),<a name="line.748"></a>
-<span class="sourceLineNo">749</span>                        regionInfo.getEncodedName()), familyDir.getName()), hfileName);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>        in = fs.open(linkPath);<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      }<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      OutputStream out = fs.create(outPath);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      IOUtils.copyBytes(in, out, conf);<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>    // Add the daughter region to the map<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    String regionName = Bytes.toString(regionsMap.get(regionInfo.getEncodedNameAsBytes()));<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    if (regionName == null) {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>      regionName = regionInfo.getEncodedName();<a name="line.759"></a>
-<span class="sourceLineNo">760</span>    }<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    LOG.debug("Restore reference " + regionName + " to " + clonedRegionName);<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    synchronized (parentsMap) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      Pair&lt;String, String&gt; daughters = parentsMap.get(clonedRegionName);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      if (daughters == null) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        // In case one side of the split is already compacted, regionName is put as both first and<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        // second of Pair<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        daughters = new Pair&lt;&gt;(regionName, regionName);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>        parentsMap.put(clonedRegionName, daughters);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      } else if (!regionName.equals(daughters.getFirst())) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>        daughters.setSecond(regionName);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      }<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    }<a name="line.772"></a>
-<span class="sourceLineNo">773</span>  }<a name="line.773"></a>
-<span class="sourceLineNo">774</span><a name="line.774"></a>
-<span class="sourceLineNo">775</span>  /**<a name="line.775"></a>
-<span class="sourceLineNo">776</span>   * Create a new {@link RegionInfo} from the snapshot region info.<a name="line.776"></a>
-<span class="sourceLineNo">777</span>   * Keep the same startKey, endKey, regionId and split information but change<a name="line.777"></a>
-<span class="sourceLineNo">778</span>   * the table name.<a name="line.778"></a>
-<span class="sourceLineNo">779</span>   *<a name="line.779"></a>
-<span class="sourceLineNo">780</span>   * @param snapshotRegionInfo Info for region to clone.<a name="line.780"></a>
-<span class="sourceLineNo">781</span>   * @return the new HRegion instance<a name="line.781"></a>
-<span class="sourceLineNo">782</span>   */<a name="line.782"></a>
-<span class="sourceLineNo">783</span>  public RegionInfo cloneRegionInfo(final RegionInfo snapshotRegionInfo) {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    return cloneRegionInfo(tableDesc.getTableName(), snapshotRegionInfo);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public static RegionInfo cloneRegionInfo(TableName tableName, RegionInfo snapshotRegionInfo) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    return RegionInfoBuilder.newBuilder(tableName)<a name="line.788"></a>
-<span class="sourceLineNo">789</span>        .setStartKey(snapshotRegionInfo.getStartKey())<a name="line.789"></a>
-<span class="sourceLineNo">790</span>        .setEndKey(snapshotRegionInfo.getEndKey())<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        .setSplit(snapshotRegionInfo.isSplit())<a name="line.791"></a>
-<span class="sourceLineNo">792</span>        .setRegionId(snapshotRegionInfo.getRegionId())<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        .setOffline(snapshotRegionInfo.isOffline())<a name="line.793"></a>
-<span class="sourceLineNo">794</span>        .build();<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * @return the set of the regions contained in the table<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   */<a name="line.799"></a>
-<span class="sourceLineNo">800</span>  private List&lt;RegionInfo&gt; getTableRegions() throws IOException {<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    LOG.debug("get table regions: " + tableDir);<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    FileStatus[] regionDirs = FSUtils.listStatus(fs, tableDir, new FSUtils.RegionDirFilter(fs));<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    if (regionDirs == null) return null;<a name="line.803"></a>
-<span class="sourceLineNo">804</span><a name="line.804"></a>
-<span class="sourceLineNo">805</span>    List&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;(regionDirs.length);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    for (int i = 0; i &lt; regionDirs.length; ++i) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>      RegionInfo hri = HRegionFileSystem.loadRegionInfoFileContent(fs, regionDirs[i].getPath());<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      regions.add(hri);<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    LOG.debug("found " + regions.size() + " regions for table=" +<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        tableDesc.getTableName().getNameAsString());<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    return regions;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>  /**<a name="line.815"></a>
-<span class="sourceLineNo">816</span>   * Copy the snapshot files for a snapshot scanner, discards meta changes.<a name="line.816"></a>
-<span class="sourceLineNo">817</span>   * @param conf<a name="line.817"></a>
-<span class="sourceLineNo">818</span>   * @param fs<a name="line.818"></a>
-<span class="sourceLineNo">819</span>   * @param rootDir<a name="line.819"></a>
-<span class="sourceLineNo">820</span>   * @param restoreDir<a name="line.820"></a>
-<span class="sourceLineNo">821</span>   * @param snapshotName<a name="line.821"></a>
-<span class="sourceLineNo">822</span>   * @throws IOException<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   */<a name="line.823"></a>
-<span class="sourceLineNo">824</span>  public static RestoreMetaChanges copySnapshotForScanner(Configuration conf, FileSystem fs,<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      Path rootDir, Path restoreDir, String snapshotName) throws IOException {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    // ensure that restore dir is not under root dir<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    if (!restoreDir.getFileSystem(conf).getUri().equals(rootDir.getFileSystem(conf).getUri())) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      throw new IllegalArgumentException("Filesystems for restore directory and HBase root " +<a name="line.828"></a>
-<span class="sourceLineNo">829</span>          "directory should be the same");<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    }<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    if (restoreDir.toUri().getPath().startsWith(rootDir.toUri().getPath())) {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      throw new IllegalArgumentException("Restore directory cannot be a sub directory of HBase " +<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          "root directory. RootDir: " + rootDir + ", restoreDir: " + restoreDir);<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>    Path snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshotName, rootDir);<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    SnapshotDescription snapshotDesc = SnapshotDescriptionUtils.readSnapshotInfo(fs, snapshotDir);<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    SnapshotManifest manifest = SnapshotManifest.open(conf, fs, snapshotDir, snapshotDesc);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>    MonitoredTask status = TaskMonitor.get().createStatus(<a name="line.840"></a>
-<span class="sourceLineNo">841</span>        "Restoring  snapshot '" + snapshotName + "' to directory " + restoreDir);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    ForeignExceptionDispatcher monitor = new ForeignExceptionDispatcher();<a name="line.842"></a>
-<span class="sourceLineNo">843</span><a name="line.843"></a>
-<span class="sourceLineNo">844</span>    // we send createBackRefs=false so that restored hfiles do not create back reference links<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    // in the base hbase root dir.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    RestoreSnapshotHelper helper = new RestoreSnapshotHelper(conf, fs,<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      manifest, manifest.getTableDescriptor(), restoreDir, monitor, status, false);<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    RestoreMetaChanges metaChanges = helper.restoreHdfsRegions(); // TODO: parallelize.<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>    if (LOG.isDebugEnabled()) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      LOG.debug("Restored table dir:" + restoreDir);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      FSUtils.logFileSystemState(fs, restoreDir, LOG);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    return metaChanges;<a name="line.854"></a>
-<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>  public static void restoreSnapshotAcl(SnapshotDescription snapshot, TableName newTableName,<a name="line.857"></a>
-<span class="sourceLineNo">858</span>      Configuration conf) throws IOException {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    if (snapshot.hasUsersAndPermissions() &amp;&amp; snapshot.getUsersAndPermissions() != null) {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      LOG.info("Restore snapshot acl to table. snapshot: " + snapshot + ", table: " + newTableName);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>      ListMultimap&lt;String, TablePermission&gt; perms =<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          ShadedAccessControlUtil.toUserTablePermissions(snapshot.getUsersAndPermissions());<a name="line.862"></a>
-<span class="sourceLineNo">863</span>      try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>        for (Entry&lt;String, TablePermission&gt; e : perms.entries()) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          String user = e.getKey();<a name="line.865"></a>
-<span class="sourceLineNo">866</span>          TablePermission perm = e.getValue();<a name="line.866"></a>
-<span class="sourceLineNo">867</span>          perm.setTableName(newTableName);<a name="line.867"></a>
-<span class="sourceLineNo">868</span>          AccessControlClient.grant(conn, perm.getTableName(), user, perm.getFamily(),<a name="line.868"></a>
-<span class="sourceLineNo">869</span>            perm.getQualifier(), perm.getActions());<a name="line.869"></a>
-<span class="sourceLineNo">870</span>        }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      } catch (Throwable e) {<a name="line.871"></a>
-<span class="sourceLineNo">872</span>        throw new IOException("Grant acl into newly creatd table failed. snapshot: " + snapshot<a name="line.872"></a>
-<span class="sourceLineNo">873</span>            + ", table: " + newTableName, e);<a name="line.873"></a>
-<span class="sourceLineNo">874</span>      }<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    }<a name="line.875"></a>
-<span class="sourceLineNo">876</span>  }<a name="line.876"></a>
-<span class="sourceLineNo">877</span>}<a name="line.877"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.security.access.Permission;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.security.access.ShadedAccessControlUtil;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.security.access.TablePermission;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.io.IOUtils;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.Logger;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.slf4j.LoggerFactory;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>/**<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * Helper to Restore/Clone a Snapshot<a name="line.76"></a>
+<span class="sourceLineNo">077</span> *<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * &lt;p&gt;The helper assumes that a table is already created, and by calling restore()<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * the content present in the snapshot will be restored as the new content of the table.<a name="line.79"></a>
+<span class="sourceLineNo">080</span> *<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * &lt;p&gt;Clone from Snapshot: If the target table is empty, the restore operation<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * is just a "clone operation", where the only operations are:<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * &lt;ul&gt;<a name="line.83"></a>
+<span class="sourceLineNo">084</span> *  &lt;li&gt;for each region in the snapshot create a new region<a name="line.84"></a>
+<span class="sourceLineNo">085</span> *    (note that the region will have a different name, since the encoding contains the table name)<a name="line.85"></a>
+<span class="sourceLineNo">086</span> *  &lt;li&gt;for each file in the region create a new HFileLink to point to the original file.<a name="line.86"></a>
+<span class="sourceLineNo">087</span> *  &lt;li&gt;restore the logs, if any<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * &lt;/ul&gt;<a name="line.88"></a>
+<span class="sourceLineNo">089</span> *<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * &lt;p&gt;Restore from Snapshot:<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * &lt;ul&gt;<a name="line.91"></a>
+<span class="sourceLineNo">092</span> *  &lt;li&gt;for each region in the table verify which are available in the snapshot and which are not<a name="line.92"></a>
+<span class="sourceLineNo">093</span> *    &lt;ul&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> *    &lt;li&gt;if the region is not present in the snapshot, remove it.<a name="line.94"></a>
+<span class="sourceLineNo">095</span> *    &lt;li&gt;if the region is present in the snapshot<a name="line.95"></a>
+<span class="sourceLineNo">096</span> *      &lt;ul&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span> *      &lt;li&gt;for each file in the table region verify which are available in the snapshot<a name="line.97"></a>
+<span class="sourceLineNo">098</span> *        &lt;ul&gt;<a name="line.98"></a>
+<span class="sourceLineNo">099</span> *          &lt;li&gt;if the hfile is not

<TRUNCATED>

[12/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html
index cbae28e..aec5920 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html
@@ -64,825 +64,827 @@
 <span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.56"></a>
 <span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.57"></a>
 <span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.security.access.AccessControlClient;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.security.access.ShadedAccessControlUtil;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.security.access.TablePermission;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.io.IOUtils;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>/**<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * Helper to Restore/Clone a Snapshot<a name="line.75"></a>
-<span class="sourceLineNo">076</span> *<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * &lt;p&gt;The helper assumes that a table is already created, and by calling restore()<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * the content present in the snapshot will be restored as the new content of the table.<a name="line.78"></a>
-<span class="sourceLineNo">079</span> *<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * &lt;p&gt;Clone from Snapshot: If the target table is empty, the restore operation<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * is just a "clone operation", where the only operations are:<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * &lt;ul&gt;<a name="line.82"></a>
-<span class="sourceLineNo">083</span> *  &lt;li&gt;for each region in the snapshot create a new region<a name="line.83"></a>
-<span class="sourceLineNo">084</span> *    (note that the region will have a different name, since the encoding contains the table name)<a name="line.84"></a>
-<span class="sourceLineNo">085</span> *  &lt;li&gt;for each file in the region create a new HFileLink to point to the original file.<a name="line.85"></a>
-<span class="sourceLineNo">086</span> *  &lt;li&gt;restore the logs, if any<a name="line.86"></a>
-<span class="sourceLineNo">087</span> * &lt;/ul&gt;<a name="line.87"></a>
-<span class="sourceLineNo">088</span> *<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * &lt;p&gt;Restore from Snapshot:<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * &lt;ul&gt;<a name="line.90"></a>
-<span class="sourceLineNo">091</span> *  &lt;li&gt;for each region in the table verify which are available in the snapshot and which are not<a name="line.91"></a>
-<span class="sourceLineNo">092</span> *    &lt;ul&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span> *    &lt;li&gt;if the region is not present in the snapshot, remove it.<a name="line.93"></a>
-<span class="sourceLineNo">094</span> *    &lt;li&gt;if the region is present in the snapshot<a name="line.94"></a>
-<span class="sourceLineNo">095</span> *      &lt;ul&gt;<a name="line.95"></a>
-<span class="sourceLineNo">096</span> *      &lt;li&gt;for each file in the table region verify which are available in the snapshot<a name="line.96"></a>
-<span class="sourceLineNo">097</span> *        &lt;ul&gt;<a name="line.97"></a>
-<span class="sourceLineNo">098</span> *          &lt;li&gt;if the hfile is not present in the snapshot, remove it<a name="line.98"></a>
-<span class="sourceLineNo">099</span> *          &lt;li&gt;if the hfile is present, keep it (nothing to do)<a name="line.99"></a>
-<span class="sourceLineNo">100</span> *        &lt;/ul&gt;<a name="line.100"></a>
-<span class="sourceLineNo">101</span> *      &lt;li&gt;for each file in the snapshot region but not in the table<a name="line.101"></a>
-<span class="sourceLineNo">102</span> *        &lt;ul&gt;<a name="line.102"></a>
-<span class="sourceLineNo">103</span> *          &lt;li&gt;create a new HFileLink that point to the original file<a name="line.103"></a>
-<span class="sourceLineNo">104</span> *        &lt;/ul&gt;<a name="line.104"></a>
-<span class="sourceLineNo">105</span> *      &lt;/ul&gt;<a name="line.105"></a>
-<span class="sourceLineNo">106</span> *    &lt;/ul&gt;<a name="line.106"></a>
-<span class="sourceLineNo">107</span> *  &lt;li&gt;for each region in the snapshot not present in the current table state<a name="line.107"></a>
-<span class="sourceLineNo">108</span> *    &lt;ul&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span> *    &lt;li&gt;create a new region and for each file in the region create a new HFileLink<a name="line.109"></a>
-<span class="sourceLineNo">110</span> *      (This is the same as the clone operation)<a name="line.110"></a>
-<span class="sourceLineNo">111</span> *    &lt;/ul&gt;<a name="line.111"></a>
-<span class="sourceLineNo">112</span> *  &lt;li&gt;restore the logs, if any<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * &lt;/ul&gt;<a name="line.113"></a>
-<span class="sourceLineNo">114</span> */<a name="line.114"></a>
-<span class="sourceLineNo">115</span>@InterfaceAudience.Private<a name="line.115"></a>
-<span class="sourceLineNo">116</span>public class RestoreSnapshotHelper {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private static final Logger LOG = LoggerFactory.getLogger(RestoreSnapshotHelper.class);<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private final Map&lt;byte[], byte[]&gt; regionsMap = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private final Map&lt;String, Pair&lt;String, String&gt; &gt; parentsMap = new HashMap&lt;&gt;();<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private final ForeignExceptionDispatcher monitor;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private final MonitoredTask status;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private final SnapshotManifest snapshotManifest;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private final SnapshotDescription snapshotDesc;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private final TableName snapshotTable;<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private final TableDescriptor tableDesc;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  private final Path rootDir;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private final Path tableDir;<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private final Configuration conf;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  private final FileSystem fs;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  private final boolean createBackRefs;<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public RestoreSnapshotHelper(final Configuration conf,<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      final FileSystem fs,<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      final SnapshotManifest manifest,<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      final TableDescriptor tableDescriptor,<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      final Path rootDir,<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      final ForeignExceptionDispatcher monitor,<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      final MonitoredTask status) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    this(conf, fs, manifest, tableDescriptor, rootDir, monitor, status, true);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public RestoreSnapshotHelper(final Configuration conf,<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      final FileSystem fs,<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      final SnapshotManifest manifest,<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      final TableDescriptor tableDescriptor,<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      final Path rootDir,<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      final ForeignExceptionDispatcher monitor,<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      final MonitoredTask status,<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      final boolean createBackRefs)<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    this.fs = fs;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    this.conf = conf;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    this.snapshotManifest = manifest;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    this.snapshotDesc = manifest.getSnapshotDescription();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    this.snapshotTable = TableName.valueOf(snapshotDesc.getTable());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    this.tableDesc = tableDescriptor;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    this.rootDir = rootDir;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.tableDir = FSUtils.getTableDir(rootDir, tableDesc.getTableName());<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    this.monitor = monitor;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    this.status = status;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    this.createBackRefs = createBackRefs;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * Restore the on-disk table to a specified snapshot state.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @return the set of regions touched by the restore operation<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  public RestoreMetaChanges restoreHdfsRegions() throws IOException {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    ThreadPoolExecutor exec = SnapshotManifest.createExecutor(conf, "RestoreSnapshot");<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    try {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      return restoreHdfsRegions(exec);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    } finally {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      exec.shutdown();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  private RestoreMetaChanges restoreHdfsRegions(final ThreadPoolExecutor exec) throws IOException {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    LOG.info("starting restore table regions using snapshot=" + snapshotDesc);<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>    Map&lt;String, SnapshotRegionManifest&gt; regionManifests = snapshotManifest.getRegionManifestsMap();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    if (regionManifests == null) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      LOG.warn("Nothing to restore. Snapshot " + snapshotDesc + " looks empty");<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return null;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>    RestoreMetaChanges metaChanges = new RestoreMetaChanges(tableDesc, parentsMap);<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>    // Take a copy of the manifest.keySet() since we are going to modify<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // this instance, by removing the regions already present in the restore dir.<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    Set&lt;String&gt; regionNames = new HashSet&lt;&gt;(regionManifests.keySet());<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    List&lt;RegionInfo&gt; tableRegions = getTableRegions();<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>    RegionInfo mobRegion = MobUtils.getMobRegionInfo(snapshotManifest.getTableDescriptor()<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        .getTableName());<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    if (tableRegions != null) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // restore the mob region in case<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      if (regionNames.contains(mobRegion.getEncodedName())) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        monitor.rethrowException();<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        status.setStatus("Restoring mob region...");<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        List&lt;RegionInfo&gt; mobRegions = new ArrayList&lt;&gt;(1);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        mobRegions.add(mobRegion);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        restoreHdfsMobRegions(exec, regionManifests, mobRegions);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        regionNames.remove(mobRegion.getEncodedName());<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        status.setStatus("Finished restoring mob region.");<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    if (regionNames.contains(mobRegion.getEncodedName())) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      // add the mob region<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      monitor.rethrowException();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      status.setStatus("Cloning mob region...");<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      cloneHdfsMobRegion(regionManifests, mobRegion);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      regionNames.remove(mobRegion.getEncodedName());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      status.setStatus("Finished cloning mob region.");<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>    // Identify which region are still available and which not.<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    // NOTE: we rely upon the region name as: "table name, start key, end key"<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    if (tableRegions != null) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      monitor.rethrowException();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      for (RegionInfo regionInfo: tableRegions) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        String regionName = regionInfo.getEncodedName();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        if (regionNames.contains(regionName)) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          LOG.info("region to restore: " + regionName);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          regionNames.remove(regionName);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          metaChanges.addRegionToRestore(ProtobufUtil.toRegionInfo(regionManifests.get(regionName)<a name="line.232"></a>
-<span class="sourceLineNo">233</span>              .getRegionInfo()));<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        } else {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          LOG.info("region to remove: " + regionName);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          metaChanges.addRegionToRemove(regionInfo);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    // Regions to Add: present in the snapshot but not in the current table<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    List&lt;RegionInfo&gt; regionsToAdd = new ArrayList&lt;&gt;(regionNames.size());<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    if (regionNames.size() &gt; 0) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      monitor.rethrowException();<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      for (String regionName: regionNames) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        LOG.info("region to add: " + regionName);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        regionsToAdd.add(ProtobufUtil.toRegionInfo(regionManifests.get(regionName)<a name="line.247"></a>
-<span class="sourceLineNo">248</span>            .getRegionInfo()));<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    // Create new regions cloning from the snapshot<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    // HBASE-19980: We need to call cloneHdfsRegions() before restoreHdfsRegions() because<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    // regionsMap is constructed in cloneHdfsRegions() and it can be used in restoreHdfsRegions().<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    monitor.rethrowException();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    status.setStatus("Cloning regions...");<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    RegionInfo[] clonedRegions = cloneHdfsRegions(exec, regionManifests, regionsToAdd);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    metaChanges.setNewRegions(clonedRegions);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    status.setStatus("Finished cloning regions.");<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // Restore regions using the snapshot data<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    monitor.rethrowException();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    status.setStatus("Restoring table regions...");<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    restoreHdfsRegions(exec, regionManifests, metaChanges.getRegionsToRestore());<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    status.setStatus("Finished restoring all table regions.");<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    // Remove regions from the current table<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    monitor.rethrowException();<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    status.setStatus("Starting to delete excess regions from table");<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    removeHdfsRegions(exec, metaChanges.getRegionsToRemove());<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    status.setStatus("Finished deleting excess regions from table.");<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    LOG.info("finishing restore table regions using snapshot=" + snapshotDesc);<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    return metaChanges;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * Describe the set of operations needed to update hbase:meta after restore.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  public static class RestoreMetaChanges {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    private final Map&lt;String, Pair&lt;String, String&gt; &gt; parentsMap;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    private final TableDescriptor htd;<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>    private List&lt;RegionInfo&gt; regionsToRestore = null;<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    private List&lt;RegionInfo&gt; regionsToRemove = null;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    private List&lt;RegionInfo&gt; regionsToAdd = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>    public RestoreMetaChanges(TableDescriptor htd, Map&lt;String, Pair&lt;String, String&gt; &gt; parentsMap) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      this.parentsMap = parentsMap;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      this.htd = htd;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    public TableDescriptor getTableDescriptor() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      return htd;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>     * Returns the map of parent-children_pair.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>     * @return the map<a name="line.300"></a>
-<span class="sourceLineNo">301</span>     */<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    public Map&lt;String, Pair&lt;String, String&gt;&gt; getParentToChildrenPairMap() {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      return this.parentsMap;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>    /**<a name="line.306"></a>
-<span class="sourceLineNo">307</span>     * @return true if there're new regions<a name="line.307"></a>
-<span class="sourceLineNo">308</span>     */<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    public boolean hasRegionsToAdd() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return this.regionsToAdd != null &amp;&amp; this.regionsToAdd.size() &gt; 0;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>    /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>     * Returns the list of new regions added during the on-disk restore.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>     * The caller is responsible to add the regions to META.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>     * e.g MetaTableAccessor.addRegionsToMeta(...)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>     * @return the list of regions to add to META<a name="line.317"></a>
-<span class="sourceLineNo">318</span>     */<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    public List&lt;RegionInfo&gt; getRegionsToAdd() {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      return this.regionsToAdd;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>    /**<a name="line.323"></a>
-<span class="sourceLineNo">324</span>     * @return true if there're regions to restore<a name="line.324"></a>
-<span class="sourceLineNo">325</span>     */<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public boolean hasRegionsToRestore() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      return this.regionsToRestore != null &amp;&amp; this.regionsToRestore.size() &gt; 0;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>    /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>     * Returns the list of 'restored regions' during the on-disk restore.<a name="line.331"></a>
-<span class="sourceLineNo">332</span>     * The caller is responsible to add the regions to hbase:meta if not present.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>     * @return the list of regions restored<a name="line.333"></a>
-<span class="sourceLineNo">334</span>     */<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    public List&lt;RegionInfo&gt; getRegionsToRestore() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return this.regionsToRestore;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>    /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>     * @return true if there're regions to remove<a name="line.340"></a>
-<span class="sourceLineNo">341</span>     */<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    public boolean hasRegionsToRemove() {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      return this.regionsToRemove != null &amp;&amp; this.regionsToRemove.size() &gt; 0;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    /**<a name="line.346"></a>
-<span class="sourceLineNo">347</span>     * Returns the list of regions removed during the on-disk restore.<a name="line.347"></a>
-<span class="sourceLineNo">348</span>     * The caller is responsible to remove the regions from META.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     * e.g. MetaTableAccessor.deleteRegions(...)<a name="line.349"></a>
-<span class="sourceLineNo">350</span>     * @return the list of regions to remove from META<a name="line.350"></a>
-<span class="sourceLineNo">351</span>     */<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    public List&lt;RegionInfo&gt; getRegionsToRemove() {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      return this.regionsToRemove;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    void setNewRegions(final RegionInfo[] hris) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      if (hris != null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        regionsToAdd = Arrays.asList(hris);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      } else {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        regionsToAdd = null;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      }<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    void addRegionToRemove(final RegionInfo hri) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      if (regionsToRemove == null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        regionsToRemove = new LinkedList&lt;&gt;();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      regionsToRemove.add(hri);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    void addRegionToRestore(final RegionInfo hri) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      if (regionsToRestore == null) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        regionsToRestore = new LinkedList&lt;&gt;();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      regionsToRestore.add(hri);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    public void updateMetaParentRegions(Connection connection,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        final List&lt;RegionInfo&gt; regionInfos) throws IOException {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      if (regionInfos == null || parentsMap.isEmpty()) return;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>      // Extract region names and offlined regions<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      Map&lt;String, RegionInfo&gt; regionsByName = new HashMap&lt;&gt;(regionInfos.size());<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      List&lt;RegionInfo&gt; parentRegions = new LinkedList&lt;&gt;();<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      for (RegionInfo regionInfo: regionInfos) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        if (regionInfo.isSplitParent()) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>          parentRegions.add(regionInfo);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        } else {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          regionsByName.put(regionInfo.getEncodedName(), regionInfo);<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>      // Update Offline parents<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      for (RegionInfo regionInfo: parentRegions) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        Pair&lt;String, String&gt; daughters = parentsMap.get(regionInfo.getEncodedName());<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (daughters == null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // The snapshot contains an unreferenced region.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          // It will be removed by the CatalogJanitor.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          LOG.warn("Skip update of unreferenced offline parent: " + regionInfo);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          continue;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>        // One side of the split is already compacted<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        if (daughters.getSecond() == null) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          daughters.setSecond(daughters.getFirst());<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>        LOG.debug("Update splits parent " + regionInfo.getEncodedName() + " -&gt; " + daughters);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        MetaTableAccessor.addSplitsToParent(connection, regionInfo,<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          regionsByName.get(daughters.getFirst()),<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          regionsByName.get(daughters.getSecond()));<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * Remove specified regions from the file-system, using the archiver.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   */<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private void removeHdfsRegions(final ThreadPoolExecutor exec, final List&lt;RegionInfo&gt; regions)<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      throws IOException {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    if (regions == null || regions.isEmpty()) return;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    ModifyRegionUtils.editRegions(exec, regions, new ModifyRegionUtils.RegionEditTask() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      @Override<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      public void editRegion(final RegionInfo hri) throws IOException {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        HFileArchiver.archiveRegion(conf, fs, hri);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    });<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>  /**<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   * Restore specified regions by restoring content to the snapshot state.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   */<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private void restoreHdfsRegions(final ThreadPoolExecutor exec,<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      final Map&lt;String, SnapshotRegionManifest&gt; regionManifests,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    if (regions == null || regions.isEmpty()) return;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    ModifyRegionUtils.editRegions(exec, regions, new ModifyRegionUtils.RegionEditTask() {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      public void editRegion(final RegionInfo hri) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        restoreRegion(hri, regionManifests.get(hri.getEncodedName()));<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    });<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  /**<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * Restore specified mob regions by restoring content to the snapshot state.<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   */<a name="line.447"></a>
-<span class="sourceLineNo">448</span>  private void restoreHdfsMobRegions(final ThreadPoolExecutor exec,<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      final Map&lt;String, SnapshotRegionManifest&gt; regionManifests,<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (regions == null || regions.isEmpty()) return;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    ModifyRegionUtils.editRegions(exec, regions, new ModifyRegionUtils.RegionEditTask() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      public void editRegion(final RegionInfo hri) throws IOException {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        restoreMobRegion(hri, regionManifests.get(hri.getEncodedName()));<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    });<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private Map&lt;String, List&lt;SnapshotRegionManifest.StoreFile&gt;&gt; getRegionHFileReferences(<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      final SnapshotRegionManifest manifest) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    Map&lt;String, List&lt;SnapshotRegionManifest.StoreFile&gt;&gt; familyMap =<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      new HashMap&lt;&gt;(manifest.getFamilyFilesCount());<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (SnapshotRegionManifest.FamilyFiles familyFiles: manifest.getFamilyFilesList()) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      familyMap.put(familyFiles.getFamilyName().toStringUtf8(),<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        new ArrayList&lt;&gt;(familyFiles.getStoreFilesList()));<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return familyMap;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>  /**<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * Restore region by removing files not in the snapshot<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * and adding the missing ones from the snapshot.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  private void restoreRegion(final RegionInfo regionInfo,<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      final SnapshotRegionManifest regionManifest) throws IOException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    restoreRegion(regionInfo, regionManifest, new Path(tableDir, regionInfo.getEncodedName()));<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * Restore mob region by removing files not in the snapshot<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * and adding the missing ones from the snapshot.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   */<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  private void restoreMobRegion(final RegionInfo regionInfo,<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      final SnapshotRegionManifest regionManifest) throws IOException {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    if (regionManifest == null) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      return;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    restoreRegion(regionInfo, regionManifest,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      MobUtils.getMobRegionPath(conf, tableDesc.getTableName()));<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  }<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>  /**<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * Restore region by removing files not in the snapshot<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * and adding the missing ones from the snapshot.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  private void restoreRegion(final RegionInfo regionInfo,<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      final SnapshotRegionManifest regionManifest, Path regionDir) throws IOException {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    Map&lt;String, List&lt;SnapshotRegionManifest.StoreFile&gt;&gt; snapshotFiles =<a name="line.499"></a>
-<span class="sourceLineNo">500</span>                getRegionHFileReferences(regionManifest);<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    String tableName = tableDesc.getTableName().getNameAsString();<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span>    // Restore families present in the table<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    for (Path familyDir: FSUtils.getFamilyDirs(fs, regionDir)) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      byte[] family = Bytes.toBytes(familyDir.getName());<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      Set&lt;String&gt; familyFiles = getTableRegionFamilyFiles(familyDir);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      List&lt;SnapshotRegionManifest.StoreFile&gt; snapshotFamilyFiles =<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          snapshotFiles.remove(familyDir.getName());<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      if (snapshotFamilyFiles != null) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>        List&lt;SnapshotRegionManifest.StoreFile&gt; hfilesToAdd = new ArrayList&lt;&gt;();<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        for (SnapshotRegionManifest.StoreFile storeFile: snapshotFamilyFiles) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          if (familyFiles.contains(storeFile.getName())) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            // HFile already present<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            familyFiles.remove(storeFile.getName());<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          } else {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>            // HFile missing<a name="line.517"></a>
-<span class="sourceLineNo">518</span>            hfilesToAdd.add(storeFile);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>        // Remove hfiles not present in the snapshot<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        for (String hfileName: familyFiles) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          Path hfile = new Path(familyDir, hfileName);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>          LOG.trace("Removing hfile=" + hfileName +<a name="line.525"></a>
-<span class="sourceLineNo">526</span>            " from region=" + regionInfo.getEncodedName() + " table=" + tableName);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          HFileArchiver.archiveStoreFile(conf, fs, regionInfo, tableDir, family, hfile);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>        // Restore Missing files<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        for (SnapshotRegionManifest.StoreFile storeFile: hfilesToAdd) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          LOG.debug("Adding HFileLink " + storeFile.getName() +<a name="line.532"></a>
-<span class="sourceLineNo">533</span>            " to region=" + regionInfo.getEncodedName() + " table=" + tableName);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>          restoreStoreFile(familyDir, regionInfo, storeFile, createBackRefs);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        }<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } else {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        // Family doesn't exists in the snapshot<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        LOG.trace("Removing family=" + Bytes.toString(family) +<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          " from region=" + regionInfo.getEncodedName() + " table=" + tableName);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        HFileArchiver.archiveFamilyByFamilyDir(fs, conf, regionInfo, familyDir, family);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        fs.delete(familyDir, true);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    // Add families not present in the table<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    for (Map.Entry&lt;String, List&lt;SnapshotRegionManifest.StoreFile&gt;&gt; familyEntry:<a name="line.546"></a>
-<span class="sourceLineNo">547</span>                                                                      snapshotFiles.entrySet()) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      Path familyDir = new Path(regionDir, familyEntry.getKey());<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      if (!fs.mkdirs(familyDir)) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        throw new IOException("Unable to create familyDir=" + familyDir);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>      for (SnapshotRegionManifest.StoreFile storeFile: familyEntry.getValue()) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        LOG.trace("Adding HFileLink " + storeFile.getName() + " to table=" + tableName);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        restoreStoreFile(familyDir, regionInfo, storeFile, createBackRefs);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * @return The set of files in the specified family directory.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   */<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  private Set&lt;String&gt; getTableRegionFamilyFiles(final Path familyDir) throws IOException {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    FileStatus[] hfiles = FSUtils.listStatus(fs, familyDir);<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    if (hfiles == null) return Collections.emptySet();<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Set&lt;String&gt; familyFiles = new HashSet&lt;&gt;(hfiles.length);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    for (int i = 0; i &lt; hfiles.length; ++i) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      String hfileName = hfiles[i].getPath().getName();<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      familyFiles.add(hfileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return familyFiles;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  /**<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * Clone specified regions. For each region create a new region<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * and create a HFileLink for each hfile.<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  private RegionInfo[] cloneHdfsRegions(final ThreadPoolExecutor exec,<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      final Map&lt;String, SnapshotRegionManifest&gt; regionManifests,<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    if (regions == null || regions.isEmpty()) return null;<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>    final Map&lt;String, RegionInfo&gt; snapshotRegions = new HashMap&lt;&gt;(regions.size());<a name="line.585"></a>
-<span class="sourceLineNo">586</span><a name="line.586"></a>
-<span class="sourceLineNo">587</span>    // clone region info (change embedded tableName with the new one)<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    RegionInfo[] clonedRegionsInfo = new RegionInfo[regions.size()];<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    for (int i = 0; i &lt; clonedRegionsInfo.length; ++i) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      // clone the region info from the snapshot region info<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      RegionInfo snapshotRegionInfo = regions.get(i);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      clonedRegionsInfo[i] = cloneRegionInfo(snapshotRegionInfo);<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>      // add the region name mapping between snapshot and cloned<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      String snapshotRegionName = snapshotRegionInfo.getEncodedName();<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      String clonedRegionName = clonedRegionsInfo[i].getEncodedName();<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      regionsMap.put(Bytes.toBytes(snapshotRegionName), Bytes.toBytes(clonedRegionName));<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      LOG.info("clone region=" + snapshotRegionName + " as " + clonedRegionName);<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // Add mapping between cloned region name and snapshot region info<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      snapshotRegions.put(clonedRegionName, snapshotRegionInfo);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    // create the regions on disk<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    ModifyRegionUtils.createRegions(exec, conf, rootDir,<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      tableDesc, clonedRegionsInfo, new ModifyRegionUtils.RegionFillTask() {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        @Override<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        public void fillRegion(final HRegion region) throws IOException {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>          RegionInfo snapshotHri = snapshotRegions.get(region.getRegionInfo().getEncodedName());<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          cloneRegion(region, snapshotHri, regionManifests.get(snapshotHri.getEncodedName()));<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      });<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span>    return clonedRegionsInfo;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>  /**<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * Clone the mob region. For the region create a new region<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * and create a HFileLink for each hfile.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   */<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  private void cloneHdfsMobRegion(final Map&lt;String, SnapshotRegionManifest&gt; regionManifests,<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      final RegionInfo region) throws IOException {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    // clone region info (change embedded tableName with the new one)<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    Path clonedRegionPath = MobUtils.getMobRegionPath(conf, tableDesc.getTableName());<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    cloneRegion(clonedRegionPath, region, regionManifests.get(region.getEncodedName()));<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>  /**<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * Clone region directory content from the snapshot info.<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   *<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * Each region is encoded with the table name, so the cloned region will have<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * a different region name.<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   *<a name="line.633"></a>
-<span class="sourceLineNo">634</span>   * Instead of copying the hfiles a HFileLink is created.<a name="line.634"></a>
-<span class="sourceLineNo">635</span>   *<a name="line.635"></a>
-<span class="sourceLineNo">636</span>   * @param regionDir {@link Path} cloned dir<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * @param snapshotRegionInfo<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   */<a name="line.638"></a>
-<span class="sourceLineNo">639</span>  private void cloneRegion(final Path regionDir, final RegionInfo snapshotRegionInfo,<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      final SnapshotRegionManifest manifest) throws IOException {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    final String tableName = tableDesc.getTableName().getNameAsString();<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    for (SnapshotRegionManifest.FamilyFiles familyFiles: manifest.getFamilyFilesList()) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      Path familyDir = new Path(regionDir, familyFiles.getFamilyName().toStringUtf8());<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      for (SnapshotRegionManifest.StoreFile storeFile: familyFiles.getStoreFilesList()) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        LOG.info("Adding HFileLink " + storeFile.getName() + " to table=" + tableName);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        restoreStoreFile(familyDir, snapshotRegionInfo, storeFile, createBackRefs);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * Clone region directory content from the snapshot info.<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   *<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   * Each region is encoded with the table name, so the cloned region will have<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * a different region name.<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   *<a name="line.656"></a>
-<span class="sourceLineNo">657</span>   * Instead of copying the hfiles a HFileLink is created.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>   *<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   * @param region {@link HRegion} cloned<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * @param snapshotRegionInfo<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   */<a name="line.661"></a>
-<span class="sourceLineNo">662</span>  private void cloneRegion(final HRegion region, final RegionInfo snapshotRegionInfo,<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      final SnapshotRegionManifest manifest) throws IOException {<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    cloneRegion(new Path(tableDir, region.getRegionInfo().getEncodedName()), snapshotRegionInfo,<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      manifest);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>  /**<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   * Create a new {@link HFileLink} to reference the store file.<a name="line.669"></a>
-<span class="sourceLineNo">670</span>   * &lt;p&gt;The store file in the snapshot can be a simple hfile, an HFileLink or a reference.<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * &lt;ul&gt;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   *   &lt;li&gt;hfile: abc -&gt; table=region-abc<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   *   &lt;li&gt;reference: abc.1234 -&gt; table=region-abc.1234<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   *   &lt;li&gt;hfilelink: table=region-hfile -&gt; table=region-hfile<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * &lt;/ul&gt;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * @param familyDir destination directory for the store file<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   * @param regionInfo destination region info for the table<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param createBackRef - Whether back reference should be created. Defaults to true.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * @param storeFile store file name (can be a Reference, HFileLink or simple HFile)<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  private void restoreStoreFile(final Path familyDir, final RegionInfo regionInfo,<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      final SnapshotRegionManifest.StoreFile storeFile, final boolean createBackRef)<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          throws IOException {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    String hfileName = storeFile.getName();<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    if (HFileLink.isHFileLink(hfileName)) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      HFileLink.createFromHFileLink(conf, fs, familyDir, hfileName, createBackRef);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    } else if (StoreFileInfo.isReference(hfileName)) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      restoreReferenceFile(familyDir, regionInfo, storeFile);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    } else {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      HFileLink.create(conf, fs, familyDir, regionInfo, hfileName, createBackRef);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>  /**<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   * Create a new {@link Reference} as copy of the source one.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>   * &lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>   * The source table looks like:<a name="line.697"></a>
-<span class="sourceLineNo">698</span>   *    1234/abc      (original file)<a name="line.698"></a>
-<span class="sourceLineNo">699</span>   *    5678/abc.1234 (reference file)<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   *<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * After the clone operation looks like:<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   *   wxyz/table=1234-abc<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   *   stuv/table=1234-abc.wxyz<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   *<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   * NOTE that the region name in the clone changes (md5 of regioninfo)<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * and the reference should reflect that change.<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   * &lt;/pre&gt;&lt;/blockquote&gt;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   * @param familyDir destination directory for the store file<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * @param regionInfo destination region info for the table<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @param storeFile reference file name<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  private void restoreReferenceFile(final Path familyDir, final RegionInfo regionInfo,<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      final SnapshotRegionManifest.StoreFile storeFile) throws IOException {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    String hfileName = storeFile.getName();<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>    // Extract the referred information (hfile name and parent region)<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    Path refPath =<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        StoreFileInfo.getReferredToFile(new Path(new Path(new Path(new Path(snapshotTable<a name="line.718"></a>
-<span class="sourceLineNo">719</span>            .getNamespaceAsString(), snapshotTable.getQualifierAsString()), regionInfo<a name="line.719"></a>
-<span class="sourceLineNo">720</span>            .getEncodedName()), familyDir.getName()), hfileName));<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    String snapshotRegionName = refPath.getParent().getParent().getName();<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    String fileName = refPath.getName();<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>    // The new reference should have the cloned region name as parent, if it is a clone.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    String clonedRegionName = Bytes.toString(regionsMap.get(Bytes.toBytes(snapshotRegionName)));<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    if (clonedRegionName == null) clonedRegionName = snapshotRegionName;<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span>    // The output file should be a reference link table=snapshotRegion-fileName.clonedRegionName<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    Path linkPath = null;<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    String refLink = fileName;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    if (!HFileLink.isHFileLink(fileName)) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      refLink = HFileLink.createHFileLinkName(snapshotTable, snapshotRegionName, fileName);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      linkPath = new Path(familyDir,<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        HFileLink.createHFileLinkName(snapshotTable, regionInfo.getEncodedName(), hfileName));<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    }<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    Path outPath = new Path(familyDir, refLink + '.' + clonedRegionName);<a name="line.737"></a>
-<span class="sourceLineNo">738</span><a name="line.738"></a>
-<span class="sourceLineNo">739</span>    // Create the new reference<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    if (storeFile.hasReference()) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      Reference reference = Reference.convert(storeFile.getReference());<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      reference.write(fs, outPath);<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    } else {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      InputStream in;<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      if (linkPath != null) {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        in = HFileLink.buildFromHFileLinkPattern(conf, linkPath).open(fs);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      } else {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>        linkPath = new Path(new Path(HRegion.getRegionDir(snapshotManifest.getSnapshotDir(),<a name="line.748"></a>
-<span class="sourceLineNo">749</span>                        regionInfo.getEncodedName()), familyDir.getName()), hfileName);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>        in = fs.open(linkPath);<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      }<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      OutputStream out = fs.create(outPath);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      IOUtils.copyBytes(in, out, conf);<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>    // Add the daughter region to the map<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    String regionName = Bytes.toString(regionsMap.get(regionInfo.getEncodedNameAsBytes()));<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    if (regionName == null) {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>      regionName = regionInfo.getEncodedName();<a name="line.759"></a>
-<span class="sourceLineNo">760</span>    }<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    LOG.debug("Restore reference " + regionName + " to " + clonedRegionName);<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    synchronized (parentsMap) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      Pair&lt;String, String&gt; daughters = parentsMap.get(clonedRegionName);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      if (daughters == null) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        // In case one side of the split is already compacted, regionName is put as both first and<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        // second of Pair<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        daughters = new Pair&lt;&gt;(regionName, regionName);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>        parentsMap.put(clonedRegionName, daughters);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      } else if (!regionName.equals(daughters.getFirst())) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>        daughters.setSecond(regionName);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      }<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    }<a name="line.772"></a>
-<span class="sourceLineNo">773</span>  }<a name="line.773"></a>
-<span class="sourceLineNo">774</span><a name="line.774"></a>
-<span class="sourceLineNo">775</span>  /**<a name="line.775"></a>
-<span class="sourceLineNo">776</span>   * Create a new {@link RegionInfo} from the snapshot region info.<a name="line.776"></a>
-<span class="sourceLineNo">777</span>   * Keep the same startKey, endKey, regionId and split information but change<a name="line.777"></a>
-<span class="sourceLineNo">778</span>   * the table name.<a name="line.778"></a>
-<span class="sourceLineNo">779</span>   *<a name="line.779"></a>
-<span class="sourceLineNo">780</span>   * @param snapshotRegionInfo Info for region to clone.<a name="line.780"></a>
-<span class="sourceLineNo">781</span>   * @return the new HRegion instance<a name="line.781"></a>
-<span class="sourceLineNo">782</span>   */<a name="line.782"></a>
-<span class="sourceLineNo">783</span>  public RegionInfo cloneRegionInfo(final RegionInfo snapshotRegionInfo) {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    return cloneRegionInfo(tableDesc.getTableName(), snapshotRegionInfo);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public static RegionInfo cloneRegionInfo(TableName tableName, RegionInfo snapshotRegionInfo) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    return RegionInfoBuilder.newBuilder(tableName)<a name="line.788"></a>
-<span class="sourceLineNo">789</span>        .setStartKey(snapshotRegionInfo.getStartKey())<a name="line.789"></a>
-<span class="sourceLineNo">790</span>        .setEndKey(snapshotRegionInfo.getEndKey())<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        .setSplit(snapshotRegionInfo.isSplit())<a name="line.791"></a>
-<span class="sourceLineNo">792</span>        .setRegionId(snapshotRegionInfo.getRegionId())<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        .setOffline(snapshotRegionInfo.isOffline())<a name="line.793"></a>
-<span class="sourceLineNo">794</span>        .build();<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * @return the set of the regions contained in the table<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   */<a name="line.799"></a>
-<span class="sourceLineNo">800</span>  private List&lt;RegionInfo&gt; getTableRegions() throws IOException {<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    LOG.debug("get table regions: " + tableDir);<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    FileStatus[] regionDirs = FSUtils.listStatus(fs, tableDir, new FSUtils.RegionDirFilter(fs));<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    if (regionDirs == null) return null;<a name="line.803"></a>
-<span class="sourceLineNo">804</span><a name="line.804"></a>
-<span class="sourceLineNo">805</span>    List&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;(regionDirs.length);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    for (int i = 0; i &lt; regionDirs.length; ++i) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>      RegionInfo hri = HRegionFileSystem.loadRegionInfoFileContent(fs, regionDirs[i].getPath());<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      regions.add(hri);<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    LOG.debug("found " + regions.size() + " regions for table=" +<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        tableDesc.getTableName().getNameAsString());<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    return regions;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>  /**<a name="line.815"></a>
-<span class="sourceLineNo">816</span>   * Copy the snapshot files for a snapshot scanner, discards meta changes.<a name="line.816"></a>
-<span class="sourceLineNo">817</span>   * @param conf<a name="line.817"></a>
-<span class="sourceLineNo">818</span>   * @param fs<a name="line.818"></a>
-<span class="sourceLineNo">819</span>   * @param rootDir<a name="line.819"></a>
-<span class="sourceLineNo">820</span>   * @param restoreDir<a name="line.820"></a>
-<span class="sourceLineNo">821</span>   * @param snapshotName<a name="line.821"></a>
-<span class="sourceLineNo">822</span>   * @throws IOException<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   */<a name="line.823"></a>
-<span class="sourceLineNo">824</span>  public static RestoreMetaChanges copySnapshotForScanner(Configuration conf, FileSystem fs,<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      Path rootDir, Path restoreDir, String snapshotName) throws IOException {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    // ensure that restore dir is not under root dir<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    if (!restoreDir.getFileSystem(conf).getUri().equals(rootDir.getFileSystem(conf).getUri())) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      throw new IllegalArgumentException("Filesystems for restore directory and HBase root " +<a name="line.828"></a>
-<span class="sourceLineNo">829</span>          "directory should be the same");<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    }<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    if (restoreDir.toUri().getPath().startsWith(rootDir.toUri().getPath())) {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      throw new IllegalArgumentException("Restore directory cannot be a sub directory of HBase " +<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          "root directory. RootDir: " + rootDir + ", restoreDir: " + restoreDir);<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>    Path snapshotDir = SnapshotDescriptionUtils.getCompletedSnapshotDir(snapshotName, rootDir);<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    SnapshotDescription snapshotDesc = SnapshotDescriptionUtils.readSnapshotInfo(fs, snapshotDir);<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    SnapshotManifest manifest = SnapshotManifest.open(conf, fs, snapshotDir, snapshotDesc);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>    MonitoredTask status = TaskMonitor.get().createStatus(<a name="line.840"></a>
-<span class="sourceLineNo">841</span>        "Restoring  snapshot '" + snapshotName + "' to directory " + restoreDir);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    ForeignExceptionDispatcher monitor = new ForeignExceptionDispatcher();<a name="line.842"></a>
-<span class="sourceLineNo">843</span><a name="line.843"></a>
-<span class="sourceLineNo">844</span>    // we send createBackRefs=false so that restored hfiles do not create back reference links<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    // in the base hbase root dir.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    RestoreSnapshotHelper helper = new RestoreSnapshotHelper(conf, fs,<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      manifest, manifest.getTableDescriptor(), restoreDir, monitor, status, false);<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    RestoreMetaChanges metaChanges = helper.restoreHdfsRegions(); // TODO: parallelize.<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>    if (LOG.isDebugEnabled()) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      LOG.debug("Restored table dir:" + restoreDir);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      FSUtils.logFileSystemState(fs, restoreDir, LOG);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    return metaChanges;<a name="line.854"></a>
-<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>  public static void restoreSnapshotAcl(SnapshotDescription snapshot, TableName newTableName,<a name="line.857"></a>
-<span class="sourceLineNo">858</span>      Configuration conf) throws IOException {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    if (snapshot.hasUsersAndPermissions() &amp;&amp; snapshot.getUsersAndPermissions() != null) {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      LOG.info("Restore snapshot acl to table. snapshot: " + snapshot + ", table: " + newTableName);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>      ListMultimap&lt;String, TablePermission&gt; perms =<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          ShadedAccessControlUtil.toUserTablePermissions(snapshot.getUsersAndPermissions());<a name="line.862"></a>
-<span class="sourceLineNo">863</span>      try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>        for (Entry&lt;String, TablePermission&gt; e : perms.entries()) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          String user = e.getKey();<a name="line.865"></a>
-<span class="sourceLineNo">866</span>          TablePermission perm = e.getValue();<a name="line.866"></a>
-<span class="sourceLineNo">867</span>          perm.setTableName(newTableName);<a name="line.867"></a>
-<span class="sourceLineNo">868</span>          AccessControlClient.grant(conn, perm.getTableName(), user, perm.getFamily(),<a name="line.868"></a>
-<span class="sourceLineNo">869</span>            perm.getQualifier(), perm.getActions());<a name="line.869"></a>
-<span class="sourceLineNo">870</span>        }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      } catch (Throwable e) {<a name="line.871"></a>
-<span class="sourceLineNo">872</span>        throw new IOException("Grant acl into newly creatd table failed. snapshot: " + snapshot<a name="line.872"></a>
-<span class="sourceLineNo">873</span>            + ", table: " + newTableName, e);<a name="line.873"></a>
-<span class="sourceLineNo">874</span>      }<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    }<a name="line.875"></a>
-<span class="sourceLineNo">876</span>  }<a name="line.876"></a>
-<span class="sourceLineNo">877</span>}<a name="line.877"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.security.access.Permission;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.security.access.ShadedAccessControlUtil;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.security.access.TablePermission;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.io.IOUtils;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.Logger;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.slf4j.LoggerFactory;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>/**<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * Helper to Restore/Clone a Snapshot<a name="line.76"></a>
+<span class="sourceLineNo">077</span> *<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * &lt;p&gt;The helper assumes that a table is already created, and by calling restore()<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * the content present in the snapshot will be restored as the new content of the table.<a name="line.79"></a>
+<span class="sourceLineNo">080</span> *<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * &lt;p&gt;Clone from Snapshot: If the target table is empty, the restore operation<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * is just a "clone operation", where the only operations are:<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * &lt;ul&gt;<a name="line.83"></a>
+<span class="sourceLineNo">084</span> *  &lt;li&gt;for each region in the snapshot create a new region<a name="line.84"></a>
+<span class="sourceLineNo">085</span> *    (note that the region will have a different name, since the encoding contains the table name)<a name="line.85"></a>
+<span class="sourceLineNo">086</span> *  &lt;li&gt;for each file in the region create a new HFileLink to point to the original file.<a name="line.86"></a>
+<span class="sourceLineNo">087</span> *  &lt;li&gt;restore the logs, if any<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * &lt;/ul&gt;<a name="line.88"></a>
+<span class="sourceLineNo">089</span> *<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * &lt;p&gt;Restore from Snapshot:<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * &lt;ul&gt;<a name="line.91"></a>
+<span class="sourceLineNo">092</span> *  &lt;li&gt;for each region in the table verify which are available in the snapshot and which are not<a name="line.92"></a>
+<span class="sourceLineNo">093</span> *    &lt;ul&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> *    &lt;li&gt;if the region is not present in the snapshot, remove it.<a name="line.94"></a>
+<span class="sourceLineNo">095</span> *    &lt;li&gt;if the region is present in the snapshot<a name="line.95"></a>
+<span class="sourceLineNo">096</span> *      &lt;ul&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span> *      &lt;li&gt;for each file in the table region verify which are available in the snapshot<a name="line.97"></a>
+<span class="sourceLineNo">098</span> *        &lt;ul&gt;<a name="line.98"></a>
+<span class="sourceLineNo">099</span> *          &lt;li&gt;if the hfile is not present in the snapshot, remove it<a name="line.99"></a>
+<span class="sourceLineNo">100</span

<TRUNCATED>

[32/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AuthManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AuthManager.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AuthManager.html
new file mode 100644
index 0000000..6dfcacd
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/AuthManager.html
@@ -0,0 +1,249 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.security.access.AuthManager (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.security.access.AuthManager (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/AuthManager.html" target="_top">Frames</a></li>
+<li><a href="AuthManager.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.security.access.AuthManager" class="title">Uses of Class<br>org.apache.hadoop.hbase.security.access.AuthManager</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.security.access">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a> in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#authManager">authManager</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ZKPermissionWatcher.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#authManager">authManager</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlFilter.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#authManager">authManager</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#managerMap">managerMap</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#refCount">refCount</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> that return <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#getAuthManager--">getAuthManager</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#getAuthManager--">getAuthManager</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#getOrCreate-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">getOrCreate</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
+           org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block">Returns a AuthManager from the cache.</div>
+</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#release-org.apache.hadoop.hbase.security.access.AuthManager-">release</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;instance)</code>
+<div class="block">Releases the resources for the given AuthManager if the reference count is down to 0.</div>
+</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
+<caption><span>Constructors in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#AccessControlFilter-org.apache.hadoop.hbase.security.access.AuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">AccessControlFilter</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;mgr,
+                   <a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;ugi,
+                   <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                   <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access">AccessControlFilter.Strategy</a>&nbsp;strategy,
+                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/util/ByteRange.html" title="interface in org.apache.hadoop.hbase.util">ByteRange</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;cfVsMaxVersions)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#ZKPermissionWatcher-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.hbase.security.access.AuthManager-org.apache.hadoop.conf.Configuration-">ZKPermissionWatcher</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
+                   <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;authManager,
+                   org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/AuthManager.html" target="_top">Frames</a></li>
+<li><a href="AuthManager.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/GlobalPermission.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/GlobalPermission.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/GlobalPermission.html
new file mode 100644
index 0000000..cc1a307
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/GlobalPermission.html
@@ -0,0 +1,197 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.security.access.GlobalPermission (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.security.access.GlobalPermission (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/GlobalPermission.html" target="_top">Frames</a></li>
+<li><a href="GlobalPermission.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.security.access.GlobalPermission" class="title">Uses of Class<br>org.apache.hadoop.hbase.security.access.GlobalPermission</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.security.access">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a> in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#globalCache">globalCache</a></span></code>
+<div class="block">Cache for global permission.</div>
+</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> that return types with arguments of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#initGlobal-org.apache.hadoop.conf.Configuration-">initGlobal</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block">Initialize with global permission assignments
+ from the <code>hbase.superuser</code> configuration key.</div>
+</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeGlobal-org.apache.hadoop.hbase.security.access.GlobalPermission-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeGlobal</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a>&nbsp;permissions,
+               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/GlobalPermission.html" target="_top">Frames</a></li>
+<li><a href="GlobalPermission.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/NamespacePermission.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/NamespacePermission.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/NamespacePermission.html
new file mode 100644
index 0000000..4163b94
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/NamespacePermission.html
@@ -0,0 +1,186 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.security.access.NamespacePermission (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.security.access.NamespacePermission (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/NamespacePermission.html" target="_top">Frames</a></li>
+<li><a href="NamespacePermission.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.security.access.NamespacePermission" class="title">Uses of Class<br>org.apache.hadoop.hbase.security.access.NamespacePermission</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.security.access">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a> in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>&gt;&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#namespaceCache">namespaceCache</a></span></code>
+<div class="block">Cache for namespace permission.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#NS_NO_PERMISSION">NS_NO_PERMISSION</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Method parameters in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with type arguments of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeNamespace-java.util.Set-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeNamespace</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>&gt;&nbsp;permissions,
+                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                  <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/NamespacePermission.html" target="_top">Frames</a></li>
+<li><a href="NamespacePermission.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[14/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/UserPermission.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/UserPermission.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/UserPermission.html
index da23956..abb7072 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/UserPermission.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/UserPermission.html
@@ -26,191 +26,164 @@
 <span class="sourceLineNo">018</span><a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.DataInput;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.io.DataOutput;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.TableName;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.slf4j.Logger;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.slf4j.LoggerFactory;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * Represents an authorization for access over the given table, column family<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * plus qualifier, for the given user.<a name="line.33"></a>
-<span class="sourceLineNo">034</span> */<a name="line.34"></a>
-<span class="sourceLineNo">035</span>@InterfaceAudience.Private<a name="line.35"></a>
-<span class="sourceLineNo">036</span>public class UserPermission extends TablePermission {<a name="line.36"></a>
-<span class="sourceLineNo">037</span>  private static final Logger LOG = LoggerFactory.getLogger(UserPermission.class);<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>  private byte[] user;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>  /** Nullary constructor for Writable, do not use */<a name="line.41"></a>
-<span class="sourceLineNo">042</span>  public UserPermission() {<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    super();<a name="line.43"></a>
+<span class="sourceLineNo">021</span>import java.util.Objects;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.TableName;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * UserPermission consists of a user name and a permission.<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * Permission can be one of [Global, Namespace, Table] permission.<a name="line.28"></a>
+<span class="sourceLineNo">029</span> */<a name="line.29"></a>
+<span class="sourceLineNo">030</span>@InterfaceAudience.Private<a name="line.30"></a>
+<span class="sourceLineNo">031</span>public class UserPermission {<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>  private String user;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>  private Permission permission;<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>  /**<a name="line.36"></a>
+<span class="sourceLineNo">037</span>   * Construct a global user permission.<a name="line.37"></a>
+<span class="sourceLineNo">038</span>   * @param user user name<a name="line.38"></a>
+<span class="sourceLineNo">039</span>   * @param assigned assigned actions<a name="line.39"></a>
+<span class="sourceLineNo">040</span>   */<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  public UserPermission(String user, Permission.Action... assigned) {<a name="line.41"></a>
+<span class="sourceLineNo">042</span>    this.user = user;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>    this.permission = new GlobalPermission(assigned);<a name="line.43"></a>
 <span class="sourceLineNo">044</span>  }<a name="line.44"></a>
 <span class="sourceLineNo">045</span><a name="line.45"></a>
 <span class="sourceLineNo">046</span>  /**<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   * Creates a new instance for the given user.<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   * @param user the user<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   * @param assigned the list of allowed actions<a name="line.49"></a>
+<span class="sourceLineNo">047</span>   * Construct a global user permission.<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   * @param user user name<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   * @param actionCode action codes<a name="line.49"></a>
 <span class="sourceLineNo">050</span>   */<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  public UserPermission(byte[] user, Action... assigned) {<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    super(null, null, null, assigned);<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    this.user = user;<a name="line.53"></a>
+<span class="sourceLineNo">051</span>  public UserPermission(String user, byte[] actionCode) {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    this.user = user;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    this.permission = new GlobalPermission(actionCode);<a name="line.53"></a>
 <span class="sourceLineNo">054</span>  }<a name="line.54"></a>
 <span class="sourceLineNo">055</span><a name="line.55"></a>
 <span class="sourceLineNo">056</span>  /**<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * Creates a new instance for the given user,<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   * matching the actions with the given codes.<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * @param user the user<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * @param actionCodes the list of allowed action codes<a name="line.60"></a>
+<span class="sourceLineNo">057</span>   * Construct a namespace user permission.<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * @param user user name<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * @param namespace namespace<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   * @param assigned assigned actions<a name="line.60"></a>
 <span class="sourceLineNo">061</span>   */<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public UserPermission(byte[] user, byte[] actionCodes) {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    super(null, null, null, actionCodes);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    this.user = user;<a name="line.64"></a>
+<span class="sourceLineNo">062</span>  public UserPermission(String user, String namespace, Permission.Action... assigned) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    this.user = user;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    this.permission = new NamespacePermission(namespace, assigned);<a name="line.64"></a>
 <span class="sourceLineNo">065</span>  }<a name="line.65"></a>
 <span class="sourceLineNo">066</span><a name="line.66"></a>
 <span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * Creates a new instance for the given user.<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   * @param user the user<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   * @param namespace<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * @param assigned the list of allowed actions<a name="line.71"></a>
+<span class="sourceLineNo">068</span>   * Construct a table user permission.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * @param user user name<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * @param tableName table name<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * @param assigned assigned actions<a name="line.71"></a>
 <span class="sourceLineNo">072</span>   */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public UserPermission(byte[] user, String namespace, Action... assigned) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    super(namespace, assigned);<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    this.user = user;<a name="line.75"></a>
+<span class="sourceLineNo">073</span>  public UserPermission(String user, TableName tableName, Permission.Action... assigned) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    this.user = user;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    this.permission = new TablePermission(tableName, assigned);<a name="line.75"></a>
 <span class="sourceLineNo">076</span>  }<a name="line.76"></a>
 <span class="sourceLineNo">077</span><a name="line.77"></a>
 <span class="sourceLineNo">078</span>  /**<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * Creates a new instance for the given user,<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * matching the actions with the given codes.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * @param user the user<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param namespace<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @param actionCodes the list of allowed action codes<a name="line.83"></a>
+<span class="sourceLineNo">079</span>   * Construct a table:family user permission.<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * @param user user name<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * @param tableName table name<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * @param family family name of table<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * @param assigned assigned actions<a name="line.83"></a>
 <span class="sourceLineNo">084</span>   */<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public UserPermission(byte[] user, String namespace, byte[] actionCodes) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    super(namespace, actionCodes);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    this.user = user;<a name="line.87"></a>
+<span class="sourceLineNo">085</span>  public UserPermission(String user, TableName tableName, byte[] family,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    Permission.Action... assigned) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    this(user, tableName, family, null, assigned);<a name="line.87"></a>
 <span class="sourceLineNo">088</span>  }<a name="line.88"></a>
 <span class="sourceLineNo">089</span><a name="line.89"></a>
 <span class="sourceLineNo">090</span>  /**<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * Creates a new instance for the given user, table and column family.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * @param user the user<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * @param table the table<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param family the family, can be null if action is allowed over the entire<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *   table<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param assigned the list of allowed actions<a name="line.96"></a>
+<span class="sourceLineNo">091</span>   * Construct a table:family:qualifier user permission.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * @param user user name<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param tableName table name<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * @param family family name of table<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param qualifier qualifier name of table<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param assigned assigned actions<a name="line.96"></a>
 <span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  public UserPermission(byte[] user, TableName table, byte[] family,<a name="line.98"></a>
-<span class="sourceLineNo">099</span>                        Action... assigned) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    super(table, family, assigned);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    this.user = user;<a name="line.101"></a>
+<span class="sourceLineNo">098</span>  public UserPermission(String user, TableName tableName, byte[] family, byte[] qualifier,<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      Permission.Action... assigned) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    this.user = user;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    this.permission = new TablePermission(tableName, family, qualifier, assigned);<a name="line.101"></a>
 <span class="sourceLineNo">102</span>  }<a name="line.102"></a>
 <span class="sourceLineNo">103</span><a name="line.103"></a>
 <span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * Creates a new permission for the given user, table, column family and<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * column qualifier.<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * @param user the user<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * @param table the table<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * @param family the family, can be null if action is allowed over the entire<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   *   table<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @param qualifier the column qualifier, can be null if action is allowed<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   *   over the entire column family<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * @param assigned the list of allowed actions<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public UserPermission(byte[] user, TableName table, byte[] family,<a name="line.115"></a>
-<span class="sourceLineNo">116</span>                        byte[] qualifier, Action... assigned) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    super(table, family, qualifier, assigned);<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    this.user = user;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * Creates a new instance for the given user, table, column family and<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * qualifier, matching the actions with the given codes.<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @param user the user<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * @param table the table<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @param family the family, can be null if action is allowed over the entire<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   *   table<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * @param qualifier the column qualifier, can be null if action is allowed<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   *   over the entire column family<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   * @param actionCodes the list of allowed action codes<a name="line.130"></a>
+<span class="sourceLineNo">105</span>   * Construct a table:family:qualifier user permission.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * @param user user name<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @param tableName table name<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @param family family name of table<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * @param qualifier qualifier name of table<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * @param actionCodes assigned actions<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   */<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public UserPermission(String user, TableName tableName, byte[] family, byte[] qualifier,<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      byte[] actionCodes) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    this.user = user;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    this.permission = new TablePermission(tableName, family, qualifier, actionCodes);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /**<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * Construct a user permission given permission.<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param user user name<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param permission one of [Global, Namespace, Table] permission<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public UserPermission(String user, Permission permission) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    this.user = user;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    this.permission = permission;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  /**<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * Get this permission access scope.<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @return access scope<a name="line.130"></a>
 <span class="sourceLineNo">131</span>   */<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public UserPermission(byte[] user, TableName table, byte[] family,<a name="line.132"></a>
-<span class="sourceLineNo">133</span>                        byte[] qualifier, byte[] actionCodes) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    super(table, family, qualifier, actionCodes);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    this.user = user;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  /**<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   * Creates a new instance for the given user, table, column family and<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   * qualifier, matching the actions with the given codes.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * @param user the user<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * @param perm a TablePermission<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  public UserPermission(byte[] user, TablePermission perm) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    super(perm.getNamespace(), perm.getTableName(), perm.getFamily(), perm.getQualifier(),<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        perm.actions);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    this.user = user;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  public byte[] getUser() {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    return user;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>  /**<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * Returns true if this permission describes a global user permission.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  public boolean isGlobal() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    return(!hasTable() &amp;&amp; !hasNamespace());<a name="line.158"></a>
+<span class="sourceLineNo">132</span>  public Permission.Scope getAccessScope() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return permission.getAccessScope();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public String getUser() {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    return user;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public Permission getPermission() {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    return permission;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public boolean equalsExceptActions(Object obj) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    if (!(obj instanceof UserPermission)) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      return false;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    UserPermission other = (UserPermission) obj;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    return user.equals(other.user) &amp;&amp; permission.equalsExceptActions(other.permission);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  @Override<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  public boolean equals(Object obj) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (!(obj instanceof UserPermission)) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      return false;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    UserPermission other = (UserPermission) obj;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    return user.equals(other.user) &amp;&amp; permission.equals(other.permission);<a name="line.158"></a>
 <span class="sourceLineNo">159</span>  }<a name="line.159"></a>
 <span class="sourceLineNo">160</span><a name="line.160"></a>
 <span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public boolean equals(Object obj) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    if (!(obj instanceof UserPermission)) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      return false;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    UserPermission other = (UserPermission)obj;<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    if ((Bytes.equals(user, other.getUser()) &amp;&amp;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        super.equals(obj))) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      return true;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    } else {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      return false;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  @Override<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  public int hashCode() {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    final int prime = 37;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    int result = super.hashCode();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    if (user != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      result = prime * result + Bytes.hashCode(user);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    return result;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  @Override<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  public String toString() {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    StringBuilder str = new StringBuilder("UserPermission: ")<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        .append("user=").append(Bytes.toString(user))<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        .append(", ").append(super.toString());<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    return str.toString();<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  @Override<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  public void readFields(DataInput in) throws IOException {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    super.readFields(in);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    user = Bytes.readByteArray(in);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  @Override<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  public void write(DataOutput out) throws IOException {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    super.write(out);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    Bytes.writeByteArray(out, user);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>}<a name="line.205"></a>
+<span class="sourceLineNo">162</span>  public int hashCode() {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    final int prime = 37;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    int result = permission.hashCode();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    if (user != null) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      result = prime * result + Objects.hashCode(user);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    }<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    return result;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  @Override<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  public String toString() {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    StringBuilder str = new StringBuilder("UserPermission: ")<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        .append("user=").append(user)<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        .append(", ").append(permission.toString());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    return str.toString();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>}<a name="line.178"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
index c38c185..8240018 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
@@ -57,21 +57,21 @@
 <span class="sourceLineNo">049</span> * {@code /hbase/acl/tablename}, with the znode data containing a serialized<a name="line.49"></a>
 <span class="sourceLineNo">050</span> * list of the permissions granted for the table.  The {@code AccessController}<a name="line.50"></a>
 <span class="sourceLineNo">051</span> * instances on all other cluster hosts watch the znodes for updates, which<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * trigger updates in the {@link TableAuthManager} permission cache.<a name="line.52"></a>
+<span class="sourceLineNo">052</span> * trigger updates in the {@link AuthManager} permission cache.<a name="line.52"></a>
 <span class="sourceLineNo">053</span> */<a name="line.53"></a>
 <span class="sourceLineNo">054</span>@InterfaceAudience.Private<a name="line.54"></a>
 <span class="sourceLineNo">055</span>public class ZKPermissionWatcher extends ZKListener implements Closeable {<a name="line.55"></a>
 <span class="sourceLineNo">056</span>  private static final Logger LOG = LoggerFactory.getLogger(ZKPermissionWatcher.class);<a name="line.56"></a>
 <span class="sourceLineNo">057</span>  // parent node for permissions lists<a name="line.57"></a>
 <span class="sourceLineNo">058</span>  static final String ACL_NODE = "acl";<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private final TableAuthManager authManager;<a name="line.59"></a>
+<span class="sourceLineNo">059</span>  private final AuthManager authManager;<a name="line.59"></a>
 <span class="sourceLineNo">060</span>  private final String aclZNode;<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  private final CountDownLatch initialized = new CountDownLatch(1);<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  private final ExecutorService executor;<a name="line.62"></a>
 <span class="sourceLineNo">063</span>  private Future&lt;?&gt; childrenChangedFuture;<a name="line.63"></a>
 <span class="sourceLineNo">064</span><a name="line.64"></a>
 <span class="sourceLineNo">065</span>  public ZKPermissionWatcher(ZKWatcher watcher,<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      TableAuthManager authManager, Configuration conf) {<a name="line.66"></a>
+<span class="sourceLineNo">066</span>      AuthManager authManager, Configuration conf) {<a name="line.66"></a>
 <span class="sourceLineNo">067</span>    super(watcher);<a name="line.67"></a>
 <span class="sourceLineNo">068</span>    this.authManager = authManager;<a name="line.68"></a>
 <span class="sourceLineNo">069</span>    String aclZnodeParent = conf.get("zookeeper.znode.acl.parent", ACL_NODE);<a name="line.69"></a>


[04/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.BulkLoadAccessTestAction.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.BulkLoadAccessTestAction.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.BulkLoadAccessTestAction.html
index 5062e9b..23b4be7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.BulkLoadAccessTestAction.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAccessController.BulkLoadAccessTestAction.html
@@ -282,7 +282,7 @@
 <span class="sourceLineNo">274</span>  public static void tearDownAfterClass() throws Exception {<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    cleanUp();<a name="line.275"></a>
 <span class="sourceLineNo">276</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int total = TableAuthManager.getTotalRefCount();<a name="line.277"></a>
+<span class="sourceLineNo">277</span>    int total = AuthManager.getTotalRefCount();<a name="line.277"></a>
 <span class="sourceLineNo">278</span>    assertTrue("Unexpected reference count: " + total, total == 0);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>  }<a name="line.279"></a>
 <span class="sourceLineNo">280</span><a name="line.280"></a>
@@ -1642,12 +1642,12 @@
 <span class="sourceLineNo">1634</span>      }<a name="line.1634"></a>
 <span class="sourceLineNo">1635</span><a name="line.1635"></a>
 <span class="sourceLineNo">1636</span>      UserPermission ownerperm =<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>          new UserPermission(Bytes.toBytes(USER_OWNER.getName()), tableName, null, Action.values());<a name="line.1637"></a>
+<span class="sourceLineNo">1637</span>          new UserPermission(USER_OWNER.getName(), tableName, Action.values());<a name="line.1637"></a>
 <span class="sourceLineNo">1638</span>      assertTrue("Owner should have all permissions on table",<a name="line.1638"></a>
 <span class="sourceLineNo">1639</span>        hasFoundUserPermission(ownerperm, perms));<a name="line.1639"></a>
 <span class="sourceLineNo">1640</span><a name="line.1640"></a>
 <span class="sourceLineNo">1641</span>      User user = User.createUserForTesting(TEST_UTIL.getConfiguration(), "user", new String[0]);<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      byte[] userName = Bytes.toBytes(user.getShortName());<a name="line.1642"></a>
+<span class="sourceLineNo">1642</span>      String userName = user.getShortName();<a name="line.1642"></a>
 <span class="sourceLineNo">1643</span><a name="line.1643"></a>
 <span class="sourceLineNo">1644</span>      UserPermission up =<a name="line.1644"></a>
 <span class="sourceLineNo">1645</span>          new UserPermission(userName, tableName, family1, qualifier, Permission.Action.READ);<a name="line.1645"></a>
@@ -1733,7 +1733,7 @@
 <span class="sourceLineNo">1725</span>      }<a name="line.1725"></a>
 <span class="sourceLineNo">1726</span><a name="line.1726"></a>
 <span class="sourceLineNo">1727</span>      UserPermission newOwnerperm =<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          new UserPermission(Bytes.toBytes(newOwner.getName()), tableName, null, Action.values());<a name="line.1728"></a>
+<span class="sourceLineNo">1728</span>          new UserPermission(newOwner.getName(), tableName, Action.values());<a name="line.1728"></a>
 <span class="sourceLineNo">1729</span>      assertTrue("New owner should have all permissions on table",<a name="line.1729"></a>
 <span class="sourceLineNo">1730</span>        hasFoundUserPermission(newOwnerperm, perms));<a name="line.1730"></a>
 <span class="sourceLineNo">1731</span>    } finally {<a name="line.1731"></a>
@@ -1757,1888 +1757,1898 @@
 <span class="sourceLineNo">1749</span><a name="line.1749"></a>
 <span class="sourceLineNo">1750</span>    Collection&lt;String&gt; superUsers = Superusers.getSuperUsers();<a name="line.1750"></a>
 <span class="sourceLineNo">1751</span>    List&lt;UserPermission&gt; adminPerms = new ArrayList&lt;&gt;(superUsers.size() + 1);<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    adminPerms.add(new UserPermission(Bytes.toBytes(USER_ADMIN.getShortName()),<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      AccessControlLists.ACL_TABLE_NAME, null, null, Bytes.toBytes("ACRW")));<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span><a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    for(String user: superUsers) {<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      adminPerms.add(new UserPermission(Bytes.toBytes(user), AccessControlLists.ACL_TABLE_NAME,<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>          null, null, Action.values()));<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    }<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    assertTrue("Only super users, global users and user admin has permission on table hbase:acl " +<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        "per setup", perms.size() == 5 + superUsers.size() &amp;&amp;<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>        hasFoundUserPermission(adminPerms, perms));<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  }<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span><a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  /** global operations */<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private void verifyGlobal(AccessTestAction action) throws Exception {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    verifyAllowed(action, SUPERUSER);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span><a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_NONE, USER_RO);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span><a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>  @Test<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>  public void testCheckPermissions() throws Exception {<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    // --------------------------------------<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    // test global permissions<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>    AccessTestAction globalAdmin = new AccessTestAction() {<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      @Override<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>      public Void run() throws Exception {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.ADMIN);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        return null;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      }<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    };<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    // verify that only superuser can admin<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    verifyGlobal(globalAdmin);<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span><a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>    // --------------------------------------<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    // test multiple permissions<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    AccessTestAction globalReadWrite = new AccessTestAction() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      @Override<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      public Void run() throws Exception {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.READ, Permission.Action.WRITE);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>        return null;<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      }<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    };<a name="line.1793"></a>
+<span class="sourceLineNo">1752</span>    adminPerms.add(new UserPermission(USER_ADMIN.getShortName(), Bytes.toBytes("ACRW")));<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>    for(String user: superUsers) {<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      // Global permission<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      adminPerms.add(new UserPermission(user, Action.values()));<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    }<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    assertTrue("Only super users, global users and user admin has permission on table hbase:acl " +<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        "per setup", perms.size() == 5 + superUsers.size() &amp;&amp;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>        hasFoundUserPermission(adminPerms, perms));<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  /** global operations */<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  private void verifyGlobal(AccessTestAction action) throws Exception {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    verifyAllowed(action, SUPERUSER);<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span><a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_NONE, USER_RO);<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span><a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>  @Test<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>  public void testCheckPermissions() throws Exception {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    // --------------------------------------<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    // test global permissions<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    AccessTestAction globalAdmin = new AccessTestAction() {<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      @Override<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>      public Void run() throws Exception {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.ADMIN);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>        return null;<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    };<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    // verify that only superuser can admin<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    verifyGlobal(globalAdmin);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    // --------------------------------------<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    // test multiple permissions<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    AccessTestAction globalReadWrite = new AccessTestAction() {<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      @Override<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>      public Void run() throws Exception {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        checkGlobalPerms(TEST_UTIL, Permission.Action.READ, Permission.Action.WRITE);<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>        return null;<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    };<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span><a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    verifyGlobal(globalReadWrite);<a name="line.1793"></a>
 <span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    verifyGlobal(globalReadWrite);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span><a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    // --------------------------------------<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    // table/column/qualifier level permissions<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    final byte[] TEST_Q1 = Bytes.toBytes("q1");<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    final byte[] TEST_Q2 = Bytes.toBytes("q2");<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span><a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    User userTable = User.createUserForTesting(conf, "user_check_perms_table", new String[0]);<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    User userColumn = User.createUserForTesting(conf, "user_check_perms_family", new String[0]);<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    User userQualifier = User.createUserForTesting(conf, "user_check_perms_q", new String[0]);<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span><a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    grantOnTable(TEST_UTIL, userTable.getShortName(),<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      TEST_TABLE, null, null,<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      Permission.Action.READ);<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    grantOnTable(TEST_UTIL, userColumn.getShortName(),<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>      TEST_TABLE, TEST_FAMILY, null,<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>      Permission.Action.READ);<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>    grantOnTable(TEST_UTIL, userQualifier.getShortName(),<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>      Permission.Action.READ);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span><a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>    try {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      AccessTestAction tableRead = new AccessTestAction() {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>        @Override<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>        public Void run() throws Exception {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, null, null, Permission.Action.READ);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>          return null;<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        }<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      };<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span><a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      AccessTestAction columnRead = new AccessTestAction() {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        @Override<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>        public Void run() throws Exception {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ);<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          return null;<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      };<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>      AccessTestAction qualifierRead = new AccessTestAction() {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>        @Override<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        public Void run() throws Exception {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ);<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>          return null;<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>        }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>      };<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span><a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>      AccessTestAction multiQualifierRead = new AccessTestAction() {<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>        @Override<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        public Void run() throws Exception {<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ),<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q2, Permission.Action.READ), });<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>          return null;<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        }<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      };<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>      AccessTestAction globalAndTableRead = new AccessTestAction() {<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>        @Override<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        public Void run() throws Exception {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>              new Permission(Permission.Action.READ),<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>              new TablePermission(TEST_TABLE, null, (byte[]) null, Permission.Action.READ), });<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>          return null;<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>        }<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      };<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span><a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      AccessTestAction noCheck = new AccessTestAction() {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>        @Override<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        public Void run() throws Exception {<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[0]);<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>          return null;<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>        }<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      };<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span><a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      verifyAllowed(tableRead, SUPERUSER, userTable);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>      verifyDenied(tableRead, userColumn, userQualifier);<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span><a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      verifyAllowed(columnRead, SUPERUSER, userTable, userColumn);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      verifyDenied(columnRead, userQualifier);<a name="line.1873"></a>
+<span class="sourceLineNo">1795</span>    // --------------------------------------<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    // table/column/qualifier level permissions<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>    final byte[] TEST_Q1 = Bytes.toBytes("q1");<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    final byte[] TEST_Q2 = Bytes.toBytes("q2");<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    User userTable = User.createUserForTesting(conf, "user_check_perms_table", new String[0]);<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    User userColumn = User.createUserForTesting(conf, "user_check_perms_family", new String[0]);<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    User userQualifier = User.createUserForTesting(conf, "user_check_perms_q", new String[0]);<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span><a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>    grantOnTable(TEST_UTIL, userTable.getShortName(),<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>      TEST_TABLE, null, null,<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      Permission.Action.READ);<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    grantOnTable(TEST_UTIL, userColumn.getShortName(),<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      TEST_TABLE, TEST_FAMILY, null,<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>      Permission.Action.READ);<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    grantOnTable(TEST_UTIL, userQualifier.getShortName(),<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      Permission.Action.READ);<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span><a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    try {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>      AccessTestAction tableRead = new AccessTestAction() {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>        @Override<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        public Void run() throws Exception {<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, null, null, Permission.Action.READ);<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>          return null;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>        }<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>      };<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span><a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>      AccessTestAction columnRead = new AccessTestAction() {<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>        @Override<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        public Void run() throws Exception {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ);<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>          return null;<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>        }<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      };<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      AccessTestAction qualifierRead = new AccessTestAction() {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        @Override<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        public Void run() throws Exception {<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ);<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          return null;<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>        }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>      };<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span><a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>      AccessTestAction multiQualifierRead = new AccessTestAction() {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>        @Override<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>        public Void run() throws Exception {<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q1, Permission.Action.READ),<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>              new TablePermission(TEST_TABLE, TEST_FAMILY, TEST_Q2, Permission.Action.READ), });<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          return null;<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>        }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      };<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span><a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>      AccessTestAction globalAndTableRead = new AccessTestAction() {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>        @Override<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>        public Void run() throws Exception {<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[] {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>              new Permission(Permission.Action.READ),<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>              new TablePermission(TEST_TABLE, null, (byte[]) null, Permission.Action.READ), });<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>          return null;<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      };<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span><a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      AccessTestAction noCheck = new AccessTestAction() {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>        @Override<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>        public Void run() throws Exception {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, new Permission[0]);<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>          return null;<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>        }<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      };<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>      verifyAllowed(tableRead, SUPERUSER, userTable);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      verifyDenied(tableRead, userColumn, userQualifier);<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span><a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      verifyAllowed(columnRead, SUPERUSER, userTable, userColumn);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>      verifyDenied(columnRead, userQualifier);<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span><a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      verifyAllowed(qualifierRead, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1873"></a>
 <span class="sourceLineNo">1874</span><a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      verifyAllowed(qualifierRead, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span><a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>      verifyAllowed(multiQualifierRead, SUPERUSER, userTable, userColumn);<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      verifyDenied(multiQualifierRead, userQualifier);<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span><a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>      verifyAllowed(globalAndTableRead, SUPERUSER);<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>      verifyDenied(globalAndTableRead, userTable, userColumn, userQualifier);<a name="line.1881"></a>
+<span class="sourceLineNo">1875</span>      verifyAllowed(multiQualifierRead, SUPERUSER, userTable, userColumn);<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      verifyDenied(multiQualifierRead, userQualifier);<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span><a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      verifyAllowed(globalAndTableRead, SUPERUSER);<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      verifyDenied(globalAndTableRead, userTable, userColumn, userQualifier);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span><a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>      verifyAllowed(noCheck, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1881"></a>
 <span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>      verifyAllowed(noCheck, SUPERUSER, userTable, userColumn, userQualifier);<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span><a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>      // --------------------------------------<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      // test family level multiple permissions<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      AccessTestAction familyReadWrite = new AccessTestAction() {<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>        @Override<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        public Void run() throws Exception {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ,<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>            Permission.Action.WRITE);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          return null;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        }<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>      };<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span><a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      verifyAllowed(familyReadWrite, SUPERUSER, USER_OWNER, USER_CREATE, USER_RW);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      verifyDenied(familyReadWrite, USER_NONE, USER_RO);<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span><a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>      // --------------------------------------<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      // check for wrong table region<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>      CheckPermissionsRequest checkRequest =<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>          CheckPermissionsRequest<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>              .newBuilder()<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>              .addPermission(<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>                AccessControlProtos.Permission<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>                    .newBuilder()<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>                    .setType(AccessControlProtos.Permission.Type.Table)<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>                    .setTablePermission(<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>                      AccessControlProtos.TablePermission.newBuilder()<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>                          .setTableName(ProtobufUtil.toProtoTableName(TEST_TABLE))<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>                          .addAction(AccessControlProtos.Permission.Action.CREATE))).build();<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      Table acl = systemUserConnection.getTable(AccessControlLists.ACL_TABLE_NAME);<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      try {<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>        BlockingRpcChannel channel = acl.coprocessorService(new byte[0]);<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        AccessControlService.BlockingInterface protocol =<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>            AccessControlService.newBlockingStub(channel);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>        try {<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>          // but ask for TablePermissions for TEST_TABLE<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>          protocol.checkPermissions(null, checkRequest);<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>          fail("this should have thrown CoprocessorException");<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>        } catch (ServiceException ex) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>          // expected<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        }<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>      } finally {<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        acl.close();<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    } finally {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      revokeFromTable(TEST_UTIL, userTable.getShortName(), TEST_TABLE, null, null,<a name="line.1929"></a>
+<span class="sourceLineNo">1883</span>      // --------------------------------------<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>      // test family level multiple permissions<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>      AccessTestAction familyReadWrite = new AccessTestAction() {<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>        @Override<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>        public Void run() throws Exception {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>          checkTablePerms(TEST_UTIL, TEST_TABLE, TEST_FAMILY, null, Permission.Action.READ,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>            Permission.Action.WRITE);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>          return null;<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        }<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      };<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span><a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>      verifyAllowed(familyReadWrite, SUPERUSER, USER_OWNER, USER_CREATE, USER_RW);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      verifyDenied(familyReadWrite, USER_NONE, USER_RO);<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span><a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      // --------------------------------------<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>      // check for wrong table region<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>      CheckPermissionsRequest checkRequest =<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>          CheckPermissionsRequest<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>              .newBuilder()<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>              .addPermission(<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>                AccessControlProtos.Permission<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>                    .newBuilder()<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>                    .setType(AccessControlProtos.Permission.Type.Table)<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>                    .setTablePermission(<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>                      AccessControlProtos.TablePermission.newBuilder()<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>                          .setTableName(ProtobufUtil.toProtoTableName(TEST_TABLE))<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>                          .addAction(AccessControlProtos.Permission.Action.CREATE))).build();<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>      Table acl = systemUserConnection.getTable(AccessControlLists.ACL_TABLE_NAME);<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      try {<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>        BlockingRpcChannel channel = acl.coprocessorService(new byte[0]);<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>        AccessControlService.BlockingInterface protocol =<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>            AccessControlService.newBlockingStub(channel);<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>        try {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>          // but ask for TablePermissions for TEST_TABLE<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>          protocol.checkPermissions(null, checkRequest);<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>          fail("this should have thrown CoprocessorException");<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>        } catch (ServiceException ex) {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>          // expected<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>        }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      } finally {<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>        acl.close();<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>      }<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span><a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    } finally {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      revokeFromTable(TEST_UTIL, userTable.getShortName(), TEST_TABLE, null, null,<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        Permission.Action.READ);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      revokeFromTable(TEST_UTIL, userColumn.getShortName(), TEST_TABLE, TEST_FAMILY, null,<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>        Permission.Action.READ);<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      revokeFromTable(TEST_UTIL, userColumn.getShortName(), TEST_TABLE, TEST_FAMILY, null,<a name="line.1931"></a>
+<span class="sourceLineNo">1931</span>      revokeFromTable(TEST_UTIL, userQualifier.getShortName(), TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1931"></a>
 <span class="sourceLineNo">1932</span>        Permission.Action.READ);<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      revokeFromTable(TEST_UTIL, userQualifier.getShortName(), TEST_TABLE, TEST_FAMILY, TEST_Q1,<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>        Permission.Action.READ);<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  }<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  @Test<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>  public void testStopRegionServer() throws Exception {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      @Override<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      public Object run() throws Exception {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        ACCESS_CONTROLLER.preStopRegionServer(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>        return null;<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>      }<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    };<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>  }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span><a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>  @Test<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>  public void testRollWALWriterRequest() throws Exception {<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>      @Override<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>      public Object run() throws Exception {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>        ACCESS_CONTROLLER.preRollWALWriterRequest(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>        return null;<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      }<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>    };<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span><a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>  }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span><a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  @Test<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>  public void testOpenRegion() throws Exception {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>      @Override<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>      public Object run() throws Exception {<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>        ACCESS_CONTROLLER.preOpen(ObserverContextImpl.createAndPrepare(RCP_ENV));<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>        return null;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>      }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    };<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span><a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>  @Test<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>  public void testCloseRegion() throws Exception {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>      @Override<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>      public Object run() throws Exception {<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>        ACCESS_CONTROLLER.preClose(ObserverContextImpl.createAndPrepare(RCP_ENV), false);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>        return null;<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      }<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    };<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>  }<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span><a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>  @Test<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  public void testSnapshot() throws Exception {<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    final HTableDescriptor htd = admin.getTableDescriptor(TEST_TABLE);<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    final SnapshotDescription snapshot = new SnapshotDescription(<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>        TEST_TABLE.getNameAsString() + "-snapshot", TEST_TABLE);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    AccessTestAction snapshotAction = new AccessTestAction() {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>      @Override<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      public Object run() throws Exception {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        ACCESS_CONTROLLER.preSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>          snapshot, htd);<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>        return null;<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>      }<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>    };<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span><a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    AccessTestAction deleteAction = new AccessTestAction() {<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>      @Override<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>      public Object run() throws Exception {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        ACCESS_CONTROLLER.preDeleteSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          snapshot);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>        return null;<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>      }<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    };<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span><a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    AccessTestAction restoreAction = new AccessTestAction() {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>      @Override<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      public Object run() throws Exception {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>        ACCESS_CONTROLLER.preRestoreSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>          snapshot, htd);<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>        return null;<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      }<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    };<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span><a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    AccessTestAction cloneAction = new AccessTestAction() {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      @Override<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>      public Object run() throws Exception {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>        ACCESS_CONTROLLER.preCloneSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>          snapshot, null);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>        return null;<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      }<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>    };<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span><a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    verifyAllowed(snapshotAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    verifyDenied(snapshotAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    verifyAllowed(cloneAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    verifyDenied(deleteAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    verifyAllowed(restoreAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    verifyDenied(restoreAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span><a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    verifyAllowed(deleteAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    verifyDenied(cloneAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  }<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span><a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>  @Test<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>  public void testSnapshotWithOwner() throws Exception {<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>    final HTableDescriptor htd = admin.getTableDescriptor(TEST_TABLE);<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>    final SnapshotDescription snapshot = new SnapshotDescription(<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        TEST_TABLE.getNameAsString() + "-snapshot", TEST_TABLE, null, USER_OWNER.getName());<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span><a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    AccessTestAction snapshotAction = new AccessTestAction() {<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>      @Override<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      public Object run() throws Exception {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>        ACCESS_CONTROLLER.preSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>            snapshot, htd);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>        return null;<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    };<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    verifyAllowed(snapshotAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    verifyDenied(snapshotAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span><a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    AccessTestAction deleteAction = new AccessTestAction() {<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      @Override<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      public Object run() throws Exception {<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        ACCESS_CONTROLLER.preDeleteSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>          snapshot);<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        return null;<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    };<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>    verifyAllowed(deleteAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    verifyDenied(deleteAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span><a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    AccessTestAction restoreAction = new AccessTestAction() {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      @Override<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      public Object run() throws Exception {<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>        ACCESS_CONTROLLER.preRestoreSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          snapshot, htd);<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>        return null;<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      }<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    };<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    verifyAllowed(restoreAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    verifyDenied(restoreAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>    AccessTestAction cloneAction = new AccessTestAction() {<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>      @Override<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>      public Object run() throws Exception {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>        ACCESS_CONTROLLER.preCloneSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>          snapshot, htd);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        return null;<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    };<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    verifyAllowed(cloneAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN, USER_OWNER);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    verifyDenied(cloneAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  }<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span><a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>  @Test<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>  public void testGlobalAuthorizationForNewRegisteredRS() throws Exception {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    LOG.debug("Test for global authorization for a new registered RegionServer.");<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    MiniHBaseCluster hbaseCluster = TEST_UTIL.getHBaseCluster();<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>    final Admin admin = TEST_UTIL.getAdmin();<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    HTableDescriptor htd = new HTableDescriptor(TEST_TABLE2);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    htd.addFamily(new HColumnDescriptor(TEST_FAMILY));<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>    createTable(TEST_UTIL, htd);<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span><a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    // Starting a new RegionServer.<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    JVMClusterUtil.RegionServerThread newRsThread = hbaseCluster<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>        .startRegionServer();<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>    final HRegionServer newRs = newRsThread.getRegionServer();<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span><a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>    // Move region to the new RegionServer.<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    List&lt;HRegionLocation&gt; regions;<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>    try (RegionLocator locator = systemUserConnection.getRegionLocator(TEST_TABLE2)) {<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      regions = locator.getAllRegionLocations();<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    }<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    HRegionLocation location = regions.get(0);<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    final HRegionInfo hri = location.getRegionInfo();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    final ServerName server = location.getServerName();<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    try (Table table = systemUserConnection.getTable(TEST_TABLE2)) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      AccessTestAction moveAction = new AccessTestAction() {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        @Override<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>        public Object run() throws Exception {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>          admin.move(hri.getEncodedNameAsBytes(),<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>            Bytes.toBytes(newRs.getServerName().getServerName()));<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          return null;<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>        }<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>      };<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      SUPERUSER.runAs(moveAction);<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span><a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      final int RETRIES_LIMIT = 10;<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>      int retries = 0;<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>      while (newRs.getRegions(TEST_TABLE2).size() &lt; 1 &amp;&amp; retries &lt; RETRIES_LIMIT) {<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        LOG.debug("Waiting for region to be opened. Already retried " + retries<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>            + " times.");<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>        try {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>          Thread.sleep(1000);<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>        } catch (InterruptedException e) {<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>        }<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>        retries++;<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>        if (retries == RETRIES_LIMIT - 1) {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>          fail("Retry exhaust for waiting region to be opened.");<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>        }<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>      }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>      // Verify write permission for user "admin2" who has the global<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>      // permissions.<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>      AccessTestAction putAction = new AccessTestAction() {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>        @Override<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>        public Object run() throws Exception {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>          Put put = new Put(Bytes.toBytes("test"));<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          put.addColumn(TEST_FAMILY, Bytes.toBytes("qual"), Bytes.toBytes("value"));<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>          table.put(put);<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>          return null;<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>        }<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>      };<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>      USER_ADMIN.runAs(putAction);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    }<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span><a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>  @Test<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>  public void testTableDescriptorsEnumeration() throws Exception {<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    User TABLE_ADMIN = User.createUserForTesting(conf, "UserA", new String[0]);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span><a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    // Grant TABLE ADMIN privs<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    grantOnTable(TEST_UTIL, TABLE_ADMIN.getShortName(), TEST_TABLE, null, null,<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>      Permission.Action.ADMIN);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    try {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>      AccessTestAction listTablesAction = new AccessTestAction() {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>        @Override<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>        public Object run() throws Exception {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>          try (Connection conn = ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>              Admin admin = conn.getAdmin()) {<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>            return Arrays.asList(admin.listTables());<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>          }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>        }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>      };<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span><a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>      AccessTestAction getTableDescAction = new AccessTestAction() {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>        @Override<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>        public Object run() throws Exception {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>          try (Connection conn = ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>              Admin admin = conn.getAdmin()) {<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>            return admin.getTableDescriptor(TEST_TABLE);<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>          }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>        }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>      };<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      verifyAllowed(listTablesAction, SUPERUSER, USER_ADMIN, USER_CREATE, USER_OWNER, TABLE_ADMIN,<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>        USER_GROUP_CREATE, USER_GROUP_ADMIN);<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      verifyIfEmptyList(listTablesAction, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>        USER_GROUP_WRITE);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span><a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      verifyAllowed(getTableDescAction, SUPERUSER, USER_ADMIN, USER_CREATE, USER_OWNER,<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        TABLE_ADMIN, USER_GROUP_CREATE, USER_GROUP_ADMIN);<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      verifyDenied(getTableDescAction, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        USER_GROUP_WRITE);<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    } finally {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      // Cleanup, revoke TABLE ADMIN privs<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      revokeFromTable(TEST_UTIL, TABLE_ADMIN.getShortName(), TEST_TABLE, null, null,<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        Permission.Action.ADMIN);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    }<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>  }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span><a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>  @Test<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  public void testTableNameEnumeration() throws Exception {<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>    AccessTestAction listTablesAction = new AccessTestAction() {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>      @Override<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      public Object run() throws Exception {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>        Connection unmanagedConnection =<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>            ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>        Admin admin = unmanagedConnection.getAdmin();<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        try {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          return Arrays.asList(admin.listTableNames());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>        } finally {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>          admin.close();<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>          unmanagedConnection.close();<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>        }<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    };<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span><a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>    verifyAllowed(listTablesAction, SUPERUSER, USER_ADMIN, USER_CREATE, USER_OWNER, USER_RW,<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      USER_RO, USER_GROUP_CREATE, USER_GROUP_ADMIN, USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>    verifyIfEmptyList(listTablesAction, USER_NONE);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>  }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span><a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  @Test<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  public void testTableDeletion() throws Exception {<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>    User TABLE_ADMIN = User.createUserForTesting(conf, "TestUser", new String[0]);<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>    createTestTable(tableName);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span><a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>    // Grant TABLE ADMIN privs<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>    grantOnTable(TEST_UTIL, TABLE_ADMIN.getShortName(), tableName, null, null, Permission.Action.ADMIN);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span><a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    AccessTestAction deleteTableAction = new AccessTestAction() {<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      @Override<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      public Object run() throws Exception {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        Connection unmanagedConnection =<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>            ConnectionFactory.createConnection(TEST_UTIL.getConfiguration());<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>        Admin admin = unmanagedConnection.getAdmin();<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>        try {<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>          deleteTable(TEST_UTIL, admin, tableName);<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>        } finally {<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>          admin.close();<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>          unmanagedConnection.close();<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>        }<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>        return null;<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>      }<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>    };<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span><a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    verifyDenied(deleteTableAction, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      USER_GROUP_WRITE);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    verifyAllowed(deleteTableAction, TABLE_ADMIN);<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>  }<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span><a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>  private void createTestTable(TableName tname) throws Exception {<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    createTestTable(tname, TEST_FAMILY);<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>  }<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span><a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>  private void createTestTable(TableName tname, byte[] cf) throws Exception {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    HTableDescriptor htd = new HTableDescriptor(tname);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    HColumnDescriptor hcd = new HColumnDescriptor(cf);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    hcd.setMaxVersions(100);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    htd.addFamily(hcd);<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    htd.setOwner(USER_OWNER);<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    createTable(TEST_UTIL, htd, new byte[][] { Bytes.toBytes("s") });<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>  }<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span><a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>  @Test<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>  public void testNamespaceUserGrant() throws Exception {<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    AccessTestAction getAction = new AccessTestAction() {<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>      @Override<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>      public Object run() throws Exception {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        try(Connection conn = ConnectionFactory.createConnection(conf);<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>            Table t = conn.getTable(TEST_TABLE)) {<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          return t.get(new Get(TEST_ROW));<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>        }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    };<a name="line.2295"></a>
+<span class="sourceLineNo">1933</span>    }<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>  }<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span><a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>  @Test<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  public void testStopRegionServer() throws Exception {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>      @Override<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      public Object run() throws Exception {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>        ACCESS_CONTROLLER.preStopRegionServer(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>        return null;<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>      }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    };<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span><a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>  }<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span><a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>  @Test<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>  public void testRollWALWriterRequest() throws Exception {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>      @Override<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>      public Object run() throws Exception {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        ACCESS_CONTROLLER.preRollWALWriterRequest(ObserverContextImpl.createAndPrepare(RSCP_ENV));<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        return null;<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    };<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>    verifyDenied(action, USER_CREATE, USER_OWNER, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>  }<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span><a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>  @Test<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>  public void testOpenRegion() throws Exception {<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>      @Override<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>      public Object run() throws Exception {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>        ACCESS_CONTROLLER.preOpen(ObserverContextImpl.createAndPrepare(RCP_ENV));<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>        return null;<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>      }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    };<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span><a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span><a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  @Test<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>  public void testCloseRegion() throws Exception {<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    AccessTestAction action = new AccessTestAction() {<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>      @Override<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      public Object run() throws Exception {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        ACCESS_CONTROLLER.preClose(ObserverContextImpl.createAndPrepare(RCP_ENV), false);<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>        return null;<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>      }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    };<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    verifyAllowed(action, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    verifyDenied(action, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER, USER_GROUP_CREATE,<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>      USER_GROUP_READ, USER_GROUP_WRITE);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>  }<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>  @Test<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>  public void testSnapshot() throws Exception {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>    final HTableDescriptor htd = admin.getTableDescriptor(TEST_TABLE);<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    final SnapshotDescription snapshot = new SnapshotDescription(<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        TEST_TABLE.getNameAsString() + "-snapshot", TEST_TABLE);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    AccessTestAction snapshotAction = new AccessTestAction() {<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      @Override<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      public Object run() throws Exception {<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        ACCESS_CONTROLLER.preSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>          snapshot, htd);<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        return null;<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>      }<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    };<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span><a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    AccessTestAction deleteAction = new AccessTestAction() {<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>      @Override<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      public Object run() throws Exception {<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>        ACCESS_CONTROLLER.preDeleteSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          snapshot);<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>        return null;<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>      }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>    };<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>    AccessTestAction restoreAction = new AccessTestAction() {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>      @Override<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>      public Object run() throws Exception {<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>        ACCESS_CONTROLLER.preRestoreSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>          snapshot, htd);<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        return null;<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>      }<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>    };<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span><a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>    AccessTestAction cloneAction = new AccessTestAction() {<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>      @Override<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>      public Object run() throws Exception {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>        ACCESS_CONTROLLER.preCloneSnapshot(ObserverContextImpl.createAndPrepare(CP_ENV),<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>          snapshot, null);<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>        return null;<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>      }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>    };<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    verifyAllowed(snapshotAction, SUPERUSER, USER_ADMIN, USER_OWNER, USER_GROUP_ADMIN);<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    verifyDenied(snapshotAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_GROUP_READ,<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>      USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span><a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    verifyAllowed(cloneAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>    verifyDenied(deleteAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span><a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    verifyAllowed(restoreAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    verifyDenied(restoreAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span><a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    verifyAllowed(deleteAction, SUPERUSER, USER_ADMIN, USER_GROUP_ADMIN);<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    verifyDenied(cloneAction, USER_CREATE, USER_RW, USER_RO, USER_NONE, USER_OWNER,<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>      USER_GROUP_READ, USER_GROUP_WRITE, USER_GROUP_CREATE);<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>  @Test<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>  public void testSnapshotWithOwner() throws Exc

<TRUNCATED>

[37/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/Permission.Scope.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/Permission.Scope.html b/devapidocs/org/apache/hadoop/hbase/security/access/Permission.Scope.html
new file mode 100644
index 0000000..2e5ccef
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/Permission.Scope.html
@@ -0,0 +1,420 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Permission.Scope (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Permission.Scope (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":9,"i2":9};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Permission.Scope.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/Permission.Scope.html" target="_top">Frames</a></li>
+<li><a href="Permission.Scope.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum.constant.summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum.constant.detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
+<h2 title="Enum Permission.Scope" class="title">Enum Permission.Scope</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.security.access.Permission.Scope</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a>&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+protected static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.59">Permission.Scope</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a>&gt;</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.summary">
+<!--   -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html#EMPTY">EMPTY</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html#GLOBAL">GLOBAL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html#NAMESPACE">NAMESPACE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html#TABLE">TABLE</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private byte</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html#code">code</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>byte</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html#code--">code</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html#valueOf-java.lang.String-">valueOf</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html#values--">values</a></span>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Enum">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#compareTo-E-" title="class or interface in java.lang">compareTo</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass--" title="class or interface in java.lang">getDeclaringClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/
 8/docs/api/java/lang/Enum.html?is-external=true#name--" title="class or interface in java.lang">name</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#ordinal--" title="class or interface in java.lang">ordinal</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#valueOf-java.lang.Class-java.lang.String-" title="class or interface in java.lang">valueOf</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.detail">
+<!--   -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="GLOBAL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>GLOBAL</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Scope.html#line.60">GLOBAL</a></pre>
+</li>
+</ul>
+<a name="NAMESPACE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NAMESPACE</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Scope.html#line.60">NAMESPACE</a></pre>
+</li>
+</ul>
+<a name="TABLE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TABLE</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Scope.html#line.60">TABLE</a></pre>
+</li>
+</ul>
+<a name="EMPTY">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>EMPTY</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Scope.html#line.60">EMPTY</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="code">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>code</h4>
+<pre>private final&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Scope.html#line.62">code</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="values--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Scope.html#line.44">values</a>()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.  This method may be used to iterate
+over the constants as follows:
+<pre>
+for (Permission.Scope c : Permission.Scope.values())
+&nbsp;   System.out.println(c);
+</pre></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an array containing the constants of this enum type, in the order they are declared</dd>
+</dl>
+</li>
+</ul>
+<a name="valueOf-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Scope.html#line.44">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type.  (Extraneous whitespace characters are 
+not permitted.)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the enum constant with the specified name</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant with the specified name</dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd>
+</dl>
+</li>
+</ul>
+<a name="code--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>code</h4>
+<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.Scope.html#line.67">code</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/Permission.Scope.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/Permission.Scope.html" target="_top">Frames</a></li>
+<li><a href="Permission.Scope.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum.constant.summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum.constant.detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/Permission.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/Permission.html b/devapidocs/org/apache/hadoop/hbase/security/access/Permission.html
index 8e0db86..11b680e 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/Permission.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/Permission.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -118,12 +118,12 @@ var activeTableTab = "activeTableTab";
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dd>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dd>
 </dl>
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.42">Permission</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.43">Permission</a>
 extends org.apache.hadoop.io.VersionedWritable</pre>
 <div class="block">Base permissions instance representing the ability to perform a given set
  of actions.</div>
@@ -153,6 +153,10 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <td class="colFirst"><code>static class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></span></code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -173,7 +177,7 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#ACTION_BY_CODE">ACTION_BY_CODE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>[]</code></td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#actions">actions</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
@@ -181,6 +185,14 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#scope">scope</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang">Byte</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#SCOPE_BY_CODE">SCOPE_BY_CODE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>protected static byte</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#VERSION">VERSION</a></span></code>&nbsp;</td>
 </tr>
@@ -229,34 +241,50 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#equals-java.lang.Object-">equals</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#equalsExceptActions-java.lang.Object-">equalsExceptActions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</code>
+<div class="block">Check if two permission equals regardless of actions.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getAccessScope--">getAccessScope</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getActions--">getActions</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>byte</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getVersion--">getVersion</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#hashCode--">hashCode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#implies-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#implies-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">check if given action is granted</div>
+</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#rawExpression--">rawExpression</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#readFields-java.io.DataInput-">readFields</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in)</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#setActions-org.apache.hadoop.hbase.security.access.Permission.Action:A-">setActions</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>[]&nbsp;assigned)</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#write-java.io.DataOutput-">write</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)</code>&nbsp;</td>
 </tr>
@@ -288,7 +316,7 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>VERSION</h4>
-<pre>protected static final&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.43">VERSION</a></pre>
+<pre>protected static final&nbsp;byte <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.44">VERSION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.security.access.Permission.VERSION">Constant Field Values</a></dd>
@@ -301,7 +329,7 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.57">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.72">LOG</a></pre>
 </li>
 </ul>
 <a name="ACTION_BY_CODE">
@@ -310,16 +338,34 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>ACTION_BY_CODE</h4>
-<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang">Byte</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.58">ACTION_BY_CODE</a></pre>
+<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang">Byte</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.74">ACTION_BY_CODE</a></pre>
+</li>
+</ul>
+<a name="SCOPE_BY_CODE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>SCOPE_BY_CODE</h4>
+<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang">Byte</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.75">SCOPE_BY_CODE</a></pre>
 </li>
 </ul>
 <a name="actions">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>actions</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.60">actions</a></pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.77">actions</a></pre>
+</li>
+</ul>
+<a name="scope">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>scope</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.78">scope</a></pre>
 </li>
 </ul>
 </li>
@@ -336,7 +382,7 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>Permission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.69">Permission</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.98">Permission</a>()</pre>
 <div class="block">Empty constructor for Writable implementation.  <b>Do not use.</b></div>
 </li>
 </ul>
@@ -346,7 +392,7 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>Permission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.73">Permission</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.102">Permission</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</pre>
 </li>
 </ul>
 <a name="Permission-byte:A-">
@@ -355,7 +401,7 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Permission</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.79">Permission</a>(byte[]&nbsp;actionCodes)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.108">Permission</a>(byte[]&nbsp;actionCodes)</pre>
 </li>
 </ul>
 </li>
@@ -372,7 +418,7 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getActions</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.97">getActions</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.122">getActions</a>()</pre>
 </li>
 </ul>
 <a name="implies-org.apache.hadoop.hbase.security.access.Permission.Action-">
@@ -381,7 +427,14 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>implies</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.101">implies</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.131">implies</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+<div class="block">check if given action is granted</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>action</code> - action to be checked</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if granted, false otherwise</dd>
+</dl>
 </li>
 </ul>
 <a name="setActions-org.apache.hadoop.hbase.security.access.Permission.Action:A-">
@@ -390,7 +443,25 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setActions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.113">setActions</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>[]&nbsp;assigned)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.135">setActions</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>[]&nbsp;assigned)</pre>
+</li>
+</ul>
+<a name="equalsExceptActions-java.lang.Object-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>equalsExceptActions</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.151">equalsExceptActions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
+<div class="block">Check if two permission equals regardless of actions. It is useful when
+ merging a new permission with an existed permission which needs to check two permissions's
+ fields.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>obj</code> - instance</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if equals, false otherwise</dd>
+</dl>
 </li>
 </ul>
 <a name="equals-java.lang.Object-">
@@ -399,7 +470,7 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.120">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.156">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -412,7 +483,7 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.148">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.174">hashCode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -425,20 +496,29 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.158">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.185">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
 </dl>
 </li>
 </ul>
+<a name="rawExpression--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rawExpression</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.189">rawExpression</a>()</pre>
+</li>
+</ul>
 <a name="getVersion--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getVersion</h4>
-<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.178">getVersion</a>()</pre>
+<pre>public&nbsp;byte&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.206">getVersion</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getVersion</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.io.VersionedWritable</code></dd>
@@ -453,7 +533,7 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>readFields</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.183">readFields</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.211">readFields</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -468,10 +548,10 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 <a name="write-java.io.DataOutput-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.203">write</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.230">write</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -483,6 +563,15 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 </dl>
 </li>
 </ul>
+<a name="getAccessScope--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getAccessScope</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/Permission.html#line.241">getAccessScope</a>()</pre>
+</li>
+</ul>
 </li>
 </ul>
 </li>
@@ -511,7 +600,7 @@ extends org.apache.hadoop.io.VersionedWritable</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html b/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html
index 643571b..44c1f3e 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -602,7 +602,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Region
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html b/devapidocs/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html
index b0ec584..efe507b 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9,"i9":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html" target="_top">Frames</a></li>
@@ -156,60 +156,54 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toPermission-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission-">toPermission</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission&nbsp;proto)</code>
+<div class="block">Converts a Permission shaded proto to a client TablePermission object.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toPermission-org.apache.hadoop.hbase.security.access.Permission-">toPermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perm)</code>
 <div class="block">Convert a client Permission to a Permission shaded proto</div>
 </td>
 </tr>
-<tr id="i1" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toPermissionAction-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Action-">toPermissionAction</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Action&nbsp;action)</code>
 <div class="block">Convert a Permission.Action shaded proto to a client Permission.Action object.</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Action</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toPermissionAction-org.apache.hadoop.hbase.security.access.Permission.Action-">toPermissionAction</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
 <div class="block">Convert a client user permission to a user permission shaded proto.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toPermissionActions-java.util.List-">toPermissionActions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Action&gt;&nbsp;protoActions)</code>
 <div class="block">Converts a list of Permission.Action shaded proto to a list of client Permission.Action
  objects.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.TableName</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toProtoTableName-org.apache.hadoop.hbase.TableName-">toProtoTableName</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toTableName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.TableName-">toTableName</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.TableName&nbsp;tableNamePB)</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
-<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toTablePermission-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission-">toTablePermission</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission&nbsp;proto)</code>
-<div class="block">Converts a Permission shaded proto to a client TablePermission object.</div>
-</td>
-</tr>
 <tr id="i7" class="rowColor">
-<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toUserPermission-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UserPermission-">toUserPermission</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UserPermission&nbsp;proto)</code>
-<div class="block">Converts a user permission proto to a client user permission object.</div>
-</td>
-</tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toUserTablePermissions-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions-">toUserTablePermissions</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</code>
 <div class="block">Convert a shaded protobuf UserTablePermissions to a ListMultimap&lt;String, TablePermission&gt;
  where key is username.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toUserTablePermissions-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">toUserTablePermissions</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perm)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toUserTablePermissions-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">toUserTablePermissions</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;perm)</code>
 <div class="block">Convert a ListMultimap&lt;String, TablePermission&gt; where key is username to a shaded
  protobuf UserPermission</div>
 </td>
@@ -308,13 +302,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <pre>public static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.TableName&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#line.111">toProtoTableName</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
-<a name="toTablePermission-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission-">
+<a name="toPermission-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>toTablePermission</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#line.122">toTablePermission</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission&nbsp;proto)</pre>
+<h4>toPermission</h4>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#line.122">toPermission</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission&nbsp;proto)</pre>
 <div class="block">Converts a Permission shaded proto to a client TablePermission object.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -330,7 +324,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toPermission</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#line.169">toPermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perm)</pre>
+<pre>public static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#line.167">toPermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perm)</pre>
 <div class="block">Convert a client Permission to a Permission shaded proto</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -346,7 +340,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toUserTablePermissions</h4>
-<pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#line.239">toUserTablePermissions</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</pre>
+<pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#line.232">toUserTablePermissions</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</pre>
 <div class="block">Convert a shaded protobuf UserTablePermissions to a ListMultimap&lt;String, TablePermission&gt;
  where key is username.</div>
 <dl>
@@ -360,10 +354,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="toUserTablePermissions-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">
 <!--   -->
 </a>
-<ul class="blockList">
+<ul class="blockListLast">
 <li class="blockList">
 <h4>toUserTablePermissions</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#line.261">toUserTablePermissions</a>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perm)</pre>
+<pre>public static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#line.254">toUserTablePermissions</a>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;perm)</pre>
 <div class="block">Convert a ListMultimap&lt;String, TablePermission&gt; where key is username to a shaded
  protobuf UserPermission</div>
 <dl>
@@ -374,22 +368,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
-<a name="toUserPermission-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UserPermission-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>toUserPermission</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#line.284">toUserPermission</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UserPermission&nbsp;proto)</pre>
-<div class="block">Converts a user permission proto to a client user permission object.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>proto</code> - the protobuf UserPermission</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>the converted UserPermission</dd>
-</dl>
-</li>
-</ul>
 </li>
 </ul>
 </li>
@@ -419,7 +397,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html" target="_top">Frames</a></li>


[48/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 036587e..fe6b567 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -642,7 +642,7 @@
 <dd>
 <div class="block">For Writable</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlFilter.html#AccessControlFilter-org.apache.hadoop.hbase.security.access.TableAuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">AccessControlFilter(TableAuthManager, User, TableName, AccessControlFilter.Strategy, Map&lt;ByteRange, Integer&gt;)</a></span> - Constructor for class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlFilter.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlFilter</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlFilter.html#AccessControlFilter-org.apache.hadoop.hbase.security.access.AuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">AccessControlFilter(AuthManager, User, TableName, AccessControlFilter.Strategy, Map&lt;ByteRange, Integer&gt;)</a></span> - Constructor for class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlFilter.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a> - Enum in <a href="org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></dt>
 <dd>&nbsp;</dd>
@@ -698,6 +698,11 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/client/RemoteAdmin.html#accessToken">accessToken</a></span> - Variable in class org.apache.hadoop.hbase.rest.client.<a href="org/apache/hadoop/hbase/rest/client/RemoteAdmin.html" title="class in org.apache.hadoop.hbase.rest.client">RemoteAdmin</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#accessUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">accessUserTable(User, TableName, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
+<dd>
+<div class="block">Checks if the user has access to the full table or at least a family/qualifier
+ for the specified action.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/RegionMover.html#ack">ack</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/RegionMover.html" title="class in org.apache.hadoop.hbase.util">RegionMover</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/RegionMover.RegionMoverBuilder.html#ack">ack</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/RegionMover.RegionMoverBuilder.html" title="class in org.apache.hadoop.hbase.util">RegionMover.RegionMoverBuilder</a></dt>
@@ -4531,8 +4536,18 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlFilter.html#authManager">authManager</a></span> - Variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlFilter.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AuthManager</span></a> - Class in <a href="org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></dt>
+<dd>
+<div class="block">Performs authorization checks for a given user's assigned permissions.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#AuthManager-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">AuthManager(ZKWatcher, Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#authManager">authManager</a></span> - Variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AuthManager.PermissionCache</span></a>&lt;<a href="org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="type parameter in AuthManager.PermissionCache">T</a> extends <a href="org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt; - Class in <a href="org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></dt>
+<dd>
+<div class="block">Cache of permissions, it is thread safe.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/RpcConnection.html#authMethod">authMethod</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/RpcConnection.html" title="class in org.apache.hadoop.hbase.ipc">RpcConnection</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/ServerRpcConnection.html#authMethod">authMethod</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/ServerRpcConnection.html" title="class in org.apache.hadoop.hbase.ipc">ServerRpcConnection</a></dt>
@@ -4597,48 +4612,44 @@
 <dd>
 <div class="block">Authorize the incoming client connection.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize(List&lt;Permission&gt;, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
-<dd>
-<div class="block">Authorizes a global permission</div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize(User, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
-<dd>
-<div class="block">Authorize a global permission based on ACLs for the given user and the
- user's groups.</div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize(List&lt;TablePermission&gt;, TableName, byte[], byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize(User, TableName, Cell, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeCell-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeCell(User, TableName, Cell, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>
-<div class="block">Authorize a user for a given KV.</div>
+<div class="block">Check if user has given action privilige in cell scope.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize(User, String, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/ServerRpcConnection.html#authorizeConnection--">authorizeConnection()</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/ServerRpcConnection.html" title="class in org.apache.hadoop.hbase.ipc">ServerRpcConnection</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize(List&lt;TablePermission&gt;, String, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeFamily-java.util.Set-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeFamily(Set&lt;TablePermission&gt;, TableName, byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize(User, TableName, byte[], byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeGlobal-org.apache.hadoop.hbase.security.access.GlobalPermission-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeGlobal(GlobalPermission, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize(User, TableName, byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeNamespace-java.util.Set-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeNamespace(Set&lt;NamespacePermission&gt;, String, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/ServerRpcConnection.html#authorizeConnection--">authorizeConnection()</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/ServerRpcConnection.html" title="class in org.apache.hadoop.hbase.ipc">ServerRpcConnection</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeTable-java.util.Set-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeTable(Set&lt;TablePermission&gt;, TableName, byte[], byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeGroup-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeGroup(String, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserFamily-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserFamily(User, TableName, byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>
-<div class="block">Checks global authorization for a given action for a group, based on the stored
- permissions.</div>
+<div class="block">Check if user has given action privilige in table:family scope.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeGroup-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeGroup(String, TableName, byte[], byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserGlobal-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserGlobal(User, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>
-<div class="block">Checks authorization to a given table, column family and column for a group, based
- on the stored permissions.</div>
+<div class="block">Check if user has given action privilige in global scope.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUser(User, TableName, byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserNamespace-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserNamespace(User, String, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>
-<div class="block">Checks authorization to a given table and column family for a user, based on the
- stored user permissions.</div>
+<div class="block">Check if user has given action privilige in namespace scope.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable(User, TableName, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
+<dd>
+<div class="block">Check if user has given action privilige in table scope.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable(User, TableName, byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
+<dd>
+<div class="block">Check if user has given action privilige in table:family scope.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable(User, TableName, byte[], byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
+<dd>
+<div class="block">Check if user has given action privilige in table:family:qualifier scope.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUser(User, TableName, byte[], byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
-<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AuthResult</span></a> - Class in <a href="org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></dt>
 <dd>
 <div class="block">Represents the result of an authorization check for logging and error
@@ -7328,15 +7339,15 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html#buildGrantRequest-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-boolean-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...-">buildGrantRequest(String, TableName, byte[], byte[], boolean, AccessControlProtos.Permission.Action...)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlUtil</a></dt>
 <dd>
-<div class="block">Create a request to grant user permissions.</div>
+<div class="block">Create a request to grant user table permissions.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html#buildGrantRequest-java.lang.String-java.lang.String-boolean-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...-">buildGrantRequest(String, String, boolean, AccessControlProtos.Permission.Action...)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlUtil</a></dt>
 <dd>
-<div class="block">Create a request to grant user permissions.</div>
+<div class="block">Create a request to grant user namespace permissions.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html#buildGrantRequest-java.lang.String-boolean-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...-">buildGrantRequest(String, boolean, AccessControlProtos.Permission.Action...)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlUtil</a></dt>
 <dd>
-<div class="block">Create a request to grant user permissions.</div>
+<div class="block">Create a request to grant user global permissions.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#buildHoldingCleanupTracker--">buildHoldingCleanupTracker()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
 <dd>&nbsp;</dd>
@@ -7396,15 +7407,15 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html#buildRevokeRequest-java.lang.String-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...-">buildRevokeRequest(String, AccessControlProtos.Permission.Action...)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlUtil</a></dt>
 <dd>
-<div class="block">Create a request to revoke user permissions.</div>
+<div class="block">Create a request to revoke user global permissions.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html#buildRevokeRequest-java.lang.String-java.lang.String-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...-">buildRevokeRequest(String, String, AccessControlProtos.Permission.Action...)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlUtil</a></dt>
 <dd>
-<div class="block">Create a request to revoke user permissions.</div>
+<div class="block">Create a request to revoke user namespace permissions.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html#buildRevokeRequest-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...-">buildRevokeRequest(String, TableName, byte[], byte[], AccessControlProtos.Permission.Action...)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlUtil</a></dt>
 <dd>
-<div class="block">Create a request to revoke user permissions.</div>
+<div class="block">Create a request to revoke user table permissions.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.html#buildRowSpec-byte:A-java.util.Map-long-long-int-">buildRowSpec(byte[], Map, long, long, int)</a></span> - Method in class org.apache.hadoop.hbase.rest.client.<a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.html" title="class in org.apache.hadoop.hbase.rest.client">RemoteHTable</a></dt>
 <dd>&nbsp;</dd>
@@ -8046,6 +8057,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#cache">cache</a></span> - Variable in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/ScannerResultGenerator.html" title="class in org.apache.hadoop.hbase.rest">ScannerResultGenerator</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#cache">cache</a></span> - Variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#cache">cache</a></span> - Variable in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.SecureHadoopUser.html" title="class in org.apache.hadoop.hbase.security">User.SecureHadoopUser</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSTableDescriptors.html#cache">cache</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSTableDescriptors.html" title="class in org.apache.hadoop.hbase.util">FSTableDescriptors</a></dt>
@@ -12073,6 +12086,8 @@
 <dd>
 <div class="block">Removes all metrics about this Source.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#clear--">clear()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/thrift/CallQueue.html#clear--">clear()</a></span> - Method in class org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/CallQueue.html" title="class in org.apache.hadoop.hbase.thrift">CallQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/types/CopyOnWriteArrayMap.ArrayEntrySet.html#clear--">clear()</a></span> - Method in class org.apache.hadoop.hbase.types.<a href="org/apache/hadoop/hbase/types/CopyOnWriteArrayMap.ArrayEntrySet.html" title="class in org.apache.hadoop.hbase.types">CopyOnWriteArrayMap.ArrayEntrySet</a></dt>
@@ -12192,6 +12207,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsRegionAggregateSourceImpl.html#clearCache--">clearCache()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsRegionAggregateSourceImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionAggregateSourceImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#clearCache-org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache-">clearCache(AuthManager.PermissionCache)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/CoprocessorClassLoader.html#clearCache--">clearCache()</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/CoprocessorClassLoader.html" title="class in org.apache.hadoop.hbase.util">CoprocessorClassLoader</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ClusterConnection.html#clearCaches-org.apache.hadoop.hbase.ServerName-">clearCaches(ServerName)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a></dt>
@@ -13095,7 +13112,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#close--">close()</a></span> - Method in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/ScannerResultGenerator.html" title="class in org.apache.hadoop.hbase.rest">ScannerResultGenerator</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#close--">close()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#close--">close()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#close--">close()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a></dt>
 <dd>&nbsp;</dd>
@@ -13799,6 +13816,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/Permission.Action.html#code--">code()</a></span> - Method in enum org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/Permission.Scope.html#code">code</a></span> - Variable in enum org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/Permission.Scope.html#code--">code()</a></span> - Method in enum org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/AuthMethod.html#code">code</a></span> - Variable in enum org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security">AuthMethod</a></dt>
 <dd>
 <div class="block">The code for this method.</div>
@@ -16617,7 +16638,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/RESTServlet.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/RESTServlet.html" title="class in org.apache.hadoop.hbase.rest">RESTServlet</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/NettyHBaseRpcConnectionHeaderHandler.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/NettyHBaseRpcConnectionHeaderHandler.html" title="class in org.apache.hadoop.hbase.security">NettyHBaseRpcConnectionHeaderHandler</a></dt>
 <dd>&nbsp;</dd>
@@ -28862,6 +28883,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlFilter.html#equals-java.lang.Object-">equals(Object)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlFilter.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html#equals-java.lang.Object-">equals(Object)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html#equals-java.lang.Object-">equals(Object)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/Permission.html#equals-java.lang.Object-">equals(Object)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#equals-java.lang.Object-">equals(Object)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
@@ -28958,6 +28983,16 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/metrics2/util/MetricQuantile.html#equals-java.lang.Object-">equals(Object)</a></span> - Method in class org.apache.hadoop.metrics2.util.<a href="org/apache/hadoop/metrics2/util/MetricQuantile.html" title="class in org.apache.hadoop.metrics2.util">MetricQuantile</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html#equalsExceptActions-java.lang.Object-">equalsExceptActions(Object)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/Permission.html#equalsExceptActions-java.lang.Object-">equalsExceptActions(Object)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></dt>
+<dd>
+<div class="block">Check if two permission equals regardless of actions.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#equalsExceptActions-java.lang.Object-">equalsExceptActions(Object)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/UserPermission.html#equalsExceptActions-java.lang.Object-">equalsExceptActions(Object)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellUtil.html#equalsIgnoreMvccVersion-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">equalsIgnoreMvccVersion(Cell, Cell)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase">CellUtil</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
@@ -30429,6 +30464,12 @@
 <dd>
 <div class="block">Fail the overall backup.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#failCheckFamily-byte:A-">failCheckFamily(byte[])</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#failCheckQualifier-byte:A-">failCheckQualifier(byte[])</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#failCheckTable-org.apache.hadoop.hbase.TableName-">failCheckTable(TableName)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/util/BackupUtils.html#failed-int-">failed(int)</a></span> - Static method in class org.apache.hadoop.hbase.backup.util.<a href="org/apache/hadoop/hbase/backup/util/BackupUtils.html" title="class in org.apache.hadoop.hbase.backup.util">BackupUtils</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ClientCoprocessorRpcController.html#failed--">failed()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ClientCoprocessorRpcController.html" title="class in org.apache.hadoop.hbase.client">ClientCoprocessorRpcController</a></dt>
@@ -34558,6 +34599,8 @@
 <dd>
 <div class="block">Build a response for a version request.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#get-java.lang.String-">get(String)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.html#get--">get()</a></span> - Static method in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.html" title="class in org.apache.hadoop.hbase.security.visibility">VisibilityLabelsCache</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/Size.html#get--">get()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/Size.html" title="class in org.apache.hadoop.hbase">Size</a></dt>
@@ -34780,6 +34823,12 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#getAccessCounter--">getAccessCounter()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntry</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/Permission.html#getAccessScope--">getAccessScope()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/UserPermission.html#getAccessScope--">getAccessScope()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></dt>
+<dd>
+<div class="block">Get this permission access scope.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Mutation.html#getACL--">getACL()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Query.html#getACL--">getACL()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Query.html" title="class in org.apache.hadoop.hbase.client">Query</a></dt>
@@ -35144,11 +35193,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#getAllPeersFromHFileRefsQueue0--">getAllPeersFromHFileRefsQueue0()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html" title="class in org.apache.hadoop.hbase.replication">ZKReplicationQueueStorage</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#getAllPermissions--">getAllPermissions()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a></dt>
-<dd>
-<div class="block">Returns a combined map of user and group permissions, with group names
- distinguished according to <a href="org/apache/hadoop/hbase/AuthUtil.html#isGroupPrincipal-java.lang.String-"><code>AuthUtil.isGroupPrincipal(String)</code></a>.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#getAllQueues--">getAllQueues()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getAllQueues-org.apache.hadoop.hbase.ServerName-">getAllQueues(ServerName)</a></span> - Method in interface org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a></dt>
@@ -40392,8 +40436,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.html#getGlobalSource--">getGlobalSource()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceFactoryImpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#getGroup-java.lang.String-">getGroup(String)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/DefaultVisibilityLabelServiceImpl.html#getGroupAuths-java.lang.String:A-boolean-">getGroupAuths(String[], boolean)</a></span> - Method in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/DefaultVisibilityLabelServiceImpl.html" title="class in org.apache.hadoop.hbase.security.visibility">DefaultVisibilityLabelServiceImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.html#getGroupAuths-java.lang.String:A-">getGroupAuths(String[])</a></span> - Method in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.html" title="class in org.apache.hadoop.hbase.security.visibility">VisibilityLabelsCache</a></dt>
@@ -43895,8 +43937,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html#getMServerWrap--">getMServerWrap()</a></span> - Method in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.ImplData.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">ServerMetricsTmpl.ImplData</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#getMTime--">getMTime()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
-<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#getMTime--">getMTime()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
+<dd>
+<div class="block">Last modification logical time</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/MultiServerCallable.html#getMulti--">getMulti()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/MultiServerCallable.html" title="class in org.apache.hadoop.hbase.client">MultiServerCallable</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#getMultiFactor--">getMultiFactor()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache</a></dt>
@@ -44187,6 +44231,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getNamespace--">getNamespace()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapperImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html#getNamespace--">getNamespace()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#getNamespace--">getNamespace()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TableName.html#getNamespace--">getNamespace()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></dt>
@@ -44250,8 +44296,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlLists.html#getNamespacePermissions-org.apache.hadoop.conf.Configuration-java.lang.String-">getNamespacePermissions(Configuration, String)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlLists.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlLists</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#getNamespacePermissions-java.lang.String-">getNamespacePermissions(String)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/QuotaTableUtil.html#getNamespaceQuota-org.apache.hadoop.hbase.client.Connection-java.lang.String-">getNamespaceQuota(Connection, String)</a></span> - Static method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/QuotaTableUtil.html" title="class in org.apache.hadoop.hbase.quotas">QuotaTableUtil</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/QuotaCache.html#getNamespaceQuotaCache--">getNamespaceQuotaCache()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/QuotaCache.html" title="class in org.apache.hadoop.hbase.quotas">QuotaCache</a></dt>
@@ -45375,9 +45419,9 @@
 <dd>
 <div class="block">Returns locality weighted by region size in MB.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#getOrCreate-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">getOrCreate(ZKWatcher, Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#getOrCreate-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">getOrCreate(ZKWatcher, Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>
-<div class="block">Returns a TableAuthManager from the cache.</div>
+<div class="block">Returns a AuthManager from the cache.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/WALEdit.html#getOrCreateFamilies--">getOrCreateFamilies()</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a></dt>
 <dd>&nbsp;</dd>
@@ -45902,6 +45946,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/Sleeper.html#getPeriod--">getPeriod()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/Sleeper.html" title="class in org.apache.hadoop.hbase.util">Sleeper</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/UserPermission.html#getPermission--">getPermission()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlLists.html#getPermissions-org.apache.hadoop.conf.Configuration-byte:A-org.apache.hadoop.hbase.client.Table-byte:A-byte:A-java.lang.String-boolean-">getPermissions(Configuration, byte[], Table, byte[], byte[], String, boolean)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlLists.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlLists</a></dt>
 <dd>
 <div class="block">Reads user permission assignments stored in the <code>l:</code> column family of the first
@@ -52483,8 +52529,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlLists.html#getTablePermissions-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-">getTablePermissions(Configuration, TableName)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlLists.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlLists</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#getTablePermissions-org.apache.hadoop.hbase.TableName-">getTablePermissions(TableName)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/MasterProcedureUtil.html#getTablePriority-org.apache.hadoop.hbase.TableName-">getTablePriority(TableName)</a></span> - Static method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/MasterProcedureUtil.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureUtil</a></dt>
 <dd>
 <div class="block">Return the priority for the given table.</div>
@@ -53389,7 +53433,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapperImpl.html#getTotalQueueSize--">getTotalQueueSize()</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapperImpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#getTotalRefCount--">getTotalRefCount()</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#getTotalRefCount--">getTotalRefCount()</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getTotalRequestCount--">getTotalRequestCount()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></dt>
 <dd>
@@ -53850,8 +53894,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthResult.html#getUser--">getUser()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#getUser-java.lang.String-">getUser(String)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/UserPermission.html#getUser--">getUser()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/token/AuthenticationTokenIdentifier.html#getUser--">getUser()</a></span> - Method in class org.apache.hadoop.hbase.security.token.<a href="org/apache/hadoop/hbase/security/token/AuthenticationTokenIdentifier.html" title="class in org.apache.hadoop.hbase.security.token">AuthenticationTokenIdentifier</a></dt>
@@ -54987,7 +55029,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.html#getZkController--">getZkController()</a></span> - Method in class org.apache.hadoop.hbase.procedure.<a href="org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.html" title="class in org.apache.hadoop.hbase.procedure">ZKProcedureMemberRpcs</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#getZKPermissionWatcher--">getZKPermissionWatcher()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#getZKPermissionWatcher--">getZKPermissionWatcher()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure/ZKProcedureCoordinator.html#getZkProcedureUtil--">getZkProcedureUtil()</a></span> - Method in class org.apache.hadoop.hbase.procedure.<a href="org/apache/hadoop/hbase/procedure/ZKProcedureCoordinator.html" title="class in org.apache.hadoop.hbase.procedure">ZKProcedureCoordinator</a></dt>
 <dd>
@@ -55070,9 +55112,9 @@
 <div class="block">Static reference to the block cache, or null if no caching should be used
  at all.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#globalCache">globalCache</a></span> - Variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#globalCache">globalCache</a></span> - Variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>
-<div class="block">Cache of global permissions</div>
+<div class="block">Cache for global permission.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/favored/FavoredNodesManager.html#globalFavoredNodesAssignmentPlan">globalFavoredNodesAssignmentPlan</a></span> - Variable in class org.apache.hadoop.hbase.favored.<a href="org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a></dt>
 <dd>&nbsp;</dd>
@@ -55114,6 +55156,22 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html#globalOnHeapMemstoreLimitLowMark">globalOnHeapMemstoreLimitLowMark</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">GlobalPermission</span></a> - Class in <a href="org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></dt>
+<dd>
+<div class="block">Represents an authorization for access whole cluster.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html#GlobalPermission--">GlobalPermission()</a></span> - Constructor for class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a></dt>
+<dd>
+<div class="block">Default constructor for Writable, do not use</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html#GlobalPermission-org.apache.hadoop.hbase.security.access.Permission.Action...-">GlobalPermission(Permission.Action...)</a></span> - Constructor for class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a></dt>
+<dd>
+<div class="block">Construct a global permission.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html#GlobalPermission-byte:A-">GlobalPermission(byte[])</a></span> - Constructor for class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a></dt>
+<dd>
+<div class="block">Construct a global permission.</div>
+</dd>
 <dt><a href="org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">GlobalQuotaSettings</span></a> - Class in <a href="org/apache/hadoop/hbase/quotas/package-summary.html">org.apache.hadoop.hbase.quotas</a></dt>
 <dd>
 <div class="block">An object which captures all quotas types (throttle or space) for a subject (user, table, or
@@ -55263,17 +55321,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.html#groupAuths">groupAuths</a></span> - Variable in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.html" title="class in org.apache.hadoop.hbase.security.visibility">VisibilityLabelsCache</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#groupCache">groupCache</a></span> - Variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a></dt>
-<dd>
-<div class="block">Cache of group permissions</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/UserProvider.html#groupCache">groupCache</a></span> - Variable in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#groupHasAccess-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">groupHasAccess(String, TableName, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
-<dd>
-<div class="block">Checks if the user has access to the full table or at least a family/qualifier
- for the specified action.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#groupInfoManager">groupInfoManager</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupAdminEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/mapred/GroupingTableMap.html" title="class in org.apache.hadoop.hbase.mapred"><span class="typeNameLink">GroupingTableMap</span></a> - Class in <a href="org/apache/hadoop/hbase/mapred/package-summary.html">org.apache.hadoop.hbase.mapred</a></dt>
@@ -55669,15 +55718,13 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/DNS.html#HAS_NEW_DNS_GET_DEFAULT_HOST_API">HAS_NEW_DNS_GET_DEFAULT_HOST_API</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/DNS.html" title="class in org.apache.hadoop.hbase.util">DNS</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#hasAccess-java.util.List-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccess(List&lt;TablePermission&gt;, TableName, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#hasAccess-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccess(User, TableName, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MasterRpcServices.html#hasAccessControlServiceCoprocessor-org.apache.hadoop.hbase.master.MasterCoprocessorHost-">hasAccessControlServiceCoprocessor(MasterCoprocessorHost)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a></dt>
 <dd>
 <div class="block">Determines if there is a MasterCoprocessor deployed which implements
  <code>AccessControlProtos.AccessControlService.Interface</code>.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#hasAccessTable-java.util.Set-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccessTable(Set&lt;TablePermission&gt;, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/ActiveMasterManager.html#hasActiveMaster--">hasActiveMaster()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/ActiveMasterManager.html" title="class in org.apache.hadoop.hbase.master">ActiveMasterManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/HttpServer.html#hasAdministratorAccess-javax.servlet.ServletContext-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">hasAdministratorAccess(ServletContext, HttpServletRequest, HttpServletResponse)</a></span> - Static method in class org.apache.hadoop.hbase.http.<a href="org/apache/hadoop/hbase/http/HttpServer.html" title="class in org.apache.hadoop.hbase.http">HttpServer</a></dt>
@@ -56229,6 +56276,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlFilter.html#hashCode--">hashCode()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlFilter.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html#hashCode--">hashCode()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html#hashCode--">hashCode()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/Permission.html#hashCode--">hashCode()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#hashCode--">hashCode()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
@@ -56448,8 +56499,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#hasMVCCInfo">hasMVCCInfo</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#hasNamespace--">hasNamespace()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/QuotaObserverChore.TablesWithQuotas.html#hasNamespaceQuota-org.apache.hadoop.hbase.TableName-">hasNamespaceQuota(TableName)</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/QuotaObserverChore.TablesWithQuotas.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore.TablesWithQuotas</a></dt>
 <dd>
 <div class="block">Returns true if the table exists in a namespace with a namespace quota.</div>
@@ -56638,8 +56687,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/impl/BackupManifest.BackupImage.html#hasTable-org.apache.hadoop.hbase.TableName-">hasTable(TableName)</a></span> - Method in class org.apache.hadoop.hbase.backup.impl.<a href="org/apache/hadoop/hbase/backup/impl/BackupManifest.BackupImage.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupManifest.BackupImage</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#hasTable--">hasTable()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/QuotaObserverChore.TablesWithQuotas.html#hasTableQuota-org.apache.hadoop.hbase.TableName-">hasTableQuota(TableName)</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/QuotaObserverChore.TablesWithQuotas.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore.TablesWithQuotas</a></dt>
 <dd>
 <div class="block">Returns true if the given table has a table quota.</div>
@@ -59574,17 +59621,21 @@
 <dd>
 <div class="block">Specify a BufferedMutator implementation other than the default.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html#implies-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">implies(String, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a></dt>
+<dd>
+<div class="block">check if given action is granted in given namespace.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/Permission.html#implies-org.apache.hadoop.hbase.security.access.Permission.Action-">implies(Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#implies-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">implies(String, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
 <dd>
-<div class="block">Checks that a given table operation is authorized by this permission
- instance.</div>
+<div class="block">check if given action is granted</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">implies(TableName, byte[], byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
 <dd>
-<div class="block">Checks that a given table operation is authorized by this permission
- instance.</div>
+<div class="block">Check if given action can performs on given table:family:qualifier.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">implies(TableName, byte[], Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
+<dd>
+<div class="block">Check if given action can performs on given table:family.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.KeyValue-org.apache.hadoop.hbase.security.access.Permission.Action-">implies(TableName, KeyValue, Permission.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></dt>
 <dd>
@@ -61391,9 +61442,9 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/lib/StaticUserWebFilter.html#initFilter-org.apache.hadoop.hbase.http.FilterContainer-org.apache.hadoop.conf.Configuration-">initFilter(FilterContainer, Configuration)</a></span> - Method in class org.apache.hadoop.hbase.http.lib.<a href="org/apache/hadoop/hbase/http/lib/StaticUserWebFilter.html" title="class in org.apache.hadoop.hbase.http.lib">StaticUserWebFilter</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#initGlobal-org.apache.hadoop.conf.Configuration-">initGlobal(Configuration)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#initGlobal-org.apache.hadoop.conf.Configuration-">initGlobal(Configuration)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>
-<div class="block">Returns a new <code>PermissionCache</code> initialized with permission assignments
+<div class="block">Initialize with global permission assignments
  from the <code>hbase.superuser</code> configuration key.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessChecker.html#initGroupService-org.apache.hadoop.conf.Configuration-">initGroupService(Configuration)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a></dt>
@@ -63825,10 +63876,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#isGetScan--">isGetScan()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/UserPermission.html#isGlobal--">isGlobal()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></dt>
-<dd>
-<div class="block">Returns true if this permission describes a global user permission.</div>
-</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlLists.html#isGlobalEntry-byte:A-">isGlobalEntry(byte[])</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlLists.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlLists</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/RegionLocations.html#isGreaterThan-long-long-boolean-">isGreaterThan(long, long, boolean)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#isGroupPrincipal-java.lang.String-">isGroupPrincipal(String)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">AuthUtil</a></dt>
@@ -70142,6 +70191,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessControlLists.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessControlLists.html" title="class in org.apache.hadoop.hbase.security.access">AccessControlLists</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/CoprocessorWhitelistMasterObserver.html" title="class in org.apache.hadoop.hbase.security.access">CoprocessorWhitelistMasterObserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/Permission.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></dt>
@@ -70150,10 +70201,6 @@
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 &nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/UserPermission.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/EncryptionUtil.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/EncryptionUtil.html" title="class in org.apache.hadoop.hbase.security">EncryptionUtil</a></dt>
@@ -71730,7 +71777,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALActionListener.html#manager">manager</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALActionListener.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALActionListener</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html#managerMap">managerMap</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AuthManager.html#managerMap">managerMap</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/impl/BackupManifest.html#MANIFEST_FILE_NAME">MANIFEST_FILE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.backup.impl.<a href="org/apache/hadoop/hbase/backup/impl/BackupManifest.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupManifest</a></dt>
 <dd>&nbsp;</dd>
@@ -72625,15 +72672,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html#matches-java.lang.String-">matches(String)</a></sp

<TRUNCATED>

[30/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.Scope.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.Scope.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.Scope.html
new file mode 100644
index 0000000..5d49142
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.Scope.html
@@ -0,0 +1,210 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.security.access.Permission.Scope (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.security.access.Permission.Scope (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/Permission.Scope.html" target="_top">Frames</a></li>
+<li><a href="Permission.Scope.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.security.access.Permission.Scope" class="title">Uses of Class<br>org.apache.hadoop.hbase.security.access.Permission.Scope</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.security.access">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a> in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Permission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#scope">scope</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>protected static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang">Byte</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">Permission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#SCOPE_BY_CODE">SCOPE_BY_CODE</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> that return <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></code></td>
+<td class="colLast"><span class="typeNameLabel">UserPermission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#getAccessScope--">getAccessScope</a></span>()</code>
+<div class="block">Get this permission access scope.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Permission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#getAccessScope--">getAccessScope</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></code></td>
+<td class="colLast"><span class="typeNameLabel">Permission.Scope.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html#valueOf-java.lang.String-">valueOf</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a>[]</code></td>
+<td class="colLast"><span class="typeNameLabel">Permission.Scope.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html#values--">values</a></span>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/Permission.Scope.html" target="_top">Frames</a></li>
+<li><a href="Permission.Scope.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.html
index f16df55..07dc8af 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.html
@@ -205,7 +205,9 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>private static class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;T extends <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;T extends <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</span></code>
+<div class="block">Cache of permissions, it is thread safe.</div>
+</td>
 </tr>
 </tbody>
 </table>
@@ -218,33 +220,36 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></span></code>
-<div class="block">Represents an authorization for access for the given actions, optionally
- restricted to the given column family or column qualifier, over the
- given table.</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a></span></code>
+<div class="block">Represents an authorization for access whole cluster.</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></span></code>
-<div class="block">Represents an authorization for access over the given table, column family
- plus qualifier, for the given user.</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a></span></code>
+<div class="block">Represents an authorization for access for the given namespace.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></span></code>
+<div class="block">Represents an authorization for access for the given actions, optionally
+ restricted to the given column family or column qualifier, over the
+ given table.</div>
 </td>
 </tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
-<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></span><span class="tabEnd">&nbsp;</span></caption>
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#globalCache">globalCache</a></span></code>
-<div class="block">Cache of global permissions</div>
-</td>
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></td>
+<td class="colLast"><span class="typeNameLabel">UserPermission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#permission">permission</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -256,6 +261,16 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></td>
+<td class="colLast"><span class="typeNameLabel">UserPermission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#getPermission--">getPermission</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ShadedAccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toPermission-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission-">toPermission</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission&nbsp;proto)</code>
+<div class="block">Converts a Permission shaded proto to a client TablePermission object.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toPermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission-">toPermission</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission&nbsp;proto)</code>
 <div class="block">Converts a Permission proto to a client Permission object.</div>
@@ -276,16 +291,41 @@
                          <a href="../../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#initGlobal-org.apache.hadoop.conf.Configuration-">initGlobal</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block">Returns a new <code>PermissionCache</code> initialized with permission assignments
- from the <code>hbase.superuser</code> configuration key.</div>
-</td>
+<td class="colFirst"><code>private static <a href="../../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#parsePermissionRecord-byte:A-org.apache.hadoop.hbase.Cell-byte:A-byte:A-boolean-java.lang.String-">parsePermissionRecord</a></span>(byte[]&nbsp;entryName,
+                     <a href="../../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv,
+                     byte[]&nbsp;cf,
+                     byte[]&nbsp;cq,
+                     boolean&nbsp;filterPerms,
+                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filterUser)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#readPermissions-byte:A-org.apache.hadoop.conf.Configuration-">readPermissions</a></span>(byte[]&nbsp;data,
+               org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#readWritableUserPermission-java.io.DataInput-org.apache.hadoop.conf.Configuration-">readWritableUserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in,
+                          org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toPermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions-">toPermission</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</code>
+<div class="block">Convert a protobuf UserTablePermissions to a ListMultimap&lt;Username, Permission&gt</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUsersAndPermissions-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions-">toUsersAndPermissions</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">ShadedAccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toUserTablePermissions-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions-">toUserTablePermissions</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</code>
+<div class="block">Convert a shaded protobuf UserTablePermissions to a ListMultimap&lt;String, TablePermission&gt;
+ where key is username.</div>
+</td>
+</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -312,6 +352,10 @@
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUsersAndPermissions-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">toUsersAndPermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                      <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perms)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static byte[]</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#userPermissionRowKey-org.apache.hadoop.hbase.security.access.Permission-">userPermissionRowKey</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;permission)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -322,15 +366,47 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Authorizes a global permission</div>
+<td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUsersAndPermissions-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">toUsersAndPermissions</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#updateCache-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache-">updateCache</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,? extends <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;newPermissions,
+           <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&nbsp;cacheToUpdate)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#updateGlobalCache-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">updateGlobalCache</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;globalPerms)</code>
+<div class="block">Updates the internal global permissions cache.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUsersAndPermissions-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">toUsersAndPermissions</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</code>&nbsp;</td>
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#updateNamespaceCache-java.lang.String-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">updateNamespaceCache</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                    org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;nsPerms)</code>
+<div class="block">Updates the internal namespace permissions cache for specified namespace.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#updateTableCache-org.apache.hadoop.hbase.TableName-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">updateTableCache</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;tablePerms)</code>
+<div class="block">Updates the internal table permissions cache for specified table.</div>
+</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
+<caption><span>Constructors in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;permission)</code>
+<div class="block">Construct a user permission given permission.</div>
+</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.PermissionCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.PermissionCache.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.PermissionCache.html
deleted file mode 100644
index 8e306d8..0000000
--- a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.PermissionCache.html
+++ /dev/null
@@ -1,227 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.security.access.TableAuthManager.PermissionCache (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.security.access.TableAuthManager.PermissionCache (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.PermissionCache.html" target="_top">Frames</a></li>
-<li><a href="TableAuthManager.PermissionCache.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.security.access.TableAuthManager.PermissionCache" class="title">Uses of Class<br>org.apache.hadoop.hbase.security.access.TableAuthManager.PermissionCache</h2>
-</div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.security.access">
-<!--   -->
-</a>
-<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a> in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
-<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#globalCache">globalCache</a></span></code>
-<div class="block">Cache of global permissions</div>
-</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
-<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#nsCache">nsCache</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#tableCache">tableCache</a></span></code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> that return <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getNamespacePermissions-java.lang.String-">getNamespacePermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getTablePermissions-org.apache.hadoop.hbase.TableName-">getTablePermissions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#initGlobal-org.apache.hadoop.conf.Configuration-">initGlobal</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block">Returns a new <code>PermissionCache</code> initialized with permission assignments
- from the <code>hbase.superuser</code> configuration key.</div>
-</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#writeNamespaceToZooKeeper-java.lang.String-org.apache.hadoop.hbase.security.access.TableAuthManager.PermissionCache-">writeNamespaceToZooKeeper</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;tablePerms)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#writeTableToZooKeeper-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.TableAuthManager.PermissionCache-">writeTableToZooKeeper</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                     <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;tablePerms)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.PermissionCache.html" target="_top">Frames</a></li>
-<li><a href="TableAuthManager.PermissionCache.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.html
deleted file mode 100644
index 49c6b1a..0000000
--- a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.html
+++ /dev/null
@@ -1,249 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.security.access.TableAuthManager (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.security.access.TableAuthManager (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.html" target="_top">Frames</a></li>
-<li><a href="TableAuthManager.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.security.access.TableAuthManager" class="title">Uses of Class<br>org.apache.hadoop.hbase.security.access.TableAuthManager</h2>
-</div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.security.access">
-<!--   -->
-</a>
-<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a> in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
-<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#authManager">authManager</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ZKPermissionWatcher.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#authManager">authManager</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlFilter.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#authManager">authManager</a></span></code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
-<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#managerMap">managerMap</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#refCount">refCount</a></span></code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> that return <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#getAuthManager--">getAuthManager</a></span>()</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#getAuthManager--">getAuthManager</a></span>()</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getOrCreate-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">getOrCreate</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
-           org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block">Returns a TableAuthManager from the cache.</div>
-</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>static void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#release-org.apache.hadoop.hbase.security.access.TableAuthManager-">release</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;instance)</code>
-<div class="block">Releases the resources for the given TableAuthManager if the reference count is down to 0.</div>
-</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
-<caption><span>Constructors in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#AccessControlFilter-org.apache.hadoop.hbase.security.access.TableAuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">AccessControlFilter</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;mgr,
-                   <a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;ugi,
-                   <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                   <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access">AccessControlFilter.Strategy</a>&nbsp;strategy,
-                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/util/ByteRange.html" title="interface in org.apache.hadoop.hbase.util">ByteRange</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;cfVsMaxVersions)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#ZKPermissionWatcher-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.hbase.security.access.TableAuthManager-org.apache.hadoop.conf.Configuration-">ZKPermissionWatcher</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
-                   <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;authManager,
-                   org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TableAuthManager.html" target="_top">Frames</a></li>
-<li><a href="TableAuthManager.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>


[17/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html
deleted file mode 100644
index 2e68b22..0000000
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html
+++ /dev/null
@@ -1,859 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
-<span class="sourceLineNo">009</span> *<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
-<span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.util.CollectionUtils.computeIfAbsent;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.io.Closeable;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.io.IOException;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.HashMap;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.Cell;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.TableName;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.security.User;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.zookeeper.KeeperException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.slf4j.Logger;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.slf4j.LoggerFactory;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Performs authorization checks for a given user's assigned permissions<a name="line.53"></a>
-<span class="sourceLineNo">054</span> */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>@InterfaceAudience.Private<a name="line.55"></a>
-<span class="sourceLineNo">056</span>public class TableAuthManager implements Closeable {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private static class PermissionCache&lt;T extends Permission&gt; {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    /** Cache of user permissions */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    private ListMultimap&lt;String,T&gt; userCache = ArrayListMultimap.create();<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    /** Cache of group permissions */<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    private ListMultimap&lt;String,T&gt; groupCache = ArrayListMultimap.create();<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>    public List&lt;T&gt; getUser(String user) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      return userCache.get(user);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    }<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>    public void putUser(String user, T perm) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      userCache.put(user, perm);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>    public List&lt;T&gt; replaceUser(String user, Iterable&lt;? extends T&gt; perms) {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      return userCache.replaceValues(user, perms);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>    public List&lt;T&gt; getGroup(String group) {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      return groupCache.get(group);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public void putGroup(String group, T perm) {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      groupCache.put(group, perm);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>    public List&lt;T&gt; replaceGroup(String group, Iterable&lt;? extends T&gt; perms) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      return groupCache.replaceValues(group, perms);<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>    /**<a name="line.87"></a>
-<span class="sourceLineNo">088</span>     * Returns a combined map of user and group permissions, with group names<a name="line.88"></a>
-<span class="sourceLineNo">089</span>     * distinguished according to {@link AuthUtil#isGroupPrincipal(String)}.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>     */<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    public ListMultimap&lt;String,T&gt; getAllPermissions() {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      ListMultimap&lt;String,T&gt; tmp = ArrayListMultimap.create();<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      tmp.putAll(userCache);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      for (String group : groupCache.keySet()) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        tmp.putAll(AuthUtil.toGroupEntry(group), groupCache.get(group));<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      }<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      return tmp;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private static final Logger LOG = LoggerFactory.getLogger(TableAuthManager.class);<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  /** Cache of global permissions */<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private volatile PermissionCache&lt;Permission&gt; globalCache;<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  private ConcurrentSkipListMap&lt;TableName, PermissionCache&lt;TablePermission&gt;&gt; tableCache =<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      new ConcurrentSkipListMap&lt;&gt;();<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  private ConcurrentSkipListMap&lt;String, PermissionCache&lt;TablePermission&gt;&gt; nsCache =<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    new ConcurrentSkipListMap&lt;&gt;();<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  private Configuration conf;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private ZKPermissionWatcher zkperms;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  private final AtomicLong mtime = new AtomicLong(0L);<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private TableAuthManager(ZKWatcher watcher, Configuration conf)<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      throws IOException {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    this.conf = conf;<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>    // initialize global permissions based on configuration<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    globalCache = initGlobal(conf);<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>    this.zkperms = new ZKPermissionWatcher(watcher, this, conf);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      this.zkperms.start();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    } catch (KeeperException ke) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.error("ZooKeeper initialization failed", ke);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public void close() {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    this.zkperms.close();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * Returns a new {@code PermissionCache} initialized with permission assignments<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * from the {@code hbase.superuser} configuration key.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private PermissionCache&lt;Permission&gt; initGlobal(Configuration conf) throws IOException {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    UserProvider userProvider = UserProvider.instantiate(conf);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    User user = userProvider.getCurrent();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    if (user == null) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      throw new IOException("Unable to obtain the current user, " +<a name="line.144"></a>
-<span class="sourceLineNo">145</span>          "authorization checks for internal operations will not work correctly!");<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    PermissionCache&lt;Permission&gt; newCache = new PermissionCache&lt;&gt;();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    String currentUser = user.getShortName();<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>    // the system user is always included<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    List&lt;String&gt; superusers = Lists.asList(currentUser, conf.getStrings(<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        Superusers.SUPERUSER_CONF_KEY, new String[0]));<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    if (superusers != null) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      for (String name : superusers) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        if (AuthUtil.isGroupPrincipal(name)) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>          newCache.putGroup(AuthUtil.getGroupName(name),<a name="line.156"></a>
-<span class="sourceLineNo">157</span>              new Permission(Permission.Action.values()));<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        } else {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          newCache.putUser(name, new Permission(Permission.Action.values()));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    return newCache;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return this.zkperms;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public void refreshTableCacheFromWritable(TableName table,<a name="line.170"></a>
-<span class="sourceLineNo">171</span>                                       byte[] data) throws IOException {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    if (data != null &amp;&amp; data.length &gt; 0) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      ListMultimap&lt;String,TablePermission&gt; perms;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      try {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        perms = AccessControlLists.readPermissions(data, conf);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      } catch (DeserializationException e) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        throw new IOException(e);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>      if (perms != null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        if (Bytes.equals(table.getName(), AccessControlLists.ACL_GLOBAL_NAME)) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>          updateGlobalCache(perms);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        } else {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          updateTableCache(table, perms);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    } else {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      LOG.debug("Skipping permission cache refresh because writable data is empty");<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  public void refreshNamespaceCacheFromWritable(String namespace, byte[] data) throws IOException {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (data != null &amp;&amp; data.length &gt; 0) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      ListMultimap&lt;String,TablePermission&gt; perms;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      try {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        perms = AccessControlLists.readPermissions(data, conf);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      } catch (DeserializationException e) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        throw new IOException(e);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      if (perms != null) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        updateNsCache(namespace, perms);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    } else {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      LOG.debug("Skipping permission cache refresh because writable data is empty");<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  /**<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * Updates the internal global permissions cache<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   *<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * @param userPerms<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  private void updateGlobalCache(ListMultimap&lt;String,TablePermission&gt; userPerms) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    PermissionCache&lt;Permission&gt; newCache = null;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    try {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      newCache = initGlobal(conf);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      for (Map.Entry&lt;String,TablePermission&gt; entry : userPerms.entries()) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        if (AuthUtil.isGroupPrincipal(entry.getKey())) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          newCache.putGroup(AuthUtil.getGroupName(entry.getKey()),<a name="line.219"></a>
-<span class="sourceLineNo">220</span>              new Permission(entry.getValue().getActions()));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        } else {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          newCache.putUser(entry.getKey(), new Permission(entry.getValue().getActions()));<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      globalCache = newCache;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      mtime.incrementAndGet();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    } catch (IOException e) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      // Never happens<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      LOG.error("Error occurred while updating the global cache", e);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * Updates the internal permissions cache for a single table, splitting<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * the permissions listed into separate caches for users and groups to optimize<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * group lookups.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   *<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param table<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @param tablePerms<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  private void updateTableCache(TableName table,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>                                ListMultimap&lt;String,TablePermission&gt; tablePerms) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    PermissionCache&lt;TablePermission&gt; newTablePerms = new PermissionCache&lt;&gt;();<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>    for (Map.Entry&lt;String,TablePermission&gt; entry : tablePerms.entries()) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      if (AuthUtil.isGroupPrincipal(entry.getKey())) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        newTablePerms.putGroup(AuthUtil.getGroupName(entry.getKey()), entry.getValue());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      } else {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        newTablePerms.putUser(entry.getKey(), entry.getValue());<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    tableCache.put(table, newTablePerms);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    mtime.incrementAndGet();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * Updates the internal permissions cache for a single table, splitting<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * the permissions listed into separate caches for users and groups to optimize<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * group lookups.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   *<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * @param namespace<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * @param tablePerms<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  private void updateNsCache(String namespace,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>                             ListMultimap&lt;String, TablePermission&gt; tablePerms) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    PermissionCache&lt;TablePermission&gt; newTablePerms = new PermissionCache&lt;&gt;();<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    for (Map.Entry&lt;String, TablePermission&gt; entry : tablePerms.entries()) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      if (AuthUtil.isGroupPrincipal(entry.getKey())) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        newTablePerms.putGroup(AuthUtil.getGroupName(entry.getKey()), entry.getValue());<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      } else {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        newTablePerms.putUser(entry.getKey(), entry.getValue());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>    nsCache.put(namespace, newTablePerms);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    mtime.incrementAndGet();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private PermissionCache&lt;TablePermission&gt; getTablePermissions(TableName table) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return computeIfAbsent(tableCache, table, PermissionCache::new);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  private PermissionCache&lt;TablePermission&gt; getNamespacePermissions(String namespace) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return computeIfAbsent(nsCache, namespace, PermissionCache::new);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  }<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>  /**<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * Authorizes a global permission<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @param perms<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * @param action<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * @return true if authorized, false otherwise<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  private boolean authorize(List&lt;Permission&gt; perms, Permission.Action action) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    if (perms != null) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      for (Permission p : perms) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        if (p.implies(action)) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          return true;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    } else if (LOG.isDebugEnabled()) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      LOG.debug("No permissions found for " + action);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return false;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>  /**<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * Authorize a global permission based on ACLs for the given user and the<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * user's groups.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @param user<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @param action<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * @return true if known and authorized, false otherwise<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  public boolean authorize(User user, Permission.Action action) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    if (user == null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      return false;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    if (authorize(globalCache.getUser(user.getShortName()), action)) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      return true;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    String[] groups = user.getGroupNames();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (groups != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      for (String group : groups) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        if (authorize(globalCache.getGroup(group), action)) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>          return true;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    return false;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private boolean authorize(List&lt;TablePermission&gt; perms,<a name="line.336"></a>
-<span class="sourceLineNo">337</span>                            TableName table, byte[] family,<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                            byte[] qualifier, Permission.Action action) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    if (perms != null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      for (TablePermission p : perms) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        if (p.implies(table, family, qualifier, action)) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>          return true;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    } else if (LOG.isDebugEnabled()) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      LOG.debug("No permissions found for table="+table);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return false;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>  private boolean hasAccess(List&lt;TablePermission&gt; perms,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>                            TableName table, Permission.Action action) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    if (perms != null) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      for (TablePermission p : perms) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (p.implies(action)) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          return true;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    } else if (LOG.isDebugEnabled()) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      LOG.debug("No permissions found for table="+table);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    return false;<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * Authorize a user for a given KV. This is called from AccessControlFilter.<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   */<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  public boolean authorize(User user, TableName table, Cell cell, Permission.Action action) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    try {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      List&lt;Permission&gt; perms = AccessControlLists.getCellPermissionsForUser(user, cell);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      if (LOG.isTraceEnabled()) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        LOG.trace("Perms for user " + user.getShortName() + " in cell " + cell + ": " +<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          (perms != null ? perms : ""));<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      if (perms != null) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        for (Permission p: perms) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          if (p.implies(action)) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>            return true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    } catch (IOException e) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      // We failed to parse the KV tag<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      LOG.error("Failed parse of ACL tag in cell " + cell);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      // Fall through to check with the table and CF perms we were able<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      // to collect regardless<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return false;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  public boolean authorize(User user, String namespace, Permission.Action action) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // Global authorizations supercede namespace level<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    if (authorize(user, action)) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      return true;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    // Check namespace permissions<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    PermissionCache&lt;TablePermission&gt; tablePerms = nsCache.get(namespace);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    if (tablePerms != null) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      List&lt;TablePermission&gt; userPerms = tablePerms.getUser(user.getShortName());<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      if (authorize(userPerms, namespace, action)) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        return true;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      String[] groupNames = user.getGroupNames();<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      if (groupNames != null) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        for (String group : groupNames) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          List&lt;TablePermission&gt; groupPerms = tablePerms.getGroup(group);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          if (authorize(groupPerms, namespace, action)) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>            return true;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    return false;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private boolean authorize(List&lt;TablePermission&gt; perms, String namespace,<a name="line.416"></a>
-<span class="sourceLineNo">417</span>                            Permission.Action action) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    if (perms != null) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      for (TablePermission p : perms) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        if (p.implies(namespace, action)) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          return true;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      }<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    } else if (LOG.isDebugEnabled()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      LOG.debug("No permissions for authorize() check, table=" + namespace);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    return false;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  /**<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   * Checks authorization to a given table and column family for a user, based on the<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * stored user permissions.<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   *<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * @param user<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * @param table<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @param family<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   * @param action<a name="line.438"></a>
-<span class="sourceLineNo">439</span>   * @return true if known and authorized, false otherwise<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   */<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  public boolean authorizeUser(User user, TableName table, byte[] family,<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      Permission.Action action) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return authorizeUser(user, table, family, null, action);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>  public boolean authorizeUser(User user, TableName table, byte[] family,<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      byte[] qualifier, Permission.Action action) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    if (table == null) table = AccessControlLists.ACL_TABLE_NAME;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    // Global and namespace authorizations supercede table level<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (authorize(user, table.getNamespaceAsString(), action)) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      return true;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    }<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    // Check table permissions<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    return authorize(getTablePermissions(table).getUser(user.getShortName()), table, family,<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        qualifier, action);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>  /**<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * Checks if the user has access to the full table or at least a family/qualifier<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * for the specified action.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   *<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param user<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param table<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @param action<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @return true if the user has access to the table, false otherwise<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  public boolean userHasAccess(User user, TableName table, Permission.Action action) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (table == null) table = AccessControlLists.ACL_TABLE_NAME;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    // Global and namespace authorizations supercede table level<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    if (authorize(user, table.getNamespaceAsString(), action)) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      return true;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    // Check table permissions<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    return hasAccess(getTablePermissions(table).getUser(user.getShortName()), table, action);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>  /**<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   * Checks global authorization for a given action for a group, based on the stored<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * permissions.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  public boolean authorizeGroup(String groupName, Permission.Action action) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    List&lt;Permission&gt; perms = globalCache.getGroup(groupName);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    if (LOG.isDebugEnabled()) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      LOG.debug("authorizing " + (perms != null &amp;&amp; !perms.isEmpty() ? perms.get(0) : "") +<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        " for " + action);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return authorize(perms, action);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Checks authorization to a given table, column family and column for a group, based<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * on the stored permissions.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @param groupName<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * @param table<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * @param family<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * @param qualifier<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @param action<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * @return true if known and authorized, false otherwise<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   */<a name="line.499"></a>
-<span class="sourceLineNo">500</span>  public boolean authorizeGroup(String groupName, TableName table, byte[] family,<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      byte[] qualifier, Permission.Action action) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Global authorization supercedes table level<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    if (authorizeGroup(groupName, action)) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      return true;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    if (table == null) table = AccessControlLists.ACL_TABLE_NAME;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    // Namespace authorization supercedes table level<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    String namespace = table.getNamespaceAsString();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (authorize(getNamespacePermissions(namespace).getGroup(groupName), namespace, action)) {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      return true;<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // Check table level<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    List&lt;TablePermission&gt; tblPerms = getTablePermissions(table).getGroup(groupName);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    if (LOG.isDebugEnabled()) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      LOG.debug("authorizing " + (tblPerms != null &amp;&amp; !tblPerms.isEmpty() ? tblPerms.get(0) : "") +<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        " for " +groupName + " on " + table + "." + Bytes.toString(family) + "." +<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        Bytes.toString(qualifier) + " with " + action);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    return authorize(tblPerms, table, family, qualifier, action);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  /**<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   * Checks if the user has access to the full table or at least a family/qualifier<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * for the specified action.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   * @param groupName<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * @param table<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * @param action<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * @return true if the group has access to the table, false otherwise<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   */<a name="line.529"></a>
-<span class="sourceLineNo">530</span>  public boolean groupHasAccess(String groupName, TableName table, Permission.Action action) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    // Global authorization supercedes table level<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    if (authorizeGroup(groupName, action)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      return true;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    if (table == null) table = AccessControlLists.ACL_TABLE_NAME;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    // Namespace authorization supercedes table level<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    if (hasAccess(getNamespacePermissions(table.getNamespaceAsString()).getGroup(groupName),<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        table, action)) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      return true;<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    // Check table level<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    return hasAccess(getTablePermissions(table).getGroup(groupName), table, action);<a name="line.542"></a>
-<span class="sourceLineNo">543</span>  }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public boolean authorize(User user, TableName table, byte[] family,<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      byte[] qualifier, Permission.Action action) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    if (authorizeUser(user, table, family, qualifier, action)) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      return true;<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
-<span class="sourceLineNo">550</span><a name="line.550"></a>
-<span class="sourceLineNo">551</span>    String[] groups = user.getGroupNames();<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    if (groups != null) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      for (String group : groups) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        if (authorizeGroup(group, table, family, qualifier, action)) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>          return true;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      }<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    return false;<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  }<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>  public boolean hasAccess(User user, TableName table, Permission.Action action) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    if (userHasAccess(user, table, action)) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      return true;<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    }<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span>    String[] groups = user.getGroupNames();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    if (groups != null) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      for (String group : groups) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        if (groupHasAccess(group, table, action)) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>          return true;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        }<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    }<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    return false;<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  public boolean authorize(User user, TableName table, byte[] family,<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      Permission.Action action) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    return authorize(user, table, family, null, action);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>  /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * Returns true if the given user has a {@link TablePermission} matching up<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * to the column family portion of a permission.  Note that this permission<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   * may be scoped to a given column qualifier and does not guarantee that<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * authorize() on the same column family would return true.<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  public boolean matchPermission(User user,<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      TableName table, byte[] family, Permission.Action action) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    PermissionCache&lt;TablePermission&gt; tablePerms = tableCache.get(table);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    if (tablePerms != null) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      List&lt;TablePermission&gt; userPerms = tablePerms.getUser(user.getShortName());<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      if (userPerms != null) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        for (TablePermission p : userPerms) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>          if (p.matchesFamily(table, family, action)) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>            return true;<a name="line.597"></a>
-<span class="sourceLineNo">598</span>          }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>        }<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>      String[] groups = user.getGroupNames();<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      if (groups != null) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>        for (String group : groups) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          List&lt;TablePermission&gt; groupPerms = tablePerms.getGroup(group);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>          if (groupPerms != null) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            for (TablePermission p : groupPerms) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>              if (p.matchesFamily(table, family, action)) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>                return true;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>              }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>            }<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          }<a name="line.612"></a>
-<span class="sourceLineNo">613</span>        }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      }<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    return false;<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span>  public boolean matchPermission(User user,<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      TableName table, byte[] family, byte[] qualifier,<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      Permission.Action action) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    PermissionCache&lt;TablePermission&gt; tablePerms = tableCache.get(table);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    if (tablePerms != null) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      List&lt;TablePermission&gt; userPerms = tablePerms.getUser(user.getShortName());<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      if (userPerms != null) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        for (TablePermission p : userPerms) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>          if (p.matchesFamilyQualifier(table, family, qualifier, action)) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>            return true;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          }<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        }<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      }<a name="line.632"></a>
-<span class="sourceLineNo">633</span><a name="line.633"></a>
-<span class="sourceLineNo">634</span>      String[] groups = user.getGroupNames();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      if (groups != null) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span>        for (String group : groups) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          List&lt;TablePermission&gt; groupPerms = tablePerms.getGroup(group);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>          if (groupPerms != null) {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>            for (TablePermission p : groupPerms) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>              if (p.matchesFamilyQualifier(table, family, qualifier, action)) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>                return true;<a name="line.641"></a>
-<span class="sourceLineNo">642</span>              }<a name="line.642"></a>
-<span class="sourceLineNo">643</span>            }<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          }<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        }<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      }<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    return false;<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>  public void removeNamespace(byte[] ns) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    nsCache.remove(Bytes.toString(ns));<a name="line.652"></a>
-<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
-<span class="sourceLineNo">654</span><a name="line.654"></a>
-<span class="sourceLineNo">655</span>  public void removeTable(TableName table) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    tableCache.remove(table);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  /**<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * Overwrites the existing permission set for a given user for a table, and<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * triggers an update for zookeeper synchronization.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param username<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param table<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @param perms<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public void setTableUserPermissions(String username, TableName table,<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      List&lt;TablePermission&gt; perms) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    PermissionCache&lt;TablePermission&gt; tablePerms = getTablePermissions(table);<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    tablePerms.replaceUser(username, perms);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    writeTableToZooKeeper(table, tablePerms);<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>  /**<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * Overwrites the existing permission set for a group and triggers an update<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * for zookeeper synchronization.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * @param group<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   * @param table<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param perms<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   */<a name="line.679"></a>
-<span class="sourceLineNo">680</span>  public void setTableGroupPermissions(String group, TableName table,<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      List&lt;TablePermission&gt; perms) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    PermissionCache&lt;TablePermission&gt; tablePerms = getTablePermissions(table);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    tablePerms.replaceGroup(group, perms);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    writeTableToZooKeeper(table, tablePerms);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  }<a name="line.685"></a>
-<span class="sourceLineNo">686</span><a name="line.686"></a>
-<span class="sourceLineNo">687</span>  /**<a name="line.687"></a>
-<span class="sourceLineNo">688</span>   * Overwrites the existing permission set for a given user for a table, and<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   * triggers an update for zookeeper synchronization.<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * @param username<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * @param namespace<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * @param perms<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   */<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  public void setNamespaceUserPermissions(String username, String namespace,<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      List&lt;TablePermission&gt; perms) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    PermissionCache&lt;TablePermission&gt; tablePerms = getNamespacePermissions(namespace);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    tablePerms.replaceUser(username, perms);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    writeNamespaceToZooKeeper(namespace, tablePerms);<a name="line.698"></a>
-<span class="sourceLineNo">699</span>  }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>  /**<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * Overwrites the existing permission set for a group and triggers an update<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * for zookeeper synchronization.<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * @param group<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   * @param namespace<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * @param perms<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   */<a name="line.707"></a>
-<span class="sourceLineNo">708</span>  public void setNamespaceGroupPermissions(String group, String namespace,<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      List&lt;TablePermission&gt; perms) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    PermissionCache&lt;TablePermission&gt; tablePerms = getNamespacePermissions(namespace);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    tablePerms.replaceGroup(group, perms);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    writeNamespaceToZooKeeper(namespace, tablePerms);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>  }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>  public void writeTableToZooKeeper(TableName table,<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      PermissionCache&lt;TablePermission&gt; tablePerms) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    byte[] serialized = new byte[0];<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    if (tablePerms != null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      serialized = AccessControlLists.writePermissionsAsBytes(tablePerms.getAllPermissions(), conf);<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    }<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    zkperms.writeToZookeeper(table.getName(), serialized);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  public void writeNamespaceToZooKeeper(String namespace,<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      PermissionCache&lt;TablePermission&gt; tablePerms) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    byte[] serialized = new byte[0];<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    if (tablePerms != null) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      serialized = AccessControlLists.writePermissionsAsBytes(tablePerms.getAllPermissions(), conf);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    }<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    zkperms.writeToZookeeper(Bytes.toBytes(AccessControlLists.toNamespaceEntry(namespace)),<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        serialized);<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  public long getMTime() {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    return mtime.get();<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span>  private static Map&lt;ZKWatcher,TableAuthManager&gt; managerMap = new HashMap&lt;&gt;();<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  private static Map&lt;TableAuthManager, Integer&gt; refCount = new HashMap&lt;&gt;();<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>  /** Returns a TableAuthManager from the cache. If not cached, constructs a new one. Returned<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * instance should be released back by calling {@link #release(TableAuthManager)}. */<a name="line.743"></a>
-<span class="sourceLineNo">744</span>  public synchronized static TableAuthManager getOrCreate(<a name="line.744"></a>
-<span class="sourceLineNo">745</span>          ZKWatcher watcher, Configuration conf) throws IOException {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    TableAuthManager instance = managerMap.get(watcher);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    if (instance == null) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      instance = new TableAuthManager(watcher, conf);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      managerMap.put(watcher, instance);<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    }<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    int ref = refCount.get(instance) == null ? 0 : refCount.get(instance).intValue();<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    refCount.put(instance, ref + 1);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    return instance;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>  @VisibleForTesting<a name="line.756"></a>
-<span class="sourceLineNo">757</span>  public static int getTotalRefCount() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    int total = 0;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    for (int count : refCount.values()) {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      total += count;<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    }<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    return total;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span>  /**<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * Releases the resources for the given TableAuthManager if the reference count is down to 0.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @param instance TableAuthManager to be released<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  public synchronized static void release(TableAuthManager instance) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    if (refCount.get(instance) == null || refCount.get(instance) &lt; 1) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      String msg = "Something wrong with the TableAuthManager reference counting: " + instance<a name="line.771"></a>
-<span class="sourceLineNo">772</span>          + " whose count is " + refCount.get(instance);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      instance.close();<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      managerMap.remove(instance.getZKPermissionWatcher().getWatcher());<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      instance.getZKPermissionWatcher().getWatcher().abort(msg, null);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    } else {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      int ref = refCount.get(instance);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      refCount.put(instance, ref-1);<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      if (ref-1 == 0) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        instance.close();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>        managerMap.remove(instance.getZKPermissionWatcher().getWatcher());<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        refCount.remove(instance);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      }<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>  }<a name="line.786"></a>
-<span class="sourceLineNo">787</span>}<a name="line.787"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>


[49/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index b3dec4e..4413b7a 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 3806,
-             Errors: 15073,
+      <title>File: 3809,
+             Errors: 14996,
              Warnings: 0,
              Infos: 0
       </title>
@@ -601,7 +601,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  7
+                  2
                 </td>
               </tr>
                           <tr>
@@ -3583,7 +3583,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  3
+                  0
                 </td>
               </tr>
                           <tr>
@@ -4031,7 +4031,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  17
+                  16
                 </td>
               </tr>
                           <tr>
@@ -6906,6 +6906,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.AuthManager.java">org/apache/hadoop/hbase/security/access/AuthManager.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.Methods.java">org/apache/hadoop/hbase/util/Methods.java</a>
                 </td>
                 <td>
@@ -14844,6 +14858,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestRegionAssignedToMultipleRegionServers.java">org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.rest.TestGzipFilter.java">org/apache/hadoop/hbase/rest/TestGzipFilter.java</a>
                 </td>
                 <td>
@@ -28088,6 +28116,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.NamespacePermission.java">org/apache/hadoop/hbase/security/access/NamespacePermission.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mapreduce.TestTableMapReduce.java">org/apache/hadoop/hbase/mapreduce/TestTableMapReduce.java</a>
                 </td>
                 <td>
@@ -31009,7 +31051,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  13
+                  7
                 </td>
               </tr>
                           <tr>
@@ -35993,7 +36035,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  10
+                  1
                 </td>
               </tr>
                           <tr>
@@ -37925,7 +37967,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  40
+                  36
                 </td>
               </tr>
                           <tr>
@@ -38420,20 +38462,6 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TableAuthManager.java">org/apache/hadoop/hbase/security/access/TableAuthManager.java</a>
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  43
-                </td>
-              </tr>
-                          <tr>
-                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.FlushPolicy.java">org/apache/hadoop/hbase/regionserver/FlushPolicy.java</a>
                 </td>
                 <td>
@@ -42363,7 +42391,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  16
+                  13
                 </td>
               </tr>
                           <tr>
@@ -48313,7 +48341,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  49
+                  46
                 </td>
               </tr>
                           <tr>
@@ -48542,6 +48570,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.GlobalPermission.java">org/apache/hadoop/hbase/security/access/GlobalPermission.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.CreateRandomStoreFile.java">org/apache/hadoop/hbase/regionserver/CreateRandomStoreFile.java</a>
                 </td>
                 <td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index cf6c386..918f585 100644
--- a/coc.html
+++ b/coc.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -385,7 +385,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index b7b096b..040e79f 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -450,7 +450,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 9ed44a1..bedc60d 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -680,7 +680,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 92e047d..6d4b707 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -323,7 +323,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 09a52de..974e770 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -1009,7 +1009,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index 71892af..24cb244 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -168,6 +168,8 @@
 <li><a href="org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.html" title="class in org.apache.hadoop.hbase.security.token" target="classFrame">AuthenticationTokenSecretManager</a></li>
 <li><a href="org/apache/hadoop/hbase/security/token/AuthenticationTokenSelector.html" title="class in org.apache.hadoop.hbase.security.token" target="classFrame">AuthenticationTokenSelector</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/filter/AuthFilter.html" title="class in org.apache.hadoop.hbase.rest.filter" target="classFrame">AuthFilter</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">AuthManager</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">AuthManager.PermissionCache</a></li>
 <li><a href="org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security" target="classFrame">AuthMethod</a></li>
 <li><a href="org/apache/hadoop/hbase/security/visibility/Authorizations.html" title="class in org.apache.hadoop.hbase.security.visibility" target="classFrame">Authorizations</a></li>
 <li><a href="org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">AuthResult</a></li>
@@ -1009,6 +1011,7 @@
 <li><a href="org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">Get</a></li>
 <li><a href="org/apache/hadoop/hbase/util/GetJavaProperty.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">GetJavaProperty</a></li>
 <li><a href="org/apache/hadoop/hbase/metrics/impl/GlobalMetricRegistriesAdapter.html" title="class in org.apache.hadoop.hbase.metrics.impl" target="classFrame">GlobalMetricRegistriesAdapter</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">GlobalPermission</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas" target="classFrame">GlobalQuotaSettings</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/GlobalQuotaSettingsImpl.html" title="class in org.apache.hadoop.hbase.quotas" target="classFrame">GlobalQuotaSettingsImpl</a></li>
 <li><a href="org/apache/hadoop/hbase/mapred/GroupingTableMap.html" title="class in org.apache.hadoop.hbase.mapred" target="classFrame">GroupingTableMap</a></li>
@@ -1722,6 +1725,7 @@
 <li><a href="org/apache/hadoop/hbase/NamespaceExistException.html" title="class in org.apache.hadoop.hbase" target="classFrame">NamespaceExistException</a></li>
 <li><a href="org/apache/hadoop/hbase/wal/NamespaceGroupingStrategy.html" title="class in org.apache.hadoop.hbase.wal" target="classFrame">NamespaceGroupingStrategy</a></li>
 <li><a href="org/apache/hadoop/hbase/NamespaceNotFoundException.html" title="class in org.apache.hadoop.hbase" target="classFrame">NamespaceNotFoundException</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">NamespacePermission</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/NamespaceQuotaSnapshotStore.html" title="class in org.apache.hadoop.hbase.quotas" target="classFrame">NamespaceQuotaSnapshotStore</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/model/NamespacesInstanceModel.html" title="class in org.apache.hadoop.hbase.rest.model" target="classFrame">NamespacesInstanceModel</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/NamespacesInstanceResource.html" title="class in org.apache.hadoop.hbase.rest" target="classFrame">NamespacesInstanceResource</a></li>
@@ -1850,6 +1854,7 @@
 <li><a href="org/apache/hadoop/hbase/client/PerClientRandomNonceGenerator.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">PerClientRandomNonceGenerator</a></li>
 <li><a href="org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">Permission</a></li>
 <li><a href="org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access" target="classFrame">Permission.Action</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access" target="classFrame">Permission.Scope</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/provider/producer/PlainTextMessageBodyProducer.html" title="class in org.apache.hadoop.hbase.rest.provider.producer" target="classFrame">PlainTextMessageBodyProducer</a></li>
 <li><a href="org/apache/hadoop/hbase/PleaseHoldException.html" title="class in org.apache.hadoop.hbase" target="classFrame">PleaseHoldException</a></li>
 <li><a href="org/apache/hadoop/hbase/util/PoolMap.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">PoolMap</a></li>
@@ -2725,8 +2730,6 @@
 <li><a href="org/apache/hadoop/hbase/replication/SystemTableWALEntryFilter.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">SystemTableWALEntryFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client" target="classFrame"><span class="interfaceName">Table</span></a></li>
 <li><a href="org/apache/hadoop/hbase/client/Table.CheckAndMutateBuilder.html" title="interface in org.apache.hadoop.hbase.client" target="classFrame"><span class="interfaceName">Table.CheckAndMutateBuilder</span></a></li>
-<li><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TableAuthManager</a></li>
-<li><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TableAuthManager.PermissionCache</a></li>
 <li><a href="org/apache/hadoop/hbase/backup/impl/TableBackupClient.html" title="class in org.apache.hadoop.hbase.backup.impl" target="classFrame">TableBackupClient</a></li>
 <li><a href="org/apache/hadoop/hbase/backup/impl/TableBackupClient.Stage.html" title="enum in org.apache.hadoop.hbase.backup.impl" target="classFrame">TableBackupClient.Stage</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TableBuilder.html" title="interface in org.apache.hadoop.hbase.client" target="classFrame"><span class="interfaceName">TableBuilder</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index a5c6165..fe3870e 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -168,6 +168,8 @@
 <li><a href="org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.html" title="class in org.apache.hadoop.hbase.security.token">AuthenticationTokenSecretManager</a></li>
 <li><a href="org/apache/hadoop/hbase/security/token/AuthenticationTokenSelector.html" title="class in org.apache.hadoop.hbase.security.token">AuthenticationTokenSelector</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/filter/AuthFilter.html" title="class in org.apache.hadoop.hbase.rest.filter">AuthFilter</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a></li>
 <li><a href="org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security">AuthMethod</a></li>
 <li><a href="org/apache/hadoop/hbase/security/visibility/Authorizations.html" title="class in org.apache.hadoop.hbase.security.visibility">Authorizations</a></li>
 <li><a href="org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></li>
@@ -1009,6 +1011,7 @@
 <li><a href="org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a></li>
 <li><a href="org/apache/hadoop/hbase/util/GetJavaProperty.html" title="class in org.apache.hadoop.hbase.util">GetJavaProperty</a></li>
 <li><a href="org/apache/hadoop/hbase/metrics/impl/GlobalMetricRegistriesAdapter.html" title="class in org.apache.hadoop.hbase.metrics.impl">GlobalMetricRegistriesAdapter</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">GlobalQuotaSettings</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/GlobalQuotaSettingsImpl.html" title="class in org.apache.hadoop.hbase.quotas">GlobalQuotaSettingsImpl</a></li>
 <li><a href="org/apache/hadoop/hbase/mapred/GroupingTableMap.html" title="class in org.apache.hadoop.hbase.mapred">GroupingTableMap</a></li>
@@ -1722,6 +1725,7 @@
 <li><a href="org/apache/hadoop/hbase/NamespaceExistException.html" title="class in org.apache.hadoop.hbase">NamespaceExistException</a></li>
 <li><a href="org/apache/hadoop/hbase/wal/NamespaceGroupingStrategy.html" title="class in org.apache.hadoop.hbase.wal">NamespaceGroupingStrategy</a></li>
 <li><a href="org/apache/hadoop/hbase/NamespaceNotFoundException.html" title="class in org.apache.hadoop.hbase">NamespaceNotFoundException</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/NamespaceQuotaSnapshotStore.html" title="class in org.apache.hadoop.hbase.quotas">NamespaceQuotaSnapshotStore</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/model/NamespacesInstanceModel.html" title="class in org.apache.hadoop.hbase.rest.model">NamespacesInstanceModel</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/NamespacesInstanceResource.html" title="class in org.apache.hadoop.hbase.rest">NamespacesInstanceResource</a></li>
@@ -1850,6 +1854,7 @@
 <li><a href="org/apache/hadoop/hbase/client/PerClientRandomNonceGenerator.html" title="class in org.apache.hadoop.hbase.client">PerClientRandomNonceGenerator</a></li>
 <li><a href="org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a></li>
 <li><a href="org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Scope</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/provider/producer/PlainTextMessageBodyProducer.html" title="class in org.apache.hadoop.hbase.rest.provider.producer">PlainTextMessageBodyProducer</a></li>
 <li><a href="org/apache/hadoop/hbase/PleaseHoldException.html" title="class in org.apache.hadoop.hbase">PleaseHoldException</a></li>
 <li><a href="org/apache/hadoop/hbase/util/PoolMap.html" title="class in org.apache.hadoop.hbase.util">PoolMap</a></li>
@@ -2725,8 +2730,6 @@
 <li><a href="org/apache/hadoop/hbase/replication/SystemTableWALEntryFilter.html" title="class in org.apache.hadoop.hbase.replication">SystemTableWALEntryFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client"><span class="interfaceName">Table</span></a></li>
 <li><a href="org/apache/hadoop/hbase/client/Table.CheckAndMutateBuilder.html" title="interface in org.apache.hadoop.hbase.client"><span class="interfaceName">Table.CheckAndMutateBuilder</span></a></li>
-<li><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></li>
-<li><a href="org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a></li>
 <li><a href="org/apache/hadoop/hbase/backup/impl/TableBackupClient.html" title="class in org.apache.hadoop.hbase.backup.impl">TableBackupClient</a></li>
 <li><a href="org/apache/hadoop/hbase/backup/impl/TableBackupClient.Stage.html" title="enum in org.apache.hadoop.hbase.backup.impl">TableBackupClient.Stage</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TableBuilder.html" title="interface in org.apache.hadoop.hbase.client"><span class="interfaceName">TableBuilder</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index cf1f33f..de1295c 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3824,7 +3824,7 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Wed Nov 14 14:43:46 UTC 2018"</code></td>
+<td class="colLast"><code>"Thu Nov 15 14:45:38 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
@@ -3838,7 +3838,7 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"c47ab65d5523b7b5e171647165abbf68"</code></td>
+<td class="colLast"><code>"9ecbada5a636ddfc355ac88377f7c2f8"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">


[21/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html
new file mode 100644
index 0000000..4d5cbc9
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html
@@ -0,0 +1,680 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.Closeable;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.HashMap;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.HashSet;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Map;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Set;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.29"></a>
+<span class="sourceLineNo">030</span><a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.conf.Configuration;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.Cell;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.TableName;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.security.User;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.zookeeper.KeeperException;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.slf4j.Logger;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.slf4j.LoggerFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Performs authorization checks for a given user's assigned permissions.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * &lt;p&gt;<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *   There're following scopes: &lt;b&gt;Global&lt;/b&gt;, &lt;b&gt;Namespace&lt;/b&gt;, &lt;b&gt;Table&lt;/b&gt;, &lt;b&gt;Family&lt;/b&gt;,<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *   &lt;b&gt;Qualifier&lt;/b&gt;, &lt;b&gt;Cell&lt;/b&gt;.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> *   Generally speaking, higher scopes can overrides lower scopes,<a name="line.56"></a>
+<span class="sourceLineNo">057</span> *   except for Cell permission can be granted even a user has not permission on specified table,<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *   which means the user can get/scan only those granted cells parts.<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * &lt;/p&gt;<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * e.g, if user A has global permission R(ead), he can<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * read table T without checking table scope permission, so authorization checks alway starts from<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * Global scope.<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * &lt;p&gt;<a name="line.63"></a>
+<span class="sourceLineNo">064</span> *   For each scope, not only user but also groups he belongs to will be checked.<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * &lt;/p&gt;<a name="line.65"></a>
+<span class="sourceLineNo">066</span> */<a name="line.66"></a>
+<span class="sourceLineNo">067</span>@InterfaceAudience.Private<a name="line.67"></a>
+<span class="sourceLineNo">068</span>public final class AuthManager implements Closeable {<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  /**<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * Cache of permissions, it is thread safe.<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * @param &lt;T&gt; T extends Permission<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   */<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static class PermissionCache&lt;T extends Permission&gt; {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    private final Object mutex = new Object();<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    private Map&lt;String, Set&lt;T&gt;&gt; cache = new HashMap&lt;&gt;();<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>    void put(String name, T perm) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      synchronized (mutex) {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>        Set&lt;T&gt; perms = cache.getOrDefault(name, new HashSet&lt;&gt;());<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        perms.add(perm);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        cache.put(name, perms);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      }<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>    Set&lt;T&gt; get(String name) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      synchronized (mutex) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        return cache.get(name);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>    void clear() {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      synchronized (mutex) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        for (Map.Entry&lt;String, Set&lt;T&gt;&gt; entry : cache.entrySet()) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>          entry.getValue().clear();<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        cache.clear();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      }<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  PermissionCache&lt;NamespacePermission&gt; NS_NO_PERMISSION = new PermissionCache&lt;&gt;();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  PermissionCache&lt;TablePermission&gt; TBL_NO_PERMISSION = new PermissionCache&lt;&gt;();<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * Cache for global permission.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * Since every user/group can only have one global permission, no need to user PermissionCache.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   */<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private volatile Map&lt;String, GlobalPermission&gt; globalCache;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /** Cache for namespace permission. */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private ConcurrentHashMap&lt;String, PermissionCache&lt;NamespacePermission&gt;&gt; namespaceCache =<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    new ConcurrentHashMap&lt;&gt;();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  /** Cache for table permission. */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  private ConcurrentHashMap&lt;TableName, PermissionCache&lt;TablePermission&gt;&gt; tableCache =<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    new ConcurrentHashMap&lt;&gt;();<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private static final Logger LOG = LoggerFactory.getLogger(AuthManager.class);<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private Configuration conf;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private ZKPermissionWatcher zkperms;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private final AtomicLong mtime = new AtomicLong(0L);<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private AuthManager(ZKWatcher watcher, Configuration conf)<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      throws IOException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    this.conf = conf;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    // initialize global permissions based on configuration<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    globalCache = initGlobal(conf);<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    this.zkperms = new ZKPermissionWatcher(watcher, this, conf);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    try {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      this.zkperms.start();<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    } catch (KeeperException ke) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      LOG.error("ZooKeeper initialization failed", ke);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  @Override<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public void close() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    this.zkperms.close();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  /**<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   * Initialize with global permission assignments<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * from the {@code hbase.superuser} configuration key.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private Map&lt;String, GlobalPermission&gt; initGlobal(Configuration conf) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    UserProvider userProvider = UserProvider.instantiate(conf);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    User user = userProvider.getCurrent();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    if (user == null) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      throw new IOException("Unable to obtain the current user, " +<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        "authorization checks for internal operations will not work correctly!");<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    String currentUser = user.getShortName();<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    Map&lt;String, GlobalPermission&gt; global = new HashMap&lt;&gt;();<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    // the system user is always included<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    List&lt;String&gt; superusers = Lists.asList(currentUser, conf.getStrings(<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        Superusers.SUPERUSER_CONF_KEY, new String[0]));<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    for (String name : superusers) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      GlobalPermission globalPermission = new GlobalPermission(Permission.Action.values());<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      global.put(name, globalPermission);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    return global;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return this.zkperms;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * Update acl info for table.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * @param table name of table<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @param data updated acl data<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * @throws IOException exception when deserialize data<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public void refreshTableCacheFromWritable(TableName table, byte[] data) throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    if (data != null &amp;&amp; data.length &gt; 0) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      try {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        ListMultimap&lt;String, Permission&gt; perms =<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          AccessControlLists.readPermissions(data, conf);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        if (perms != null) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          if (Bytes.equals(table.getName(), AccessControlLists.ACL_GLOBAL_NAME)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>            updateGlobalCache(perms);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>          } else {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>            updateTableCache(table, perms);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        }<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      } catch (DeserializationException e) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        throw new IOException(e);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    } else {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      LOG.info("Skipping permission cache refresh because writable data is empty");<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>  /**<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * Update acl info for namespace.<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * @param namespace namespace<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * @param data updated acl data<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * @throws IOException exception when deserialize data<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public void refreshNamespaceCacheFromWritable(String namespace, byte[] data) throws IOException {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    if (data != null &amp;&amp; data.length &gt; 0) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      try {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        ListMultimap&lt;String, Permission&gt; perms =<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          AccessControlLists.readPermissions(data, conf);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        if (perms != null) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          updateNamespaceCache(namespace, perms);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      } catch (DeserializationException e) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        throw new IOException(e);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      LOG.debug("Skipping permission cache refresh because writable data is empty");<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>  /**<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * Updates the internal global permissions cache.<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * @param globalPerms new global permissions<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  private void updateGlobalCache(ListMultimap&lt;String, Permission&gt; globalPerms) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    try {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      Map&lt;String, GlobalPermission&gt; global = initGlobal(conf);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      for (String name : globalPerms.keySet()) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        for (Permission permission : globalPerms.get(name)) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          global.put(name, (GlobalPermission) permission);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      globalCache = global;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      mtime.incrementAndGet();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    } catch (Exception e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // Never happens<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      LOG.error("Error occurred while updating the global cache", e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    }<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * Updates the internal table permissions cache for specified table.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * @param table updated table name<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @param tablePerms new table permissions<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private void updateTableCache(TableName table, ListMultimap&lt;String, Permission&gt; tablePerms) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    PermissionCache&lt;TablePermission&gt; cacheToUpdate =<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      tableCache.getOrDefault(table, new PermissionCache&lt;&gt;());<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    clearCache(cacheToUpdate);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    updateCache(tablePerms, cacheToUpdate);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    tableCache.put(table, cacheToUpdate);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    mtime.incrementAndGet();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  /**<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * Updates the internal namespace permissions cache for specified namespace.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   * @param namespace updated namespace<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * @param nsPerms new namespace permissions<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  private void updateNamespaceCache(String namespace,<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      ListMultimap&lt;String, Permission&gt; nsPerms) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    PermissionCache&lt;NamespacePermission&gt; cacheToUpdate =<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      namespaceCache.getOrDefault(namespace, new PermissionCache&lt;&gt;());<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    clearCache(cacheToUpdate);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    updateCache(nsPerms, cacheToUpdate);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    namespaceCache.put(namespace, cacheToUpdate);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    mtime.incrementAndGet();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>  private void clearCache(PermissionCache cacheToUpdate) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    cacheToUpdate.clear();<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  @SuppressWarnings("unchecked")<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private void updateCache(ListMultimap&lt;String, ? extends Permission&gt; newPermissions,<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      PermissionCache cacheToUpdate) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    for (String name : newPermissions.keySet()) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      for (Permission permission : newPermissions.get(name)) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        cacheToUpdate.put(name, permission);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * Check if user has given action privilige in global scope.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   * @param user user name<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   * @return true if user has, false otherwise<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   */<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  public boolean authorizeUserGlobal(User user, Permission.Action action) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (user == null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      return false;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    if (authorizeGlobal(globalCache.get(user.getShortName()), action)) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      return true;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    for (String group : user.getGroupNames()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      if (authorizeGlobal(globalCache.get(AuthUtil.toGroupEntry(group)), action)) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        return true;<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    return false;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>  private boolean authorizeGlobal(GlobalPermission permissions, Permission.Action action) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    return permissions != null &amp;&amp; permissions.implies(action);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>  /**<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * Check if user has given action privilige in namespace scope.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * @param user user name<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * @param namespace namespace<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * @return true if user has, false otherwise<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   */<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  public boolean authorizeUserNamespace(User user, String namespace, Permission.Action action) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    if (user == null) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      return false;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    if (authorizeUserGlobal(user, action)) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      return true;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    PermissionCache&lt;NamespacePermission&gt; nsPermissions = namespaceCache.getOrDefault(namespace,<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      NS_NO_PERMISSION);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    if (authorizeNamespace(nsPermissions.get(user.getShortName()), namespace, action)) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return true;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    for (String group : user.getGroupNames()) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      if (authorizeNamespace(nsPermissions.get(AuthUtil.toGroupEntry(group)), namespace, action)) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        return true;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      }<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    return false;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>  private boolean authorizeNamespace(Set&lt;NamespacePermission&gt; permissions,<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      String namespace, Permission.Action action) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    if (permissions == null) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      return false;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    for (NamespacePermission permission : permissions) {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      if (permission.implies(namespace, action)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        return true;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    return false;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Checks if the user has access to the full table or at least a family/qualifier<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * for the specified action.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @param user user name<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * @param table table name<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @param action action in one of [Read, Write, Create, Exec, Admin]<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * @return true if the user has access to the table, false otherwise<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  public boolean accessUserTable(User user, TableName table, Permission.Action action) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    if (user == null) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      return false;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    if (table == null) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      table = AccessControlLists.ACL_TABLE_NAME;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    if (authorizeUserNamespace(user, table.getNamespaceAsString(), action)) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      return true;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    PermissionCache&lt;TablePermission&gt; tblPermissions = tableCache.getOrDefault(table,<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      TBL_NO_PERMISSION);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    if (hasAccessTable(tblPermissions.get(user.getShortName()), action)) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      return true;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    for (String group : user.getGroupNames()) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      if (hasAccessTable(tblPermissions.get(AuthUtil.toGroupEntry(group)), action)) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return true;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  private boolean hasAccessTable(Set&lt;TablePermission&gt; permissions, Permission.Action action) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    if (permissions == null) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      return false;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    for (TablePermission permission : permissions) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      if (permission.implies(action)) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        return true;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return false;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  /**<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * Check if user has given action privilige in table scope.<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * @param user user name<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @param table table name<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @return true if user has, false otherwise<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   */<a name="line.394"></a>
+<span class="sourceLineNo">395</span>  public boolean authorizeUserTable(User user, TableName table, Permission.Action action) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    return authorizeUserTable(user, table, null, null, action);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>  /**<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * Check if user has given action privilige in table:family scope.<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   * @param user user name<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * @param table table name<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * @param family family name<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * @return true if user has, false otherwise<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   */<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  public boolean authorizeUserTable(User user, TableName table, byte[] family,<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      Permission.Action action) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    return authorizeUserTable(user, table, family, null, action);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * Check if user has given action privilige in table:family:qualifier scope.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * @param user user name<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @param table table name<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * @param family family name<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * @param qualifier qualifier name<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * @return true if user has, false otherwise<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public boolean authorizeUserTable(User user, TableName table, byte[] family,<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      byte[] qualifier, Permission.Action action) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    if (user == null) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      return false;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (table == null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      table = AccessControlLists.ACL_TABLE_NAME;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    if (authorizeUserNamespace(user, table.getNamespaceAsString(), action)) {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      return true;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    }<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    PermissionCache&lt;TablePermission&gt; tblPermissions = tableCache.getOrDefault(table,<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      TBL_NO_PERMISSION);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    if (authorizeTable(tblPermissions.get(user.getShortName()), table, family, qualifier, action)) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      return true;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    for (String group : user.getGroupNames()) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      if (authorizeTable(tblPermissions.get(AuthUtil.toGroupEntry(group)),<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          table, family, qualifier, action)) {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        return true;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    return false;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private boolean authorizeTable(Set&lt;TablePermission&gt; permissions,<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      TableName table, byte[] family, byte[] qualifier, Permission.Action action) {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    if (permissions == null) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      return false;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    for (TablePermission permission : permissions) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      if (permission.implies(table, family, qualifier, action)) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        return true;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    return false;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  /**<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   * Check if user has given action privilige in table:family scope.<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * This method is for backward compatibility.<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * @param user user name<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * @param table table name<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   * @param family family names<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @return true if user has, false otherwise<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   */<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  public boolean authorizeUserFamily(User user, TableName table,<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      byte[] family, Permission.Action action) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    PermissionCache&lt;TablePermission&gt; tblPermissions = tableCache.getOrDefault(table,<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      TBL_NO_PERMISSION);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    if (authorizeFamily(tblPermissions.get(user.getShortName()), table, family, action)) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      return true;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    for (String group : user.getGroupNames()) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      if (authorizeFamily(tblPermissions.get(AuthUtil.toGroupEntry(group)),<a name="line.476"></a>
+<span class="sourceLineNo">477</span>          table, family, action)) {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>        return true;<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      }<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return false;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>  private boolean authorizeFamily(Set&lt;TablePermission&gt; permissions,<a name="line.484"></a>
+<span class="sourceLineNo">485</span>      TableName table, byte[] family, Permission.Action action) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    if (permissions == null) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      return false;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    for (TablePermission permission : permissions) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      if (permission.implies(table, family, action)) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        return true;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    return false;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Check if user has given action privilige in cell scope.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   * @param user user name<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * @param table table name<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * @param cell cell to be checked<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * @return true if user has, false otherwise<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  public boolean authorizeCell(User user, TableName table, Cell cell, Permission.Action action) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      List&lt;Permission&gt; perms = AccessControlLists.getCellPermissionsForUser(user, cell);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      if (LOG.isTraceEnabled()) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        LOG.trace("Perms for user " + user.getShortName() + " in cell " + cell + ": " +<a name="line.509"></a>
+<span class="sourceLineNo">510</span>          (perms != null ? perms : ""));<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      if (perms != null) {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>        for (Permission p: perms) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          if (p.implies(action)) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>            return true;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        }<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } catch (IOException e) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // We failed to parse the KV tag<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.error("Failed parse of ACL tag in cell " + cell);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      // Fall through to check with the table and CF perms we were able<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      // to collect regardless<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return false;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
+<span class="sourceLineNo">529</span>   * Remove given namespace from AuthManager's namespace cache.<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * @param ns namespace<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   */<a name="line.531"></a>
+<span class="sourceLineNo">532</span>  public void removeNamespace(byte[] ns) {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    namespaceCache.remove(Bytes.toString(ns));<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  /**<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * Remove given table from AuthManager's table cache.<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   * @param table table name<a name="line.538"></a>
+<span class="sourceLineNo">539</span>   */<a name="line.539"></a>
+<span class="sourceLineNo">540</span>  public void removeTable(TableName table) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    tableCache.remove(table);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span>  /**<a name="line.544"></a>
+<span class="sourceLineNo">545</span>   * Last modification logical time<a name="line.545"></a>
+<span class="sourceLineNo">546</span>   * @return time<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   */<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public long getMTime() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    return mtime.get();<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>  private static Map&lt;ZKWatcher, AuthManager&gt; managerMap = new HashMap&lt;&gt;();<a name="line.552"></a>
+<span class="sourceLineNo">553</span><a name="line.553"></a>
+<span class="sourceLineNo">554</span>  private static Map&lt;AuthManager, Integer&gt; refCount = new HashMap&lt;&gt;();<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>  /**<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   * Returns a AuthManager from the cache. If not cached, constructs a new one.<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * Returned instance should be released back by calling {@link #release(AuthManager)}.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @param watcher zk watcher<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   * @param conf configuration<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   * @return an AuthManager<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   * @throws IOException zookeeper initialization failed<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   */<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  public synchronized static AuthManager getOrCreate(<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      ZKWatcher watcher, Configuration conf) throws IOException {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    AuthManager instance = managerMap.get(watcher);<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    if (instance == null) {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      instance = new AuthManager(watcher, conf);<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      managerMap.put(watcher, instance);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    int ref = refCount.get(instance) == null ? 0 : refCount.get(instance);<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    refCount.put(instance, ref + 1);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    return instance;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>  @VisibleForTesting<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  public static int getTotalRefCount() {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    int total = 0;<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    for (int count : refCount.values()) {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      total += count;<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    }<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    return total;<a name="line.582"></a>
+<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
+<span class="sourceLineNo">584</span><a name="line.584"></a>
+<span class="sourceLineNo">585</span>  /**<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   * Releases the resources for the given AuthManager if the reference count is down to 0.<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * @param instance AuthManager to be released<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  public synchronized static void release(AuthManager instance) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    if (refCount.get(instance) == null || refCount.get(instance) &lt; 1) {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      String msg = "Something wrong with the AuthManager reference counting: " + instance<a name="line.591"></a>
+<span class="sourceLineNo">592</span>          + " whose count is " + refCount.get(instance);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>      instance.close();<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      managerMap.remove(instance.getZKPermissionWatcher().getWatcher());<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      instance.getZKPermissionWatcher().getWatcher().abort(msg, null);<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    } else {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      int ref = refCount.get(instance);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      --ref;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      refCount.put(instance, ref);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      if (ref == 0) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>        instance.close();<a name="line.602"></a>
+<span class="sourceLineNo">603</span>        managerMap.remove(instance.getZKPermissionWatcher().getWatcher());<a name="line.603"></a>
+<span class="sourceLineNo">604</span>        refCount.remove(instance);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>      }<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
+<span class="sourceLineNo">608</span>}<a name="line.608"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[40/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html b/devapidocs/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html
new file mode 100644
index 0000000..695371fd
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html
@@ -0,0 +1,362 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>AuthManager.PermissionCache (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="AuthManager.PermissionCache (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/AuthManager.PermissionCache.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" target="_top">Frames</a></li>
+<li><a href="AuthManager.PermissionCache.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
+<h2 title="Class AuthManager.PermissionCache" class="title">Class AuthManager.PermissionCache&lt;T extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.security.access.AuthManager.PermissionCache&lt;T&gt;</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt><span class="paramLabel">Type Parameters:</span></dt>
+<dd><code>T</code> - T extends Permission</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.html#line.74">AuthManager.PermissionCache</a>&lt;T extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">Cache of permissions, it is thread safe.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="type parameter in AuthManager.PermissionCache">T</a>&gt;&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#cache">cache</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#mutex">mutex</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier</th>
+<th class="colLast" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#PermissionCache--">PermissionCache</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#clear--">clear</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="type parameter in AuthManager.PermissionCache">T</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#get-java.lang.String-">get</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#put-java.lang.String-T-">put</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+   <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="type parameter in AuthManager.PermissionCache">T</a>&nbsp;perm)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="mutex">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>mutex</h4>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#line.75">mutex</a></pre>
+</li>
+</ul>
+<a name="cache">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>cache</h4>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="type parameter in AuthManager.PermissionCache">T</a> extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#line.76">cache</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="PermissionCache--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>PermissionCache</h4>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#line.74">PermissionCache</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="put-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">
+<!--   -->
+</a><a name="put-java.lang.String-T-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>put</h4>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#line.78">put</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+         <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="type parameter in AuthManager.PermissionCache">T</a>&nbsp;perm)</pre>
+</li>
+</ul>
+<a name="get-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>get</h4>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="type parameter in AuthManager.PermissionCache">T</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#line.86">get</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+</li>
+</ul>
+<a name="clear--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>clear</h4>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html#line.92">clear</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/AuthManager.PermissionCache.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" target="_top">Frames</a></li>
+<li><a href="AuthManager.PermissionCache.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[11/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.CompletedSnaphotDirectoriesFilter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.CompletedSnaphotDirectoriesFilter.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.CompletedSnaphotDirectoriesFilter.html
index 63a00a7..32d6965 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.CompletedSnaphotDirectoriesFilter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.CompletedSnaphotDirectoriesFilter.html
@@ -43,7 +43,7 @@
 <span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.security.User;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.security.access.AccessControlLists;<a name="line.36"></a>
 <span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.security.access.ShadedAccessControlUtil;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.security.access.TablePermission;<a name="line.38"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.security.access.UserPermission;<a name="line.38"></a>
 <span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.39"></a>
 <span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.40"></a>
 <span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.41"></a>
@@ -443,10 +443,10 @@
 <span class="sourceLineNo">435</span><a name="line.435"></a>
 <span class="sourceLineNo">436</span>  private static SnapshotDescription writeAclToSnapshotDescription(SnapshotDescription snapshot,<a name="line.436"></a>
 <span class="sourceLineNo">437</span>      Configuration conf) throws IOException {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    ListMultimap&lt;String, TablePermission&gt; perms =<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        User.runAsLoginUser(new PrivilegedExceptionAction&lt;ListMultimap&lt;String, TablePermission&gt;&gt;() {<a name="line.439"></a>
+<span class="sourceLineNo">438</span>    ListMultimap&lt;String, UserPermission&gt; perms =<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        User.runAsLoginUser(new PrivilegedExceptionAction&lt;ListMultimap&lt;String, UserPermission&gt;&gt;() {<a name="line.439"></a>
 <span class="sourceLineNo">440</span>          @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          public ListMultimap&lt;String, TablePermission&gt; run() throws Exception {<a name="line.441"></a>
+<span class="sourceLineNo">441</span>          public ListMultimap&lt;String, UserPermission&gt; run() throws Exception {<a name="line.441"></a>
 <span class="sourceLineNo">442</span>            return AccessControlLists.getTablePermissions(conf,<a name="line.442"></a>
 <span class="sourceLineNo">443</span>              TableName.valueOf(snapshot.getTable()));<a name="line.443"></a>
 <span class="sourceLineNo">444</span>          }<a name="line.444"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.html
index 63a00a7..32d6965 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.html
@@ -43,7 +43,7 @@
 <span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.security.User;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.security.access.AccessControlLists;<a name="line.36"></a>
 <span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.security.access.ShadedAccessControlUtil;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.security.access.TablePermission;<a name="line.38"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.security.access.UserPermission;<a name="line.38"></a>
 <span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.39"></a>
 <span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.40"></a>
 <span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.41"></a>
@@ -443,10 +443,10 @@
 <span class="sourceLineNo">435</span><a name="line.435"></a>
 <span class="sourceLineNo">436</span>  private static SnapshotDescription writeAclToSnapshotDescription(SnapshotDescription snapshot,<a name="line.436"></a>
 <span class="sourceLineNo">437</span>      Configuration conf) throws IOException {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    ListMultimap&lt;String, TablePermission&gt; perms =<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        User.runAsLoginUser(new PrivilegedExceptionAction&lt;ListMultimap&lt;String, TablePermission&gt;&gt;() {<a name="line.439"></a>
+<span class="sourceLineNo">438</span>    ListMultimap&lt;String, UserPermission&gt; perms =<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        User.runAsLoginUser(new PrivilegedExceptionAction&lt;ListMultimap&lt;String, UserPermission&gt;&gt;() {<a name="line.439"></a>
 <span class="sourceLineNo">440</span>          @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          public ListMultimap&lt;String, TablePermission&gt; run() throws Exception {<a name="line.441"></a>
+<span class="sourceLineNo">441</span>          public ListMultimap&lt;String, UserPermission&gt; run() throws Exception {<a name="line.441"></a>
 <span class="sourceLineNo">442</span>            return AccessControlLists.getTablePermissions(conf,<a name="line.442"></a>
 <span class="sourceLineNo">443</span>              TableName.valueOf(snapshot.getTable()));<a name="line.443"></a>
 <span class="sourceLineNo">444</span>          }<a name="line.444"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 5c0d243..405ed9e 100644
--- a/downloads.html
+++ b/downloads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -461,7 +461,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 7f8e4da..e9ebf27 100644
--- a/export_control.html
+++ b/export_control.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -341,7 +341,7 @@ for more details.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 58b409d..afa0cab 100644
--- a/index.html
+++ b/index.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -421,7 +421,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 9ae45aa..e19c82b 100644
--- a/integration.html
+++ b/integration.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -301,7 +301,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 2817692..0d73a29 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -298,7 +298,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 868d66b..e37973b 100644
--- a/license.html
+++ b/license.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -501,7 +501,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 39e0e01..824acce 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -351,7 +351,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 413ffaf..9ac6a03 100644
--- a/metrics.html
+++ b/metrics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -469,7 +469,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index bc3ae18..6d40d54 100644
--- a/old_news.html
+++ b/old_news.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -450,7 +450,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index aeb6314..f770311 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -450,7 +450,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 16f2147..d577701 100644
--- a/plugins.html
+++ b/plugins.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -381,7 +381,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 5737fa7..acf0295 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -779,7 +779,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index f2f9a4f..daefb03 100644
--- a/project-info.html
+++ b/project-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -345,7 +345,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 8b1fdd6..7320e39 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -315,7 +315,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 8344f1d..c57698f 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -341,7 +341,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 8a61178..3de822f 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -318,7 +318,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 39eff36..15a9f15 100644
--- a/replication.html
+++ b/replication.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -313,7 +313,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index eb4677f..1ca386e 100644
--- a/resources.html
+++ b/resources.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -341,7 +341,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 80125dc..ac09991 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -309,7 +309,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 415aef5..ee0cd07 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -343,7 +343,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index e1b450e..aaf84bb 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -530,7 +530,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index a40c186..e844e6d 100644
--- a/team-list.html
+++ b/team-list.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181114" />
+    <meta name="Date-Revision-yyyymmdd" content="20181115" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -776,7 +776,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-15</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 66ddb86..281cdc0 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -1784,6 +1784,10 @@
 <li><a href="org/apache/hadoop/hbase/coprocessor/example/TestRefreshHFilesEndpoint.HStoreWithFaultyRefreshHFilesAPI.html" title="class in org.apache.hadoop.hbase.coprocessor.example" target="classFrame">TestRefreshHFilesEndpoint.HStoreWithFaultyRefreshHFilesAPI</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestRegexComparator.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">TestRegexComparator</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestRegexComparator.TestCase.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">TestRegexComparator.TestCase</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionAssignedToMultipleRegionServers</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionAssignedToMultipleRegionServers.HMasterForTest</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionBypass</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionBypass.StallingAssignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionBypass.StallingAssignProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestRegionFavoredNodes.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestRegionFavoredNodes</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 107afb0..8749efa 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -1784,6 +1784,10 @@
 <li><a href="org/apache/hadoop/hbase/coprocessor/example/TestRefreshHFilesEndpoint.HStoreWithFaultyRefreshHFilesAPI.html" title="class in org.apache.hadoop.hbase.coprocessor.example">TestRefreshHFilesEndpoint.HStoreWithFaultyRefreshHFilesAPI</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestRegexComparator.html" title="class in org.apache.hadoop.hbase.filter">TestRegexComparator</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestRegexComparator.TestCase.html" title="class in org.apache.hadoop.hbase.filter">TestRegexComparator.TestCase</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.HMasterForTest</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionBypass</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionBypass.StallingAssignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionBypass.StallingAssignProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestRegionFavoredNodes.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionFavoredNodes</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 248c110..3d9d347 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -1444,6 +1444,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestCloseRegionWhileRSCrash.html#ARRIVE">ARRIVE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestCloseRegionWhileRSCrash.html" title="class in org.apache.hadoop.hbase.master.assignment">TestCloseRegionWhileRSCrash</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#ARRIVE">ARRIVE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/DummyRegionProcedure.html#arrive">arrive</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/DummyRegionProcedure.html" title="class in org.apache.hadoop.hbase.master">DummyRegionProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.html#ARRIVE">ARRIVE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.html" title="class in org.apache.hadoop.hbase.master">TestCloseAnOpeningRegion</a></dt>
@@ -2017,6 +2019,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#assignmentManager">assignmentManager</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html#AssignmentManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">AssignmentManagerForTest(MasterServices)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html#AssignmentManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">AssignmentManagerForTest(MasterServices)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html#AssignmentManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">AssignmentManagerForTest(MasterServices)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</a></dt>
@@ -3421,6 +3425,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html" title="class in org.apache.hadoop.hbase.master.assignment">TestModifyTableWhileMerging</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></dt>
@@ -3923,7 +3929,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/model/TestVersionModel.html#checkModel-org.apache.hadoop.hbase.rest.model.VersionModel-">checkModel(VersionModel)</a></span> - Method in class org.apache.hadoop.hbase.rest.model.<a href="org/apache/hadoop/hbase/rest/model/TestVersionModel.html" title="class in org.apache.hadoop.hbase.rest.model">TestVersionModel</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestTablePermissions.html#checkMultimapEqual-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">checkMultimapEqual(ListMultimap&lt;String, TablePermission&gt;, ListMultimap&lt;String, TablePermission&gt;)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestTablePermissions.html" title="class in org.apache.hadoop.hbase.security.access">TestTablePermissions</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestTablePermissions.html#checkMultimapEqual-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">checkMultimapEqual(ListMultimap&lt;String, UserPermission&gt;, ListMultimap&lt;String, UserPermission&gt;)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestTablePermissions.html" title="class in org.apache.hadoop.hbase.security.access">TestTablePermissions</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/TestNamespacesInstanceResource.html#checkNamespaceProperties-org.apache.hadoop.hbase.NamespaceDescriptor-java.util.Map-">checkNamespaceProperties(NamespaceDescriptor, Map&lt;String, String&gt;)</a></span> - Method in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/TestNamespacesInstanceResource.html" title="class in org.apache.hadoop.hbase.rest">TestNamespacesInstanceResource</a></dt>
 <dd>&nbsp;</dd>
@@ -5187,6 +5193,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html" title="class in org.apache.hadoop.hbase.master.assignment">TestModifyTableWhileMerging</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionBypass</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionMoveAndAbandon</a></dt>
@@ -9634,6 +9642,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/example/TestZooKeeperTableArchiveClient.html#createArchiveDirectory--">createArchiveDirectory()</a></span> - Method in class org.apache.hadoop.hbase.backup.example.<a href="org/apache/hadoop/hbase/backup/example/TestZooKeeperTableArchiveClient.html" title="class in org.apache.hadoop.hbase.backup.example">TestZooKeeperTableArchiveClient</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager(MasterServices)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.HMasterForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager(MasterServices)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.HMasterForTest</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager(MasterServices)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.HMasterForTest</a></dt>
@@ -9776,6 +9786,8 @@
 <dd>
 <div class="block">delete the row, family and cell to create the del file</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html#createDestinationServersList--">createDestinationServersList()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseTestingUtility.html#createDirAndSetProperty-java.lang.String-java.lang.String-">createDirAndSetProperty(String, String)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.TestTransitPeerSyncReplicationStateProcedure.html#createDirForRemoteWAL-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">createDirForRemoteWAL(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.TestTransitPeerSyncReplicationStateProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">TestTransitPeerSyncReplicationStateProcedureBackoff.TestTransitPeerSyncReplicationStateProcedure</a></dt>
@@ -10471,6 +10483,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestServerMetrics.html#createServerLoadProto--">createServerLoadProto()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestServerMetrics.html" title="class in org.apache.hadoop.hbase">TestServerMetrics</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html#createServerManager-org.apache.hadoop.hbase.master.MasterServices-">createServerManager(MasterServices)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.HMasterForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/BalancerTestBase.html#createServerMap-int-int-int-int-int-">createServerMap(int, int, int, int, int)</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/BalancerTestBase.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerTestBase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/ssl/KeyStoreTestUtil.html#createServerSSLConfig-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">createServerSSLConfig(String, String, String, String)</a></span> - Static method in class org.apache.hadoop.hbase.http.ssl.<a href="org/apache/hadoop/hbase/http/ssl/KeyStoreTestUtil.html" title="class in org.apache.hadoop.hbase.http.ssl">KeyStoreTestUtil</a></dt>
@@ -13570,6 +13584,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSwitchToStreamRead.MatchLastRowFilterRowFilter.html#exclude">exclude</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSwitchToStreamRead.MatchLastRowFilterRowFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestSwitchToStreamRead.MatchLastRowFilterRowFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#EXCLUDE_SERVERS">EXCLUDE_SERVERS</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseClusterManager.html#exec-java.lang.String-org.apache.hadoop.hbase.ClusterManager.ServiceType-java.lang.String...-">exec(String, ClusterManager.ServiceType, String...)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseClusterManager.html" title="class in org.apache.hadoop.hbase">HBaseClusterManager</a></dt>
 <dd>
 <div class="block">Execute the given command on the host using SSH</div>
@@ -20097,6 +20113,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html#hadPreWALRestore--">hadPreWALRestore()</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">SimpleRegionObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#HALT">HALT</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html#HALT">HALT</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationNewRSJoinBetweenRefreshes</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.HaltCP.html#HaltCP--">HaltCP()</a></span> - Constructor for class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.HaltCP.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationNewRSJoinBetweenRefreshes.HaltCP</a></dt>
@@ -20573,6 +20591,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestCompactionPolicy.html#hlog">hlog</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestCompactionPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">TestCompactionPolicy</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html#HMasterForTest-org.apache.hadoop.conf.Configuration-">HMasterForTest(Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.HMasterForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html#HMasterForTest-org.apache.hadoop.conf.Configuration-">HMasterForTest(Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.HMasterForTest</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html#HMasterForTest-org.apache.hadoop.conf.Configuration-">HMasterForTest(Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.HMasterForTest</a></dt>
@@ -22995,6 +23015,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseClusterManager.html#kill-org.apache.hadoop.hbase.ClusterManager.ServiceType-java.lang.String-int-">kill(ClusterManager.ServiceType, String, int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseClusterManager.html" title="class in org.apache.hadoop.hbase">HBaseClusterManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#KILL">KILL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MiniHBaseCluster.MiniHBaseClusterRegionServer.html#kill--">kill()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MiniHBaseCluster.MiniHBaseClusterRegionServer.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster.MiniHBaseClusterRegionServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/RESTApiClusterManager.html#kill-org.apache.hadoop.hbase.ClusterManager.ServiceType-java.lang.String-int-">kill(ClusterManager.ServiceType, String, int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/RESTApiClusterManager.html" title="class in org.apache.hadoop.hbase">RESTApiClusterManager</a></dt>
@@ -27381,6 +27403,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#NAME">NAME</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionBypass.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionBypass</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionMoveAndAbandon</a></dt>
@@ -34025,6 +34049,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MockRegionServerServices.html#reportRegionSizesForQuotas-org.apache.hadoop.hbase.quotas.RegionSizeStore-">reportRegionSizesForQuotas(RegionSizeStore)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MockRegionServerServices.html" title="class in org.apache.hadoop.hbase">MockRegionServerServices</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html#reportRegionStateTransition-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest-">reportRegionStateTransition(RegionServerStatusProtos.ReportRegionStateTransitionRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html#reportRegionStateTransition-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest-">reportRegionStateTransition(RegionServerStatusProtos.ReportRegionStateTransitionRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html#reportRegionStateTransition-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest-">reportRegionStateTransition(RegionServerStatusProtos.ReportRegionStateTransitionRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</a></dt>
@@ -36895,6 +36921,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#serverManager">serverManager</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/MockMasterServices.html" title="class in org.apache.hadoop.hbase.master.assignment">MockMasterServices</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html#ServerManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">ServerManagerForTest(MasterServices)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestCloseRegionWhileRSCrash.DummyServerProcedure.html#serverName">serverName</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestCloseRegionWhileRSCrash.DummyServerProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestCloseRegionWhileRSCrash.DummyServerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MockRegionServerServices.html#serverName">serverName</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MockRegionServerServices.html" title="class in org.apache.hadoop.hbase">MockRegionServerServices</a></dt>
@@ -37849,6 +37877,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#setup--">setup()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#setup--">setup()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionMoveAndAbandon</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionStates</a></dt>
@@ -43355,6 +43385,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#teardown--">teardown()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionMoveAndAbandon</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionStates</a></dt>
@@ -44435,6 +44467,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html" title="class in org.apache.hadoop.hbase.master.assignment">TestModifyTableWhileMerging</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionMoveAndAbandon</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer">TestServerAndLoad</a></dt>
@@ -59715,6 +59749,16 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHFileArchiveUtil.html#testRegionArchiveDir--">testRegionArchiveDir()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHFileArchiveUtil.html" title="class in org.apache.hadoop.hbase.util">TestHFileArchiveUtil</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#TestRegionAssignedToMultipleRegionServers--">TestRegionAssignedToMultipleRegionServers()</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers.AssignmentManagerForTest</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers.HMasterForTest</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.ServerManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers.ServerManagerForTest</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestZooKeeper.html#testRegionAssignmentAfterMasterRecoveryDueToZKExpiry--">testRegionAssignmentAfterMasterRecoveryDueToZKExpiry()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestZooKeeper.html" title="class in org.apache.hadoop.hbase">TestZooKeeper</a></dt>
 <dd>
 <div class="block">Tests that the master does not call retainAssignment after recovery from expired zookeeper
@@ -61754,6 +61798,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/TestScannersWithFilters.html#testRowFilter--">testRowFilter()</a></span> - Method in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/TestScannersWithFilters.html" title="class in org.apache.hadoop.hbase.rest">TestScannersWithFilters</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html#testRowIndexWithTagsButNoTagsInCell--">testRowIndexWithTagsButNoTagsInCell()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html" title="class in org.apache.hadoop.hbase.io.encoding">TestDataBlockEncoders</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestMutation.html#testRowIsImmutableOrNot--">testRowIsImmutableOrNot()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestMutation.html" title="class in org.apache.hadoop.hbase.client">TestMutation</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStripeStoreFileManager.html#testRowKeyBefore--">testRowKeyBefore()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStripeStoreFileManager.html" title="class in org.apache.hadoop.hbase.regionserver">TestStripeStoreFileManager</a></dt>
@@ -68709,6 +68755,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestModifyTableWhileMerging.html" title="class in org.apache.hadoop.hbase.master.assignment">TestModifyTableWhileMerging</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionAssignedToMultipleRegionServers</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#UTIL">UTIL</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionMoveAndAbandon</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionStates</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 2d9b60f..6af42fe 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -146,8 +146,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.Failure.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupDeleteWithFailures.Failure</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.Failure.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupDeleteWithFailures.Failure</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
index 7da9d77..fc0684e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -3565,6 +3565,10 @@
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestRegionAssignedToMultipleRegionServers.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index 09082c5..31dcfa0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -2291,6 +2291,10 @@
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestReportRegionStateTransitionRetry.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestRegionAssignedToMultipleRegionServers.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">


[31/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.Action.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.Action.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.Action.html
index 9ca96d9..0a6df8c 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.Action.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/Permission.Action.html
@@ -129,10 +129,6 @@
 <td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#action">action</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>[]</code></td>
-<td class="colLast"><span class="typeNameLabel">Permission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#actions">actions</a></span></code>&nbsp;</td>
-</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
@@ -146,6 +142,10 @@
 <td class="colFirst"><code>protected static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang">Byte</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">Permission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#ACTION_BY_CODE">ACTION_BY_CODE</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">Permission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#actions">actions</a></span></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -220,6 +220,15 @@ the order they are declared.</div>
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#accessUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">accessUserTable</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+               <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Checks if the user has access to the full table or at least a family/qualifier
+ for the specified action.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#allow-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-java.lang.String-">allow</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -227,7 +236,7 @@ the order they are declared.</div>
      <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#allow-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-byte:A-byte:A-">allow</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -237,7 +246,7 @@ the order they are declared.</div>
      byte[]&nbsp;family,
      byte[]&nbsp;qualifier)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthResult.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html#allow-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-java.util.Map-">allow</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
@@ -246,100 +255,90 @@ the order they are declared.</div>
      <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],? extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;?&gt;&gt;&nbsp;families)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Authorizes a global permission</div>
-</td>
-</tr>
 <tr class="altColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeCell-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeCell</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+             <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+             <a href="../../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+             <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in cell scope.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-         <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         byte[]&nbsp;family,
-         byte[]&nbsp;qualifier,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeFamily-java.util.Set-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeFamily</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+               <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+               byte[]&nbsp;family,
+               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Authorize a global permission based on ACLs for the given user and the
- user's groups.</div>
-</td>
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeGlobal-org.apache.hadoop.hbase.security.access.GlobalPermission-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeGlobal</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access">GlobalPermission</a>&nbsp;permissions,
+               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeNamespace-java.util.Set-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeNamespace</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access">NamespacePermission</a>&gt;&nbsp;permissions,
+                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                  <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         byte[]&nbsp;family,
-         byte[]&nbsp;qualifier,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeTable-java.util.Set-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeTable</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+              <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+              byte[]&nbsp;family,
+              byte[]&nbsp;qualifier,
+              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         byte[]&nbsp;family,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserFamily-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserFamily</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                   <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                   byte[]&nbsp;family,
+                   <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table:family scope.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Authorize a user for a given KV.</div>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserGlobal-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserGlobal</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                   <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in global scope.</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeGroup-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeGroup</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
-              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks global authorization for a given action for a group, based on the stored
- permissions.</div>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserNamespace-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserNamespace</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                      <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in namespace scope.</div>
 </td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeGroup-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeGroup</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
-              <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-              byte[]&nbsp;family,
-              byte[]&nbsp;qualifier,
-              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks authorization to a given table, column family and column for a group, based
- on the stored permissions.</div>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                  <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                  byte[]&nbsp;family,
+                  byte[]&nbsp;qualifier,
+                  <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table:family:qualifier scope.</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUser</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-             <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             byte[]&nbsp;family,
-             byte[]&nbsp;qualifier,
-             <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                  <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                  byte[]&nbsp;family,
+                  <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table:family scope.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorizeUser-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUser</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-             <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             byte[]&nbsp;family,
-             <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks authorization to a given table and column family for a user, based on the
- stored user permissions.</div>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeUserTable-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeUserTable</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+                  <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+                  <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Check if user has given action privilige in table scope.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -475,25 +474,9 @@ the order they are declared.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#groupHasAccess-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">groupHasAccess</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
-              <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks if the user has access to the full table or at least a family/qualifier
- for the specified action.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#hasAccess-java.util.List-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccess</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-         <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#hasAccess-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccess</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-         <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#hasAccessTable-java.util.Set-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccessTable</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
@@ -544,14 +527,15 @@ the order they are declared.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">Permission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#implies-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">Permission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#implies-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">check if given action is granted</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+<td class="colLast"><span class="typeNameLabel">NamespacePermission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#implies-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
        <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks that a given table operation is authorized by this permission
- instance.</div>
+<div class="block">check if given action is granted in given namespace.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -560,56 +544,27 @@ the order they are declared.</div>
        byte[]&nbsp;family,
        byte[]&nbsp;qualifier,
        <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks that a given table operation is authorized by this permission
- instance.</div>
+<div class="block">Check if given action can performs on given table:family:qualifier.</div>
 </td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.KeyValue-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-       <a href="../../../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;kv,
+<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+       byte[]&nbsp;family,
        <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks if this permission grants access to perform the given action on
- the given table and key value.</div>
+<div class="block">Check if given action can performs on given table:family.</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#matchesFamily-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchesFamily</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             byte[]&nbsp;family,
-             <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Returns <code>true</code> if this permission matches the given column
- family at least.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#matchesFamilyQualifier-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchesFamilyQualifier</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                      byte[]&nbsp;family,
-                      byte[]&nbsp;qualifier,
-                      <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Returns if the given permission matches the given qualifier.</div>
+<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#implies-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.KeyValue-org.apache.hadoop.hbase.security.access.Permission.Action-">implies</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+       <a href="../../../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;kv,
+       <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
+<div class="block">Checks if this permission grants access to perform the given action on
+ the given table and key value.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#matchPermission-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchPermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-               <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-               byte[]&nbsp;family,
-               byte[]&nbsp;qualifier,
-               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
 <tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#matchPermission-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">matchPermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-               <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-               byte[]&nbsp;family,
-               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Returns true if the given user has a <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access"><code>TablePermission</code></a> matching up
- to the column family portion of a permission.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#permissionGranted-org.apache.hadoop.hbase.security.access.AccessController.OpType-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment-java.util.Map-org.apache.hadoop.hbase.security.access.Permission.Action...-">permissionGranted</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a>&nbsp;opType,
                  <a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
@@ -620,7 +575,7 @@ the order they are declared.</div>
  against the given set of row data.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access">AuthResult</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#permissionGranted-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment-org.apache.hadoop.hbase.TableName-java.util.Map-">permissionGranted</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
                  <a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
@@ -632,14 +587,14 @@ the order they are declared.</div>
  row data.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requireAccess-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireAccess</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
              <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;permissions)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requireAccess-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireAccess</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -648,14 +603,14 @@ the order they are declared.</div>
 <div class="block">Authorizes that the current user has any of the given permissions to access the table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requireGlobalPermission-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-java.lang.String-">requireGlobalPermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
                        <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;perm,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requireGlobalPermission-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-java.util.Map-">requireGlobalPermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -663,7 +618,7 @@ the order they are declared.</div>
                        <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],? extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&gt;&nbsp;familyMap)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requireGlobalPermission-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-java.lang.String-">requireGlobalPermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -672,7 +627,7 @@ the order they are declared.</div>
 <div class="block">Checks that the user has the given global permission.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requireGlobalPermission-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-org.apache.hadoop.hbase.TableName-java.util.Map-java.lang.String-">requireGlobalPermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -683,14 +638,14 @@ the order they are declared.</div>
 <div class="block">Checks that the user has the given global permission.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requireNamespacePermission-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireNamespacePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
                           <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;permissions)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requireNamespacePermission-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-java.lang.String-org.apache.hadoop.hbase.TableName-java.util.Map-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireNamespacePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -699,7 +654,7 @@ the order they are declared.</div>
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],? extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&gt;&nbsp;familyMap,
                           <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;permissions)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requireNamespacePermission-org.apache.hadoop.hbase.security.User-java.lang.String-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireNamespacePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -709,7 +664,7 @@ the order they are declared.</div>
 <div class="block">Checks that the user has the given global or namespace permission.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requireNamespacePermission-org.apache.hadoop.hbase.security.User-java.lang.String-java.lang.String-org.apache.hadoop.hbase.TableName-java.util.Map-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireNamespacePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -720,13 +675,13 @@ the order they are declared.</div>
 <div class="block">Checks that the user has the given global or namespace permission.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requirePermission-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">requirePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
                  <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;perm)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requirePermission-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">requirePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -735,7 +690,7 @@ the order they are declared.</div>
                  byte[]&nbsp;qualifier,
                  <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;permissions)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requirePermission-org.apache.hadoop.hbase.security.User-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">requirePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -744,7 +699,7 @@ the order they are declared.</div>
 <div class="block">Authorizes that the current user has global privileges for the given action.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requirePermission-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">requirePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -757,7 +712,7 @@ the order they are declared.</div>
  given table, column family and column qualifier.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessController.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#requireTablePermission-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireTablePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;?&gt;&nbsp;ctx,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -766,7 +721,7 @@ the order they are declared.</div>
                       byte[]&nbsp;qualifier,
                       <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;permissions)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessChecker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#requireTablePermission-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">requireTablePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
@@ -778,7 +733,7 @@ the order they are declared.</div>
  given table, column family and column qualifier.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#revoke-org.apache.hadoop.hbase.client.Connection-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">revoke</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;userName,
@@ -786,7 +741,7 @@ the order they are declared.</div>
 <div class="block">Revoke global permissions for the specified user.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#revoke-org.apache.hadoop.hbase.client.Connection-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">revoke</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
@@ -795,7 +750,7 @@ the order they are declared.</div>
 <div class="block">Revokes the permission on the table for the specified user.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#revoke-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.TableName-java.lang.String-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">revoke</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
       <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -806,7 +761,7 @@ the order they are declared.</div>
 <div class="block">Revokes the permission on the table</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#revoke-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">revoke</a></span>(com.google.protobuf.RpcController&nbsp;controller,
       org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
@@ -815,7 +770,7 @@ the order they are declared.</div>
 <div class="block">A utility used to revoke a user's global permissions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#revoke-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">revoke</a></span>(com.google.protobuf.RpcController&nbsp;controller,
       org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
@@ -825,7 +780,7 @@ the order they are declared.</div>
 <div class="block">A utility used to revoke a user's namespace permissions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#revoke-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">revoke</a></span>(com.google.protobuf.RpcController&nbsp;controller,
       org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
@@ -837,31 +792,22 @@ the order they are declared.</div>
 <div class="block">A utility used to revoke a user's table permissions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Permission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#setActions-org.apache.hadoop.hbase.security.access.Permission.Action:A-">setActions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>[]&nbsp;assigned)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Action</code></td>
 <td class="colLast"><span class="typeNameLabel">ShadedAccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toPermissionAction-org.apache.hadoop.hbase.security.access.Permission.Action-">toPermissionAction</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
 <div class="block">Convert a client user permission to a user permission shaded proto.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toPermissionAction-org.apache.hadoop.hbase.security.access.Permission.Action-">toPermissionAction</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
 <div class="block">Convert a client Permission.Action to a Permission.Action proto</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#userHasAccess-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">userHasAccess</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
-             <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-             <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
-<div class="block">Checks if the user has access to the full table or at least a family/qualifier
- for the specified action.</div>
-</td>
-</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
@@ -898,71 +844,75 @@ the order they are declared.</div>
           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],? extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;?&gt;&gt;&nbsp;families)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#Permission-org.apache.hadoop.hbase.security.access.Permission.Action...-">Permission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/GlobalPermission.html#GlobalPermission-org.apache.hadoop.hbase.security.access.Permission.Action...-">GlobalPermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
+<div class="block">Construct a global permission.</div>
+</td>
 </tr>
 <tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">TablePermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Create a new permission for the given namespace,
- allowing the given actions.</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/NamespacePermission.html#NamespacePermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">NamespacePermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+                   <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
+<div class="block">Construct a namespace permission.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">TablePermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-               <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-               byte[]&nbsp;family,
-               byte[]&nbsp;qualifier,
-               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Creates a new permission for the given namespace or table, restricted to the given
- column family and qualifier, allowing the assigned actions to be performed.</div>
-</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.html#Permission-org.apache.hadoop.hbase.security.access.Permission.Action...-">Permission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">TablePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                byte[]&nbsp;family,
                byte[]&nbsp;qualifier,
                <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Creates a new permission for the given table, restricted to the given
- column family and qualifier, allowing the assigned actions to be performed.</div>
+<div class="block">Construct a table:family:qualifier permission.</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">TablePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                byte[]&nbsp;family,
                <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Create a new permission for the given table and (optionally) column family,
- allowing the given actions.</div>
+<div class="block">Construct a table:family permission.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(byte[]&nbsp;user,
-              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Creates a new instance for the given user.</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#TablePermission-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action...-">TablePermission</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
+<div class="block">Construct a table permission.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(byte[]&nbsp;user,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Creates a new instance for the given user.</div>
+<div class="block">Construct a global user permission.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(byte[]&nbsp;user,
-              <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
+              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
+<div class="block">Construct a namespace user permission.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               byte[]&nbsp;family,
               byte[]&nbsp;qualifier,
               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Creates a new permission for the given user, table, column family and
- column qualifier.</div>
+<div class="block">Construct a table:family:qualifier user permission.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(byte[]&nbsp;user,
-              <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<tr class="altColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               byte[]&nbsp;family,
               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;assigned)</code>
-<div class="block">Creates a new instance for the given user, table and column family.</div>
+<div class="block">Construct a table:family user permission.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action...-">UserPermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+              <a href="../../../../../../../org/apache/hadoop/hba

<TRUNCATED>

[27/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html b/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html
index 44628e7..18eaf1f 100644
--- a/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html
+++ b/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.116">RestoreSnapshotHelper</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.117">RestoreSnapshotHelper</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Helper to Restore/Clone a Snapshot
 
@@ -467,7 +467,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.117">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.118">LOG</a></pre>
 </li>
 </ul>
 <a name="regionsMap">
@@ -476,7 +476,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsMap</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],byte[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.119">regionsMap</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],byte[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.120">regionsMap</a></pre>
 </li>
 </ul>
 <a name="parentsMap">
@@ -485,7 +485,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>parentsMap</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.121">parentsMap</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.122">parentsMap</a></pre>
 </li>
 </ul>
 <a name="monitor">
@@ -494,7 +494,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>monitor</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.123">monitor</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.124">monitor</a></pre>
 </li>
 </ul>
 <a name="status">
@@ -503,7 +503,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>status</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.124">status</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.125">status</a></pre>
 </li>
 </ul>
 <a name="snapshotManifest">
@@ -512,7 +512,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotManifest</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.126">snapshotManifest</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.127">snapshotManifest</a></pre>
 </li>
 </ul>
 <a name="snapshotDesc">
@@ -521,7 +521,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotDesc</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.127">snapshotDesc</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.128">snapshotDesc</a></pre>
 </li>
 </ul>
 <a name="snapshotTable">
@@ -530,7 +530,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotTable</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.128">snapshotTable</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.129">snapshotTable</a></pre>
 </li>
 </ul>
 <a name="tableDesc">
@@ -539,7 +539,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tableDesc</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.130">tableDesc</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.131">tableDesc</a></pre>
 </li>
 </ul>
 <a name="rootDir">
@@ -548,7 +548,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>rootDir</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.131">rootDir</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.132">rootDir</a></pre>
 </li>
 </ul>
 <a name="tableDir">
@@ -557,7 +557,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tableDir</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.132">tableDir</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.133">tableDir</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -566,7 +566,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.134">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.135">conf</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -575,7 +575,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.135">fs</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.136">fs</a></pre>
 </li>
 </ul>
 <a name="createBackRefs">
@@ -584,7 +584,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createBackRefs</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.136">createBackRefs</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.137">createBackRefs</a></pre>
 </li>
 </ul>
 </li>
@@ -601,7 +601,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>RestoreSnapshotHelper</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.138">RestoreSnapshotHelper</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.139">RestoreSnapshotHelper</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                              org.apache.hadoop.fs.FileSystem&nbsp;fs,
                              <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a>&nbsp;manifest,
                              <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
@@ -616,7 +616,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RestoreSnapshotHelper</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.148">RestoreSnapshotHelper</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.149">RestoreSnapshotHelper</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                              org.apache.hadoop.fs.FileSystem&nbsp;fs,
                              <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a>&nbsp;manifest,
                              <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
@@ -640,7 +640,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreHdfsRegions</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper.RestoreMetaChanges</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.174">restoreHdfsRegions</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper.RestoreMetaChanges</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.175">restoreHdfsRegions</a>()
                                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Restore the on-disk table to a specified snapshot state.</div>
 <dl>
@@ -657,7 +657,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreHdfsRegions</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper.RestoreMetaChanges</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.183">restoreHdfsRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;exec)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper.RestoreMetaChanges</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.184">restoreHdfsRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;exec)
                                                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -671,7 +671,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeHdfsRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.419">removeHdfsRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;exec,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.420">removeHdfsRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;exec,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Remove specified regions from the file-system, using the archiver.</div>
@@ -687,7 +687,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreHdfsRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.433">restoreHdfsRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;exec,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.434">restoreHdfsRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;exec,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;regionManifests,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -704,7 +704,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreHdfsMobRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.448">restoreHdfsMobRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;exec,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.449">restoreHdfsMobRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;exec,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;regionManifests,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -721,7 +721,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionHFileReferences</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest.StoreFile&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.460">getRegionHFileReferences</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;manifest)</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest.StoreFile&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.461">getRegionHFileReferences</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;manifest)</pre>
 </li>
 </ul>
 <a name="restoreRegion-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest-">
@@ -730,7 +730,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.475">restoreRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.476">restoreRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                            org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;regionManifest)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Restore region by removing files not in the snapshot
@@ -747,7 +747,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreMobRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.484">restoreMobRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.485">restoreMobRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                               org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;regionManifest)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Restore mob region by removing files not in the snapshot
@@ -764,7 +764,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.497">restoreRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.498">restoreRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                            org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;regionManifest,
                            org.apache.hadoop.fs.Path&nbsp;regionDir)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -782,7 +782,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableRegionFamilyFiles</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.563">getTableRegionFamilyFiles</a>(org.apache.hadoop.fs.Path&nbsp;familyDir)
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.564">getTableRegionFamilyFiles</a>(org.apache.hadoop.fs.Path&nbsp;familyDir)
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -798,7 +798,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneHdfsRegions</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.580">cloneHdfsRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;exec,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.581">cloneHdfsRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;exec,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;regionManifests,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -816,7 +816,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneHdfsMobRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.621">cloneHdfsMobRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;regionManifests,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.622">cloneHdfsMobRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;regionManifests,
                                 <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Clone the mob region. For the region create a new region
@@ -833,7 +833,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.639">cloneRegion</a>(org.apache.hadoop.fs.Path&nbsp;regionDir,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.640">cloneRegion</a>(org.apache.hadoop.fs.Path&nbsp;regionDir,
                          <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;snapshotRegionInfo,
                          org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;manifest)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -858,7 +858,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.662">cloneRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.663">cloneRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                          <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;snapshotRegionInfo,
                          org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;manifest)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -883,7 +883,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreStoreFile</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.681">restoreStoreFile</a>(org.apache.hadoop.fs.Path&nbsp;familyDir,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.682">restoreStoreFile</a>(org.apache.hadoop.fs.Path&nbsp;familyDir,
                               <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                               org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest.StoreFile&nbsp;storeFile,
                               boolean&nbsp;createBackRef)
@@ -912,7 +912,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreReferenceFile</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.712">restoreReferenceFile</a>(org.apache.hadoop.fs.Path&nbsp;familyDir,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.713">restoreReferenceFile</a>(org.apache.hadoop.fs.Path&nbsp;familyDir,
                                   <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                   org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest.StoreFile&nbsp;storeFile)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -945,7 +945,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.783">cloneRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;snapshotRegionInfo)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.784">cloneRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;snapshotRegionInfo)</pre>
 <div class="block">Create a new <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> from the snapshot region info.
  Keep the same startKey, endKey, regionId and split information but change
  the table name.</div>
@@ -963,7 +963,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneRegionInfo</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.787">cloneRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.788">cloneRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                          <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;snapshotRegionInfo)</pre>
 </li>
 </ul>
@@ -973,7 +973,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableRegions</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.800">getTableRegions</a>()
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.801">getTableRegions</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -989,7 +989,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copySnapshotForScanner</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper.RestoreMetaChanges</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.824">copySnapshotForScanner</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper.RestoreMetaChanges</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.825">copySnapshotForScanner</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                               org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                               org.apache.hadoop.fs.Path&nbsp;rootDir,
                                                                               org.apache.hadoop.fs.Path&nbsp;restoreDir,
@@ -1014,7 +1014,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>restoreSnapshotAcl</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.857">restoreSnapshotAcl</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshot,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.858">restoreSnapshotAcl</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshot,
                                       <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
                                       org.apache.hadoop.conf.Configuration&nbsp;conf)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 81a90a9..2923faf 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -199,8 +199,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteRange.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteRange.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteRange.html
index 9cf9cd5..36baf5f 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteRange.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteRange.html
@@ -311,7 +311,7 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#AccessControlFilter-org.apache.hadoop.hbase.security.access.TableAuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">AccessControlFilter</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;mgr,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#AccessControlFilter-org.apache.hadoop.hbase.security.access.AuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">AccessControlFilter</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;mgr,
                    <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;ugi,
                    <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                    <a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access">AccessControlFilter.Strategy</a>&nbsp;strategy,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
index 7edfec9..0a8b004 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
@@ -1631,7 +1631,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#parsePermissionRecord-byte:A-org.apache.hadoop.hbase.Cell-byte:A-byte:A-boolean-java.lang.String-">parsePermissionRecord</a></span>(byte[]&nbsp;entryName,
                      <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv,
                      byte[]&nbsp;cf,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 2dc9444..133b17e 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -540,14 +540,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZKWatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZKWatcher.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZKWatcher.html
index f4ba195..9dc70e5 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZKWatcher.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/class-use/ZKWatcher.html
@@ -818,8 +818,8 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#managerMap">managerMap</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#managerMap">managerMap</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -831,10 +831,10 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getOrCreate-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">getOrCreate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#getOrCreate-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">getOrCreate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
            org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block">Returns a TableAuthManager from the cache.</div>
+<div class="block">Returns a AuthManager from the cache.</div>
 </td>
 </tr>
 </tbody>
@@ -852,12 +852,12 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#TableAuthManager-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">TableAuthManager</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
-                org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#AuthManager-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.conf.Configuration-">AuthManager</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
+           org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#ZKPermissionWatcher-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.hbase.security.access.TableAuthManager-org.apache.hadoop.conf.Configuration-">ZKPermissionWatcher</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
-                   <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;authManager,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#ZKPermissionWatcher-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.hbase.security.access.AuthManager-org.apache.hadoop.conf.Configuration-">ZKPermissionWatcher</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;watcher,
+                   <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;authManager,
                    org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index a218a46..82c7715 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -589,6 +589,8 @@
 </li>
 <li type="circle">org.apache.hadoop.hbase.security.token.<a href="org/apache/hadoop/hbase/security/token/AuthenticationKey.html" title="class in org.apache.hadoop.hbase.security.token"><span class="typeNameLink">AuthenticationKey</span></a> (implements org.apache.hadoop.io.Writable)</li>
 <li type="circle">org.apache.hadoop.hbase.security.token.<a href="org/apache/hadoop/hbase/security/token/AuthenticationTokenSelector.html" title="class in org.apache.hadoop.hbase.security.token"><span class="typeNameLink">AuthenticationTokenSelector</span></a> (implements org.apache.hadoop.security.token.TokenSelector&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AuthManager</span></a> (implements java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AuthManager.PermissionCache</span></a>&lt;T&gt;</li>
 <li type="circle">org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/Authorizations.html" title="class in org.apache.hadoop.hbase.security.visibility"><span class="typeNameLink">Authorizations</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AuthResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AuthResult.Params.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AuthResult.Params</span></a></li>
@@ -3711,8 +3713,6 @@
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/SyncReplicationWALProvider.DefaultSyncReplicationPeerInfoProvider.html" title="class in org.apache.hadoop.hbase.wal"><span class="typeNameLink">SyncReplicationWALProvider.DefaultSyncReplicationPeerInfoProvider</span></a> (implements org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/SyncReplicationPeerInfoProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">SyncReplicationPeerInfoProvider</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.CellScanner.html" title="class in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.CellScanner</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SystemTableWALEntryFilter.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SystemTableWALEntryFilter</span></a> (implements org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/WALEntryFilter.html" title="interface in org.apache.hadoop.hbase.replication">WALEntryFilter</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TableAuthManager</span></a> (implements java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TableAuthManager.PermissionCache</span></a>&lt;T&gt;</li>
 <li type="circle">org.apache.hadoop.hbase.backup.impl.<a href="org/apache/hadoop/hbase/backup/impl/TableBackupClient.html" title="class in org.apache.hadoop.hbase.backup.impl"><span class="typeNameLink">TableBackupClient</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.backup.impl.<a href="org/apache/hadoop/hbase/backup/impl/FullTableBackupClient.html" title="class in org.apache.hadoop.hbase.backup.impl"><span class="typeNameLink">FullTableBackupClient</span></a></li>
@@ -4171,6 +4171,7 @@
 <li type="circle">org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.SecureHadoopUser.html" title="class in org.apache.hadoop.hbase.security"><span class="typeNameLink">User.SecureHadoopUser</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">UserPermission</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/Utility.html" title="class in org.apache.hadoop.hbase.rsgroup"><span class="typeNameLink">Utility</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.example.<a href="org/apache/hadoop/hbase/coprocessor/example/ValueRewritingObserver.html" title="class in org.apache.hadoop.hbase.coprocessor.example"><span class="typeNameLink">ValueRewritingObserver</span></a> (implements org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/RegionCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionCoprocessor</a>, org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/RegionObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionObserver</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/Version.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Version</span></a></li>
@@ -4179,11 +4180,9 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TablePermission</span></a>
-<ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">UserPermission</span></a></li>
-</ul>
-</li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">GlobalPermission</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">NamespacePermission</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TablePermission</span></a></li>
 </ul>
 </li>
 </ul>
@@ -5297,6 +5296,7 @@
 <li type="circle">org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SyncReplicationState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html b/devapidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html
index 30bba22..049b054 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html
@@ -76,7 +76,7 @@
 <span class="sourceLineNo">068</span> * an example of configuring a user of this Auth Chore to run on a secure cluster.<a name="line.68"></a>
 <span class="sourceLineNo">069</span> * &lt;pre&gt;<a name="line.69"></a>
 <span class="sourceLineNo">070</span> * &lt;/pre&gt;<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * This class will be internal use only from 2.2.0 version, and will transparently work<a name="line.71"></a>
+<span class="sourceLineNo">071</span> * This class will be internal used only from 2.2.0 version, and will transparently work<a name="line.71"></a>
 <span class="sourceLineNo">072</span> * for kerberized applications. For more, please refer<a name="line.72"></a>
 <span class="sourceLineNo">073</span> * &lt;a href="http://hbase.apache.org/book.html#hbase.secure.configuration"&gt;Client-side Configuration for Secure Operation&lt;/a&gt;<a name="line.73"></a>
 <span class="sourceLineNo">074</span> *<a name="line.74"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 0937325..d15fe4b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
 <span class="sourceLineNo">011</span>  public static final String revision = "";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Wed Nov 14 14:43:46 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Thu Nov 15 14:45:38 UTC 2018";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://jenkins-websites1.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "c47ab65d5523b7b5e171647165abbf68";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "9ecbada5a636ddfc355ac88377f7c2f8";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html
index 3725806..6c8ed92 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.SeekerState.html
@@ -364,7 +364,7 @@
 <span class="sourceLineNo">356</span><a name="line.356"></a>
 <span class="sourceLineNo">357</span>    protected int getCellBufSize() {<a name="line.357"></a>
 <span class="sourceLineNo">358</span>      int kvBufSize = KEY_VALUE_LEN_SIZE + keyLength + valueLength;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      if (includesTags()) {<a name="line.359"></a>
+<span class="sourceLineNo">359</span>      if (includesTags() &amp;&amp; tagsLength &gt; 0) {<a name="line.359"></a>
 <span class="sourceLineNo">360</span>        kvBufSize += Bytes.SIZEOF_SHORT + tagsLength;<a name="line.360"></a>
 <span class="sourceLineNo">361</span>      }<a name="line.361"></a>
 <span class="sourceLineNo">362</span>      return kvBufSize;<a name="line.362"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html
index 3725806..6c8ed92 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.html
@@ -364,7 +364,7 @@
 <span class="sourceLineNo">356</span><a name="line.356"></a>
 <span class="sourceLineNo">357</span>    protected int getCellBufSize() {<a name="line.357"></a>
 <span class="sourceLineNo">358</span>      int kvBufSize = KEY_VALUE_LEN_SIZE + keyLength + valueLength;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      if (includesTags()) {<a name="line.359"></a>
+<span class="sourceLineNo">359</span>      if (includesTags() &amp;&amp; tagsLength &gt; 0) {<a name="line.359"></a>
 <span class="sourceLineNo">360</span>        kvBufSize += Bytes.SIZEOF_SHORT + tagsLength;<a name="line.360"></a>
 <span class="sourceLineNo">361</span>      }<a name="line.361"></a>
 <span class="sourceLineNo">362</span>      return kvBufSize;<a name="line.362"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/CloseRegionProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/CloseRegionProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/CloseRegionProcedure.html
index 1788f01..2db9348 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/CloseRegionProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/CloseRegionProcedure.html
@@ -91,7 +91,7 @@
 <span class="sourceLineNo">083</span><a name="line.83"></a>
 <span class="sourceLineNo">084</span>  @Override<a name="line.84"></a>
 <span class="sourceLineNo">085</span>  protected boolean shouldDispatch(RegionStateNode regionNode) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return !regionNode.isInState(RegionState.State.CLOSED, RegionState.State.ABNORMALLY_CLOSED);<a name="line.86"></a>
+<span class="sourceLineNo">086</span>    return regionNode.isInState(RegionState.State.CLOSING);<a name="line.86"></a>
 <span class="sourceLineNo">087</span>  }<a name="line.87"></a>
 <span class="sourceLineNo">088</span>}<a name="line.88"></a>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/OpenRegionProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/OpenRegionProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/OpenRegionProcedure.html
index 6e27067..c383915 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/OpenRegionProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/OpenRegionProcedure.html
@@ -76,7 +76,7 @@
 <span class="sourceLineNo">068</span><a name="line.68"></a>
 <span class="sourceLineNo">069</span>  @Override<a name="line.69"></a>
 <span class="sourceLineNo">070</span>  protected boolean shouldDispatch(RegionStateNode regionNode) {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    return !regionNode.isInState(RegionState.State.OPEN);<a name="line.71"></a>
+<span class="sourceLineNo">071</span>    return regionNode.isInState(RegionState.State.OPENING);<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  }<a name="line.72"></a>
 <span class="sourceLineNo">073</span>}<a name="line.73"></a>
 


[42/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlUtil.html b/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlUtil.html
index a644a4a..6691b7d 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlUtil.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlUtil.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/AccessControlUtil.html" target="_top">Frames</a></li>
@@ -164,7 +164,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#buildGrantRequest-java.lang.String-boolean-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...-">buildGrantRequest</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
                  boolean&nbsp;mergeExistingPermissions,
                  org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</code>
-<div class="block">Create a request to grant user permissions.</div>
+<div class="block">Create a request to grant user global permissions.</div>
 </td>
 </tr>
 <tr id="i2" class="altColor">
@@ -173,7 +173,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
                  boolean&nbsp;mergeExistingPermissions,
                  org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</code>
-<div class="block">Create a request to grant user permissions.</div>
+<div class="block">Create a request to grant user namespace permissions.</div>
 </td>
 </tr>
 <tr id="i3" class="rowColor">
@@ -184,14 +184,14 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                  byte[]&nbsp;qualifier,
                  boolean&nbsp;mergeExistingPermissions,
                  org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</code>
-<div class="block">Create a request to grant user permissions.</div>
+<div class="block">Create a request to grant user table permissions.</div>
 </td>
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.RevokeRequest</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#buildRevokeRequest-java.lang.String-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...-">buildRevokeRequest</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
                   org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</code>
-<div class="block">Create a request to revoke user permissions.</div>
+<div class="block">Create a request to revoke user global permissions.</div>
 </td>
 </tr>
 <tr id="i5" class="rowColor">
@@ -199,7 +199,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#buildRevokeRequest-java.lang.String-java.lang.String-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...-">buildRevokeRequest</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
                   org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</code>
-<div class="block">Create a request to revoke user permissions.</div>
+<div class="block">Create a request to revoke user namespace permissions.</div>
 </td>
 </tr>
 <tr id="i6" class="altColor">
@@ -209,7 +209,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                   byte[]&nbsp;family,
                   byte[]&nbsp;qualifier,
                   org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</code>
-<div class="block">Create a request to revoke user permissions.</div>
+<div class="block">Create a request to revoke user table permissions.</div>
 </td>
 </tr>
 <tr id="i7" class="rowColor">
@@ -349,35 +349,35 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </td>
 </tr>
 <tr id="i21" class="rowColor">
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toPermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions-">toPermission</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</code>
+<div class="block">Convert a protobuf UserTablePermissions to a ListMultimap&lt;Username, Permission&gt</div>
+</td>
+</tr>
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toPermission-org.apache.hadoop.hbase.security.access.Permission-">toPermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perm)</code>
 <div class="block">Convert a client Permission to a Permission proto</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toPermissionAction-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action-">toPermissionAction</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action&nbsp;action)</code>
 <div class="block">Converts a Permission.Action proto to a client Permission.Action object.</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toPermissionAction-org.apache.hadoop.hbase.security.access.Permission.Action-">toPermissionAction</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>
 <div class="block">Convert a client Permission.Action to a Permission.Action proto</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toPermissionActions-java.util.List-">toPermissionActions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action&gt;&nbsp;protoActions)</code>
 <div class="block">Converts a list of Permission.Action proto to a list of client Permission.Action objects.</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
-<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toTablePermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission-">toTablePermission</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission&nbsp;proto)</code>
-<div class="block">Converts a Permission proto to a client TablePermission object.</div>
-</td>
-</tr>
 <tr id="i26" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toTablePermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.TablePermission-">toTablePermission</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.TablePermission&nbsp;proto)</code>
@@ -391,34 +391,33 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </td>
 </tr>
 <tr id="i28" class="altColor">
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUserPermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions-">toUserPermission</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</code>
+<div class="block">Convert a protobuf UserTablePermissions to a ListMultimap&lt;Username, UserPermission&gt</div>
+</td>
+</tr>
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UserPermission</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUserPermission-org.apache.hadoop.hbase.security.access.UserPermission-">toUserPermission</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;perm)</code>
 <div class="block">Convert a client user permission to a user permission proto</div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUsersAndPermissions-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions-">toUsersAndPermissions</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</code>&nbsp;</td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUsersAndPermissions-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">toUsersAndPermissions</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</code>&nbsp;</td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUsersAndPermissions-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">toUsersAndPermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                      <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perms)</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
-<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUserTablePermissions-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions-">toUserTablePermissions</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</code>
-<div class="block">Convert a protobuf UserTablePermissions to a
- ListMultimap&lt;String, TablePermission&gt; where key is username.</div>
-</td>
-</tr>
 <tr id="i33" class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUserTablePermissions-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">toUserTablePermissions</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perm)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUserTablePermissions-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">toUserTablePermissions</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;perm)</code>
 <div class="block">Convert a ListMultimap&lt;String, TablePermission&gt; where key is username
  to a protobuf UserPermission</div>
 </td>
@@ -474,7 +473,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                                                                                                             byte[]&nbsp;qualifier,
                                                                                                             boolean&nbsp;mergeExistingPermissions,
                                                                                                             org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</pre>
-<div class="block">Create a request to grant user permissions.</div>
+<div class="block">Create a request to grant user table permissions.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>username</code> - the short user name who to grant permissions</dd>
@@ -497,7 +496,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                                                                                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
                                                                                                             boolean&nbsp;mergeExistingPermissions,
                                                                                                             org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</pre>
-<div class="block">Create a request to grant user permissions.</div>
+<div class="block">Create a request to grant user namespace permissions.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>username</code> - the short user name who to grant permissions</dd>
@@ -516,7 +515,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <h4>buildRevokeRequest</h4>
 <pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.RevokeRequest&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.128">buildRevokeRequest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
                                                                                                               org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</pre>
-<div class="block">Create a request to revoke user permissions.</div>
+<div class="block">Create a request to revoke user global permissions.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>username</code> - the short user name whose permissions to be revoked</dd>
@@ -535,7 +534,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.RevokeRequest&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.155">buildRevokeRequest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
                                                                                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
                                                                                                               org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</pre>
-<div class="block">Create a request to revoke user permissions.</div>
+<div class="block">Create a request to revoke user namespace permissions.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>username</code> - the short user name whose permissions to be revoked</dd>
@@ -555,7 +554,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.GrantRequest&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.185">buildGrantRequest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
                                                                                                             boolean&nbsp;mergeExistingPermissions,
                                                                                                             org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</pre>
-<div class="block">Create a request to grant user permissions.</div>
+<div class="block">Create a request to grant user global permissions.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>username</code> - the short user name who to grant permissions</dd>
@@ -593,29 +592,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.230">toUsersAndPermissions</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</pre>
 </li>
 </ul>
-<a name="toPermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>toPermission</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.250">toPermission</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission&nbsp;proto)</pre>
-<div class="block">Converts a Permission proto to a client Permission object.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>proto</code> - the protobuf Permission</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>the converted Permission</dd>
-</dl>
-</li>
-</ul>
 <a name="toTablePermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.TablePermission-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>toTablePermission</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.265">toTablePermission</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.TablePermission&nbsp;proto)</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.248">toTablePermission</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.TablePermission&nbsp;proto)</pre>
 <div class="block">Converts a TablePermission proto to a client TablePermission object.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -625,19 +608,19 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
-<a name="toTablePermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission-">
+<a name="toPermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>toTablePermission</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.289">toTablePermission</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission&nbsp;proto)</pre>
-<div class="block">Converts a Permission proto to a client TablePermission object.</div>
+<h4>toPermission</h4>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.272">toPermission</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission&nbsp;proto)</pre>
+<div class="block">Converts a Permission proto to a client Permission object.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>proto</code> - the protobuf Permission</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>the converted TablePermission</dd>
+<dd>the converted Permission</dd>
 </dl>
 </li>
 </ul>
@@ -647,7 +630,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toPermission</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.335">toPermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perm)</pre>
+<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.315">toPermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perm)</pre>
 <div class="block">Convert a client Permission to a Permission proto</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -663,7 +646,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toPermissionActions</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.396">toPermissionActions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action&gt;&nbsp;protoActions)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.371">toPermissionActions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action&gt;&nbsp;protoActions)</pre>
 <div class="block">Converts a list of Permission.Action proto to a list of client Permission.Action objects.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -679,7 +662,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toPermissionAction</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.411">toPermissionAction</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action&nbsp;action)</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.386">toPermissionAction</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action&nbsp;action)</pre>
 <div class="block">Converts a Permission.Action proto to a client Permission.Action object.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -695,7 +678,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toPermissionAction</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.434">toPermissionAction</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
+<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.409">toPermissionAction</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</pre>
 <div class="block">Convert a client Permission.Action to a Permission.Action proto</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -711,7 +694,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toUserPermission</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UserPermission&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.457">toUserPermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;perm)</pre>
+<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UserPermission&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.432">toUserPermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;perm)</pre>
 <div class="block">Convert a client user permission to a user permission proto</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -727,7 +710,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>buildGetUserPermissionsResponse</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.GetUserPermissionsResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.467">buildGetUserPermissionsResponse</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;permissions)</pre>
+<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.GetUserPermissionsResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.442">buildGetUserPermissionsResponse</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;permissions)</pre>
 <div class="block">Converts the permissions list into a protocol buffer GetUserPermissionsResponse</div>
 </li>
 </ul>
@@ -737,7 +720,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toUserPermission</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.482">toUserPermission</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UserPermission&nbsp;proto)</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.457">toUserPermission</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UserPermission&nbsp;proto)</pre>
 <div class="block">Converts a user permission proto to a client user permission object.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -753,7 +736,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toUserTablePermissions</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.494">toUserTablePermissions</a>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perm)</pre>
+<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.468">toUserTablePermissions</a>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;perm)</pre>
 <div class="block">Convert a ListMultimap&lt;String, TablePermission&gt; where key is username
  to a protobuf UserPermission</div>
 <dl>
@@ -770,7 +753,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>grant</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.520">grant</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.494">grant</a>(com.google.protobuf.RpcController&nbsp;controller,
                          org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;userShortName,
                          boolean&nbsp;mergeExistingPermissions,
@@ -795,7 +778,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>grant</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.547">grant</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.521">grant</a>(com.google.protobuf.RpcController&nbsp;controller,
                          org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;userShortName,
                          <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -827,7 +810,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>grant</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.573">grant</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.547">grant</a>(com.google.protobuf.RpcController&nbsp;controller,
                          org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;userShortName,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
@@ -854,7 +837,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>revoke</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.597">revoke</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.571">revoke</a>(com.google.protobuf.RpcController&nbsp;controller,
                           org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;userShortName,
                           <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>...&nbsp;actions)
@@ -879,7 +862,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>revoke</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.625">revoke</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.599">revoke</a>(com.google.protobuf.RpcController&nbsp;controller,
                           org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;userShortName,
                           <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -911,7 +894,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>revoke</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.650">revoke</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.624">revoke</a>(com.google.protobuf.RpcController&nbsp;controller,
                           org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;userShortName,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
@@ -938,7 +921,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUserPermissions</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.672">getUserPermissions</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.646">getUserPermissions</a>(com.google.protobuf.RpcController&nbsp;controller,
                                                       org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol)
                                                throws com.google.protobuf.ServiceException</pre>
 <div class="block">A utility used to get user's global permissions.
@@ -959,7 +942,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUserPermissions</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.684">getUserPermissions</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.658">getUserPermissions</a>(com.google.protobuf.RpcController&nbsp;controller,
                                                       org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;userName)
                                                throws com.google.protobuf.ServiceException</pre>
@@ -980,7 +963,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUserPermissions</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.713">getUserPermissions</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.687">getUserPermissions</a>(com.google.protobuf.RpcController&nbsp;controller,
                                                       org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
                                                       <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;t)
                                                throws com.google.protobuf.ServiceException</pre>
@@ -1003,7 +986,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUserPermissions</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.730">getUserPermissions</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.704">getUserPermissions</a>(com.google.protobuf.RpcController&nbsp;controller,
                                                       org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
                                                       <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;t,
                                                       byte[]&nbsp;columnFamily,
@@ -1031,7 +1014,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUserPermissions</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.769">getUserPermissions</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.743">getUserPermissions</a>(com.google.protobuf.RpcController&nbsp;controller,
                                                       org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
                                                       byte[]&nbsp;namespace)
                                                throws com.google.protobuf.ServiceException</pre>
@@ -1054,7 +1037,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUserPermissions</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.783">getUserPermissions</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.757">getUserPermissions</a>(com.google.protobuf.RpcController&nbsp;controller,
                                                       org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
                                                       byte[]&nbsp;namespace,
                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;userName)
@@ -1077,7 +1060,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasPermission</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.821">hasPermission</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.795">hasPermission</a>(com.google.protobuf.RpcController&nbsp;controller,
                                     org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
                                     <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     byte[]&nbsp;columnFamily,
@@ -1106,20 +1089,35 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
-<a name="toUserTablePermissions-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions-">
+<a name="toUserPermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>toUserTablePermissions</h4>
-<pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.853">toUserTablePermissions</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</pre>
-<div class="block">Convert a protobuf UserTablePermissions to a
- ListMultimap&lt;String, TablePermission&gt; where key is username.</div>
+<h4>toUserPermission</h4>
+<pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.825">toUserPermission</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</pre>
+<div class="block">Convert a protobuf UserTablePermissions to a ListMultimap&lt;Username, UserPermission&gt</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>proto</code> - the protobuf UserPermission</dd>
+<dd><code>proto</code> - the proto UsersAndPermissions</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>the converted UserPermission</dd>
+<dd>a ListMultimap with user and its permissions</dd>
+</dl>
+</li>
+</ul>
+<a name="toPermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toPermission</h4>
+<pre>public static&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.845">toPermission</a>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</pre>
+<div class="block">Convert a protobuf UserTablePermissions to a ListMultimap&lt;Username, Permission&gt</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>proto</code> - the proto UsersAndPermissions</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>a ListMultimap with user and its permissions</dd>
 </dl>
 </li>
 </ul>
@@ -1129,12 +1127,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>buildRevokeRequest</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.RevokeRequest&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.877">buildRevokeRequest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
+<pre>public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.RevokeRequest&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlUtil.html#line.869">buildRevokeRequest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
                                                                                                               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                                                                               byte[]&nbsp;family,
                                                                                                               byte[]&nbsp;qualifier,
                                                                                                               org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission.Action...&nbsp;actions)</pre>
-<div class="block">Create a request to revoke user permissions.</div>
+<div class="block">Create a request to revoke user table permissions.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>username</code> - the short user name whose permissions to be revoked</dd>
@@ -1176,7 +1174,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthResult.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/AccessControlUtil.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/AccessController.OpType.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/AccessController.OpType.html b/devapidocs/org/apache/hadoop/hbase/security/access/AccessController.OpType.html
index 08a3446..bd937f9 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/AccessController.OpType.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/AccessController.OpType.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.509">AccessController.OpType</a>
+<pre>private static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.508">AccessController.OpType</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a>&gt;</pre>
 </li>
 </ul>
@@ -257,7 +257,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>GET</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.510">GET</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.509">GET</a></pre>
 </li>
 </ul>
 <a name="EXISTS">
@@ -266,7 +266,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>EXISTS</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.511">EXISTS</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.510">EXISTS</a></pre>
 </li>
 </ul>
 <a name="SCAN">
@@ -275,7 +275,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>SCAN</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.512">SCAN</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.511">SCAN</a></pre>
 </li>
 </ul>
 <a name="PUT">
@@ -284,7 +284,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>PUT</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.513">PUT</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.512">PUT</a></pre>
 </li>
 </ul>
 <a name="DELETE">
@@ -293,7 +293,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>DELETE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.514">DELETE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.513">DELETE</a></pre>
 </li>
 </ul>
 <a name="CHECK_AND_PUT">
@@ -302,7 +302,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>CHECK_AND_PUT</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.515">CHECK_AND_PUT</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.514">CHECK_AND_PUT</a></pre>
 </li>
 </ul>
 <a name="CHECK_AND_DELETE">
@@ -311,7 +311,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>CHECK_AND_DELETE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.516">CHECK_AND_DELETE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.515">CHECK_AND_DELETE</a></pre>
 </li>
 </ul>
 <a name="INCREMENT_COLUMN_VALUE">
@@ -320,7 +320,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>INCREMENT_COLUMN_VALUE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.517">INCREMENT_COLUMN_VALUE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.516">INCREMENT_COLUMN_VALUE</a></pre>
 </li>
 </ul>
 <a name="APPEND">
@@ -329,7 +329,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>APPEND</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.518">APPEND</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.517">APPEND</a></pre>
 </li>
 </ul>
 <a name="INCREMENT">
@@ -338,7 +338,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>INCREMENT</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.519">INCREMENT</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.518">INCREMENT</a></pre>
 </li>
 </ul>
 </li>
@@ -355,7 +355,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>type</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.521">type</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.520">type</a></pre>
 </li>
 </ul>
 </li>
@@ -372,7 +372,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.509">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.508">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -392,7 +392,7 @@ for (AccessController.OpType c : AccessController.OpType.values())
 <ul class="blockList">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.509">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.508">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 
@@ -414,7 +414,7 @@ not permitted.)</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.528">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.OpType.html#line.527">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a>&gt;</code></dd>


[20/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AuthManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AuthManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AuthManager.html
new file mode 100644
index 0000000..4d5cbc9
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AuthManager.html
@@ -0,0 +1,680 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.Closeable;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.HashMap;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.HashSet;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Map;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Set;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.29"></a>
+<span class="sourceLineNo">030</span><a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.conf.Configuration;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.Cell;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.TableName;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.security.User;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.zookeeper.KeeperException;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.slf4j.Logger;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.slf4j.LoggerFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Performs authorization checks for a given user's assigned permissions.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * &lt;p&gt;<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *   There're following scopes: &lt;b&gt;Global&lt;/b&gt;, &lt;b&gt;Namespace&lt;/b&gt;, &lt;b&gt;Table&lt;/b&gt;, &lt;b&gt;Family&lt;/b&gt;,<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *   &lt;b&gt;Qualifier&lt;/b&gt;, &lt;b&gt;Cell&lt;/b&gt;.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> *   Generally speaking, higher scopes can overrides lower scopes,<a name="line.56"></a>
+<span class="sourceLineNo">057</span> *   except for Cell permission can be granted even a user has not permission on specified table,<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *   which means the user can get/scan only those granted cells parts.<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * &lt;/p&gt;<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * e.g, if user A has global permission R(ead), he can<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * read table T without checking table scope permission, so authorization checks alway starts from<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * Global scope.<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * &lt;p&gt;<a name="line.63"></a>
+<span class="sourceLineNo">064</span> *   For each scope, not only user but also groups he belongs to will be checked.<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * &lt;/p&gt;<a name="line.65"></a>
+<span class="sourceLineNo">066</span> */<a name="line.66"></a>
+<span class="sourceLineNo">067</span>@InterfaceAudience.Private<a name="line.67"></a>
+<span class="sourceLineNo">068</span>public final class AuthManager implements Closeable {<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  /**<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * Cache of permissions, it is thread safe.<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * @param &lt;T&gt; T extends Permission<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   */<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static class PermissionCache&lt;T extends Permission&gt; {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    private final Object mutex = new Object();<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    private Map&lt;String, Set&lt;T&gt;&gt; cache = new HashMap&lt;&gt;();<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>    void put(String name, T perm) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      synchronized (mutex) {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>        Set&lt;T&gt; perms = cache.getOrDefault(name, new HashSet&lt;&gt;());<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        perms.add(perm);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        cache.put(name, perms);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      }<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>    Set&lt;T&gt; get(String name) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      synchronized (mutex) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        return cache.get(name);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>    void clear() {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      synchronized (mutex) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        for (Map.Entry&lt;String, Set&lt;T&gt;&gt; entry : cache.entrySet()) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>          entry.getValue().clear();<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        cache.clear();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      }<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  PermissionCache&lt;NamespacePermission&gt; NS_NO_PERMISSION = new PermissionCache&lt;&gt;();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  PermissionCache&lt;TablePermission&gt; TBL_NO_PERMISSION = new PermissionCache&lt;&gt;();<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * Cache for global permission.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * Since every user/group can only have one global permission, no need to user PermissionCache.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   */<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private volatile Map&lt;String, GlobalPermission&gt; globalCache;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /** Cache for namespace permission. */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private ConcurrentHashMap&lt;String, PermissionCache&lt;NamespacePermission&gt;&gt; namespaceCache =<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    new ConcurrentHashMap&lt;&gt;();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  /** Cache for table permission. */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  private ConcurrentHashMap&lt;TableName, PermissionCache&lt;TablePermission&gt;&gt; tableCache =<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    new ConcurrentHashMap&lt;&gt;();<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private static final Logger LOG = LoggerFactory.getLogger(AuthManager.class);<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private Configuration conf;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private ZKPermissionWatcher zkperms;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private final AtomicLong mtime = new AtomicLong(0L);<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private AuthManager(ZKWatcher watcher, Configuration conf)<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      throws IOException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    this.conf = conf;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    // initialize global permissions based on configuration<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    globalCache = initGlobal(conf);<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    this.zkperms = new ZKPermissionWatcher(watcher, this, conf);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    try {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      this.zkperms.start();<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    } catch (KeeperException ke) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      LOG.error("ZooKeeper initialization failed", ke);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  @Override<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public void close() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    this.zkperms.close();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  /**<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   * Initialize with global permission assignments<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * from the {@code hbase.superuser} configuration key.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private Map&lt;String, GlobalPermission&gt; initGlobal(Configuration conf) throws IOException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    UserProvider userProvider = UserProvider.instantiate(conf);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    User user = userProvider.getCurrent();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    if (user == null) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      throw new IOException("Unable to obtain the current user, " +<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        "authorization checks for internal operations will not work correctly!");<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    String currentUser = user.getShortName();<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    Map&lt;String, GlobalPermission&gt; global = new HashMap&lt;&gt;();<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    // the system user is always included<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    List&lt;String&gt; superusers = Lists.asList(currentUser, conf.getStrings(<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        Superusers.SUPERUSER_CONF_KEY, new String[0]));<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    for (String name : superusers) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      GlobalPermission globalPermission = new GlobalPermission(Permission.Action.values());<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      global.put(name, globalPermission);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    return global;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return this.zkperms;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * Update acl info for table.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * @param table name of table<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @param data updated acl data<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * @throws IOException exception when deserialize data<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public void refreshTableCacheFromWritable(TableName table, byte[] data) throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    if (data != null &amp;&amp; data.length &gt; 0) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      try {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        ListMultimap&lt;String, Permission&gt; perms =<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          AccessControlLists.readPermissions(data, conf);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        if (perms != null) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          if (Bytes.equals(table.getName(), AccessControlLists.ACL_GLOBAL_NAME)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>            updateGlobalCache(perms);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>          } else {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>            updateTableCache(table, perms);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        }<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      } catch (DeserializationException e) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        throw new IOException(e);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    } else {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      LOG.info("Skipping permission cache refresh because writable data is empty");<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>  /**<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * Update acl info for namespace.<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * @param namespace namespace<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * @param data updated acl data<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * @throws IOException exception when deserialize data<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public void refreshNamespaceCacheFromWritable(String namespace, byte[] data) throws IOException {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    if (data != null &amp;&amp; data.length &gt; 0) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      try {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        ListMultimap&lt;String, Permission&gt; perms =<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          AccessControlLists.readPermissions(data, conf);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        if (perms != null) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          updateNamespaceCache(namespace, perms);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      } catch (DeserializationException e) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        throw new IOException(e);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      LOG.debug("Skipping permission cache refresh because writable data is empty");<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>  /**<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * Updates the internal global permissions cache.<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * @param globalPerms new global permissions<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  private void updateGlobalCache(ListMultimap&lt;String, Permission&gt; globalPerms) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    try {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      Map&lt;String, GlobalPermission&gt; global = initGlobal(conf);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      for (String name : globalPerms.keySet()) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        for (Permission permission : globalPerms.get(name)) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          global.put(name, (GlobalPermission) permission);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      globalCache = global;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      mtime.incrementAndGet();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    } catch (Exception e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // Never happens<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      LOG.error("Error occurred while updating the global cache", e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    }<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * Updates the internal table permissions cache for specified table.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * @param table updated table name<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @param tablePerms new table permissions<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private void updateTableCache(TableName table, ListMultimap&lt;String, Permission&gt; tablePerms) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    PermissionCache&lt;TablePermission&gt; cacheToUpdate =<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      tableCache.getOrDefault(table, new PermissionCache&lt;&gt;());<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    clearCache(cacheToUpdate);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    updateCache(tablePerms, cacheToUpdate);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    tableCache.put(table, cacheToUpdate);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    mtime.incrementAndGet();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  /**<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * Updates the internal namespace permissions cache for specified namespace.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   * @param namespace updated namespace<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * @param nsPerms new namespace permissions<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  private void updateNamespaceCache(String namespace,<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      ListMultimap&lt;String, Permission&gt; nsPerms) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    PermissionCache&lt;NamespacePermission&gt; cacheToUpdate =<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      namespaceCache.getOrDefault(namespace, new PermissionCache&lt;&gt;());<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    clearCache(cacheToUpdate);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    updateCache(nsPerms, cacheToUpdate);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    namespaceCache.put(namespace, cacheToUpdate);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    mtime.incrementAndGet();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>  private void clearCache(PermissionCache cacheToUpdate) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    cacheToUpdate.clear();<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  @SuppressWarnings("unchecked")<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private void updateCache(ListMultimap&lt;String, ? extends Permission&gt; newPermissions,<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      PermissionCache cacheToUpdate) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    for (String name : newPermissions.keySet()) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      for (Permission permission : newPermissions.get(name)) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        cacheToUpdate.put(name, permission);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * Check if user has given action privilige in global scope.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   * @param user user name<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   * @return true if user has, false otherwise<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   */<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  public boolean authorizeUserGlobal(User user, Permission.Action action) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (user == null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      return false;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    if (authorizeGlobal(globalCache.get(user.getShortName()), action)) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      return true;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    for (String group : user.getGroupNames()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      if (authorizeGlobal(globalCache.get(AuthUtil.toGroupEntry(group)), action)) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        return true;<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    return false;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>  private boolean authorizeGlobal(GlobalPermission permissions, Permission.Action action) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    return permissions != null &amp;&amp; permissions.implies(action);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>  /**<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * Check if user has given action privilige in namespace scope.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * @param user user name<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * @param namespace namespace<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * @return true if user has, false otherwise<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   */<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  public boolean authorizeUserNamespace(User user, String namespace, Permission.Action action) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    if (user == null) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      return false;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    if (authorizeUserGlobal(user, action)) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      return true;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    PermissionCache&lt;NamespacePermission&gt; nsPermissions = namespaceCache.getOrDefault(namespace,<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      NS_NO_PERMISSION);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    if (authorizeNamespace(nsPermissions.get(user.getShortName()), namespace, action)) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return true;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    for (String group : user.getGroupNames()) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      if (authorizeNamespace(nsPermissions.get(AuthUtil.toGroupEntry(group)), namespace, action)) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        return true;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      }<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    return false;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>  private boolean authorizeNamespace(Set&lt;NamespacePermission&gt; permissions,<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      String namespace, Permission.Action action) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    if (permissions == null) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      return false;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    for (NamespacePermission permission : permissions) {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      if (permission.implies(namespace, action)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        return true;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    return false;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Checks if the user has access to the full table or at least a family/qualifier<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * for the specified action.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @param user user name<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * @param table table name<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @param action action in one of [Read, Write, Create, Exec, Admin]<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * @return true if the user has access to the table, false otherwise<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  public boolean accessUserTable(User user, TableName table, Permission.Action action) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    if (user == null) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      return false;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    if (table == null) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      table = AccessControlLists.ACL_TABLE_NAME;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    if (authorizeUserNamespace(user, table.getNamespaceAsString(), action)) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      return true;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    PermissionCache&lt;TablePermission&gt; tblPermissions = tableCache.getOrDefault(table,<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      TBL_NO_PERMISSION);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    if (hasAccessTable(tblPermissions.get(user.getShortName()), action)) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      return true;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    for (String group : user.getGroupNames()) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      if (hasAccessTable(tblPermissions.get(AuthUtil.toGroupEntry(group)), action)) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return true;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    return false;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  private boolean hasAccessTable(Set&lt;TablePermission&gt; permissions, Permission.Action action) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    if (permissions == null) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      return false;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    for (TablePermission permission : permissions) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      if (permission.implies(action)) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        return true;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return false;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  /**<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * Check if user has given action privilige in table scope.<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * @param user user name<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @param table table name<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @return true if user has, false otherwise<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   */<a name="line.394"></a>
+<span class="sourceLineNo">395</span>  public boolean authorizeUserTable(User user, TableName table, Permission.Action action) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    return authorizeUserTable(user, table, null, null, action);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>  /**<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * Check if user has given action privilige in table:family scope.<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   * @param user user name<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * @param table table name<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * @param family family name<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * @return true if user has, false otherwise<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   */<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  public boolean authorizeUserTable(User user, TableName table, byte[] family,<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      Permission.Action action) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    return authorizeUserTable(user, table, family, null, action);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * Check if user has given action privilige in table:family:qualifier scope.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * @param user user name<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @param table table name<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * @param family family name<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * @param qualifier qualifier name<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * @return true if user has, false otherwise<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public boolean authorizeUserTable(User user, TableName table, byte[] family,<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      byte[] qualifier, Permission.Action action) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    if (user == null) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      return false;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (table == null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      table = AccessControlLists.ACL_TABLE_NAME;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    if (authorizeUserNamespace(user, table.getNamespaceAsString(), action)) {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      return true;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    }<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    PermissionCache&lt;TablePermission&gt; tblPermissions = tableCache.getOrDefault(table,<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      TBL_NO_PERMISSION);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    if (authorizeTable(tblPermissions.get(user.getShortName()), table, family, qualifier, action)) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      return true;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    for (String group : user.getGroupNames()) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      if (authorizeTable(tblPermissions.get(AuthUtil.toGroupEntry(group)),<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          table, family, qualifier, action)) {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        return true;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    return false;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private boolean authorizeTable(Set&lt;TablePermission&gt; permissions,<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      TableName table, byte[] family, byte[] qualifier, Permission.Action action) {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    if (permissions == null) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      return false;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    for (TablePermission permission : permissions) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      if (permission.implies(table, family, qualifier, action)) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        return true;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    return false;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  /**<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   * Check if user has given action privilige in table:family scope.<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * This method is for backward compatibility.<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * @param user user name<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * @param table table name<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   * @param family family names<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @return true if user has, false otherwise<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   */<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  public boolean authorizeUserFamily(User user, TableName table,<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      byte[] family, Permission.Action action) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    PermissionCache&lt;TablePermission&gt; tblPermissions = tableCache.getOrDefault(table,<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      TBL_NO_PERMISSION);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    if (authorizeFamily(tblPermissions.get(user.getShortName()), table, family, action)) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      return true;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    for (String group : user.getGroupNames()) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      if (authorizeFamily(tblPermissions.get(AuthUtil.toGroupEntry(group)),<a name="line.476"></a>
+<span class="sourceLineNo">477</span>          table, family, action)) {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>        return true;<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      }<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return false;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>  private boolean authorizeFamily(Set&lt;TablePermission&gt; permissions,<a name="line.484"></a>
+<span class="sourceLineNo">485</span>      TableName table, byte[] family, Permission.Action action) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    if (permissions == null) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      return false;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    for (TablePermission permission : permissions) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      if (permission.implies(table, family, action)) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        return true;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    return false;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Check if user has given action privilige in cell scope.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   * @param user user name<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * @param table table name<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * @param cell cell to be checked<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   * @param action one of action in [Read, Write, Create, Exec, Admin]<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * @return true if user has, false otherwise<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  public boolean authorizeCell(User user, TableName table, Cell cell, Permission.Action action) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      List&lt;Permission&gt; perms = AccessControlLists.getCellPermissionsForUser(user, cell);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      if (LOG.isTraceEnabled()) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        LOG.trace("Perms for user " + user.getShortName() + " in cell " + cell + ": " +<a name="line.509"></a>
+<span class="sourceLineNo">510</span>          (perms != null ? perms : ""));<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      if (perms != null) {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>        for (Permission p: perms) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          if (p.implies(action)) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>            return true;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        }<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } catch (IOException e) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // We failed to parse the KV tag<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.error("Failed parse of ACL tag in cell " + cell);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      // Fall through to check with the table and CF perms we were able<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      // to collect regardless<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return false;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
+<span class="sourceLineNo">529</span>   * Remove given namespace from AuthManager's namespace cache.<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * @param ns namespace<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   */<a name="line.531"></a>
+<span class="sourceLineNo">532</span>  public void removeNamespace(byte[] ns) {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    namespaceCache.remove(Bytes.toString(ns));<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  /**<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * Remove given table from AuthManager's table cache.<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   * @param table table name<a name="line.538"></a>
+<span class="sourceLineNo">539</span>   */<a name="line.539"></a>
+<span class="sourceLineNo">540</span>  public void removeTable(TableName table) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    tableCache.remove(table);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span>  /**<a name="line.544"></a>
+<span class="sourceLineNo">545</span>   * Last modification logical time<a name="line.545"></a>
+<span class="sourceLineNo">546</span>   * @return time<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   */<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public long getMTime() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    return mtime.get();<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>  private static Map&lt;ZKWatcher, AuthManager&gt; managerMap = new HashMap&lt;&gt;();<a name="line.552"></a>
+<span class="sourceLineNo">553</span><a name="line.553"></a>
+<span class="sourceLineNo">554</span>  private static Map&lt;AuthManager, Integer&gt; refCount = new HashMap&lt;&gt;();<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>  /**<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   * Returns a AuthManager from the cache. If not cached, constructs a new one.<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * Returned instance should be released back by calling {@link #release(AuthManager)}.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @param watcher zk watcher<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   * @param conf configuration<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   * @return an AuthManager<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   * @throws IOException zookeeper initialization failed<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   */<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  public synchronized static AuthManager getOrCreate(<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      ZKWatcher watcher, Configuration conf) throws IOException {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    AuthManager instance = managerMap.get(watcher);<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    if (instance == null) {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      instance = new AuthManager(watcher, conf);<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      managerMap.put(watcher, instance);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    int ref = refCount.get(instance) == null ? 0 : refCount.get(instance);<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    refCount.put(instance, ref + 1);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    return instance;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>  @VisibleForTesting<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  public static int getTotalRefCount() {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    int total = 0;<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    for (int count : refCount.values()) {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      total += count;<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    }<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    return total;<a name="line.582"></a>
+<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
+<span class="sourceLineNo">584</span><a name="line.584"></a>
+<span class="sourceLineNo">585</span>  /**<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   * Releases the resources for the given AuthManager if the reference count is down to 0.<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * @param instance AuthManager to be released<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  public synchronized static void release(AuthManager instance) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    if (refCount.get(instance) == null || refCount.get(instance) &lt; 1) {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      String msg = "Something wrong with the AuthManager reference counting: " + instance<a name="line.591"></a>
+<span class="sourceLineNo">592</span>          + " whose count is " + refCount.get(instance);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>      instance.close();<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      managerMap.remove(instance.getZKPermissionWatcher().getWatcher());<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      instance.getZKPermissionWatcher().getWatcher().abort(msg, null);<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    } else {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      int ref = refCount.get(instance);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      --ref;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      refCount.put(instance, ref);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      if (ref == 0) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>        instance.close();<a name="line.602"></a>
+<span class="sourceLineNo">603</span>        managerMap.remove(instance.getZKPermissionWatcher().getWatcher());<a name="line.603"></a>
+<span class="sourceLineNo">604</span>        refCount.remove(instance);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>      }<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
+<span class="sourceLineNo">608</span>}<a name="line.608"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/GlobalPermission.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/GlobalPermission.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/GlobalPermission.html
new file mode 100644
index 0000000..1e26ede
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/GlobalPermission.html
@@ -0,0 +1,139 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>/**<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * Represents an authorization for access whole cluster.<a name="line.24"></a>
+<span class="sourceLineNo">025</span> */<a name="line.25"></a>
+<span class="sourceLineNo">026</span>@InterfaceAudience.Private<a name="line.26"></a>
+<span class="sourceLineNo">027</span>public class GlobalPermission extends Permission {<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>  /** Default constructor for Writable, do not use */<a name="line.29"></a>
+<span class="sourceLineNo">030</span>  public GlobalPermission() {<a name="line.30"></a>
+<span class="sourceLineNo">031</span>    super();<a name="line.31"></a>
+<span class="sourceLineNo">032</span>    this.scope = Scope.EMPTY;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>  }<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>  /**<a name="line.35"></a>
+<span class="sourceLineNo">036</span>   * Construct a global permission.<a name="line.36"></a>
+<span class="sourceLineNo">037</span>   * @param assigned assigned actions<a name="line.37"></a>
+<span class="sourceLineNo">038</span>   */<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  GlobalPermission(Action... assigned) {<a name="line.39"></a>
+<span class="sourceLineNo">040</span>    super(assigned);<a name="line.40"></a>
+<span class="sourceLineNo">041</span>    this.scope = Scope.GLOBAL;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  }<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  /**<a name="line.44"></a>
+<span class="sourceLineNo">045</span>   * Construct a global permission.<a name="line.45"></a>
+<span class="sourceLineNo">046</span>   * @param actionCode assigned actions<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  GlobalPermission(byte[] actionCode) {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    super(actionCode);<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    this.scope = Scope.GLOBAL;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  }<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  @Override<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  public int hashCode() {<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    return super.hashCode();<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  }<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  @Override<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public boolean equals(Object obj) {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    return obj instanceof GlobalPermission &amp;&amp; super.equals(obj);<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  }<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  @Override<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  public String toString() {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    return "[GlobalPermission: " + rawExpression() + "]";<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  }<a name="line.66"></a>
+<span class="sourceLineNo">067</span>}<a name="line.67"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html
new file mode 100644
index 0000000..6883dbb
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/NamespacePermission.html
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.DataInput;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.DataOutput;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Objects;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.28"></a>
+<span class="sourceLineNo">029</span><a name="line.29"></a>
+<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * Represents an authorization for access for the given namespace.<a name="line.31"></a>
+<span class="sourceLineNo">032</span> */<a name="line.32"></a>
+<span class="sourceLineNo">033</span>@InterfaceAudience.Private<a name="line.33"></a>
+<span class="sourceLineNo">034</span>public class NamespacePermission extends Permission {<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>  private String namespace = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>  /** Default constructor for Writable, do not use */<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  public NamespacePermission() {<a name="line.39"></a>
+<span class="sourceLineNo">040</span>    super();<a name="line.40"></a>
+<span class="sourceLineNo">041</span>    this.scope = Scope.EMPTY;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  }<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  /**<a name="line.44"></a>
+<span class="sourceLineNo">045</span>   * Construct a namespace permission.<a name="line.45"></a>
+<span class="sourceLineNo">046</span>   * @param namespace namespace's name<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   * @param assigned assigned actions<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   */<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  public NamespacePermission(String namespace, Action... assigned) {<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    super(assigned);<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    this.namespace = namespace;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    this.scope = Scope.NAMESPACE;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  }<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  /**<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * Construct a namespace permission.<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * @param namespace namespace's name<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * @param actionCode assigned actions<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   */<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public NamespacePermission(String namespace, byte[] actionCode) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    super(actionCode);<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    this.namespace = namespace;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    this.scope = Scope.NAMESPACE;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  public String getNamespace() {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    return namespace;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  /**<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * check if given action is granted in given namespace.<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * @param namespace namespace's name<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * @param action action to be checked<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * @return true if granted, false otherwise<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public boolean implies(String namespace, Action action) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    return namespace.equals(this.namespace) &amp;&amp; implies(action);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  @Override<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public boolean equalsExceptActions(Object obj) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    if (!(obj instanceof NamespacePermission)) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      return false;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    NamespacePermission gp = (NamespacePermission) obj;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    return namespace.equals(gp.namespace);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  @Override<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public int hashCode() {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    return Objects.hash(namespace) + super.hashCode();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  @Override<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  public boolean equals(Object obj) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    return equalsExceptActions(obj) &amp;&amp; super.equals(obj);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  @Override<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  public String toString() {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    return "[NamespacePermission: " + rawExpression() + "]";<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  @Override<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  protected String rawExpression() {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    StringBuilder raw = new StringBuilder("namespace=").append(namespace).append(", ");<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    return raw.toString() + super.rawExpression();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  @Override<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public void readFields(DataInput in) throws IOException {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    super.readFields(in);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    namespace = Bytes.toString(Bytes.readByteArray(in));<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  @Override<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  public void write(DataOutput out) throws IOException {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    super.write(out);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    Bytes.writeByteArray(out, Bytes.toBytes(namespace));<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>}<a name="line.121"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[29/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TablePermission.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TablePermission.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TablePermission.html
index c7df26c..e71aa27 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TablePermission.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/TablePermission.html
@@ -95,22 +95,6 @@
 <!--   -->
 </a>
 <h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a> in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing subclasses, and an explanation">
-<caption><span>Subclasses of <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a> in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></span></code>
-<div class="block">Represents an authorization for access over the given table, column family
- plus qualifier, for the given user.</div>
-</td>
-</tr>
-</tbody>
-</table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
 <caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
@@ -119,12 +103,14 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#nsCache">nsCache</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#tableCache">tableCache</a></span></code>
+<div class="block">Cache for table permission.</div>
+</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#tableCache">tableCache</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>(package private) <a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#TBL_NO_PERMISSION">TBL_NO_PERMISSION</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -137,18 +123,6 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ShadedAccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toTablePermission-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission-">toTablePermission</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission&nbsp;proto)</code>
-<div class="block">Converts a Permission shaded proto to a client TablePermission object.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toTablePermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission-">toTablePermission</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.Permission&nbsp;proto)</code>
-<div class="block">Converts a Permission proto to a client TablePermission object.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toTablePermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.TablePermission-">toTablePermission</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.TablePermission&nbsp;proto)</code>
 <div class="block">Converts a TablePermission proto to a client TablePermission object.</div>
 </td>
@@ -156,108 +130,6 @@
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> that return types with arguments of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getNamespacePermissions-org.apache.hadoop.conf.Configuration-java.lang.String-">getNamespacePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
-                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getNamespacePermissions-java.lang.String-">getNamespacePermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>(package private) static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getPermissions-org.apache.hadoop.conf.Configuration-byte:A-org.apache.hadoop.hbase.client.Table-byte:A-byte:A-java.lang.String-boolean-">getPermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
-              byte[]&nbsp;entryName,
-              <a href="../../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
-              byte[]&nbsp;cf,
-              byte[]&nbsp;cq,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
-              boolean&nbsp;hasFilterUser)</code>
-<div class="block">Reads user permission assignments stored in the <code>l:</code> column family of the first
- table row in <code>_acl_</code>.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getTablePermissions-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-">getTablePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
-                   <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getTablePermissions-org.apache.hadoop.hbase.TableName-">getTablePermissions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#loadAll-org.apache.hadoop.conf.Configuration-">loadAll</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block">Load all permissions from the region server holding <code>_acl_</code>,
- primarily intended for testing purposes.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#loadAll-org.apache.hadoop.hbase.regionserver.Region-">loadAll</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;aclRegion)</code>
-<div class="block">Loads all of the permission grants stored in a region of the <code>_acl_</code>
- table.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static <a href="../../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#parsePermissionRecord-byte:A-org.apache.hadoop.hbase.Cell-byte:A-byte:A-boolean-java.lang.String-">parsePermissionRecord</a></span>(byte[]&nbsp;entryName,
-                     <a href="../../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv,
-                     byte[]&nbsp;cf,
-                     byte[]&nbsp;cq,
-                     boolean&nbsp;filterPerms,
-                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filterUser)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#parsePermissions-byte:A-org.apache.hadoop.hbase.client.Result-byte:A-byte:A-java.lang.String-boolean-">parsePermissions</a></span>(byte[]&nbsp;entryName,
-                <a href="../../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
-                byte[]&nbsp;cf,
-                byte[]&nbsp;cq,
-                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
-                boolean&nbsp;hasFilterUser)</code>
-<div class="block">Parse and filter permission based on the specified column family, column qualifier and user
- name.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#readPermissions-byte:A-org.apache.hadoop.conf.Configuration-">readPermissions</a></span>(byte[]&nbsp;data,
-               org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block">Reads a set of permissions as <code>Writable</code> instances from the input
- stream.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#readWritablePermissions-java.io.DataInput-org.apache.hadoop.conf.Configuration-">readWritablePermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</a>&nbsp;in,
-                       org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">ShadedAccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toUserTablePermissions-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions-">toUserTablePermissions</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</code>
-<div class="block">Convert a shaded protobuf UserTablePermissions to a ListMultimap&lt;String, TablePermission&gt;
- where key is username.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUserTablePermissions-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions-">toUserTablePermissions</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</code>
-<div class="block">Convert a protobuf UserTablePermissions to a
- ListMultimap&lt;String, TablePermission&gt; where key is username.</div>
-</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
 <caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
@@ -266,7 +138,9 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#tableFieldsEqual-org.apache.hadoop.hbase.security.access.TablePermission-">tableFieldsEqual</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;other)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TablePermission.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html#tableFieldsEqual-org.apache.hadoop.hbase.security.access.TablePermission-">tableFieldsEqual</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;tp)</code>
+<div class="block">Check if fields of table in table permission equals.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></code></td>
@@ -285,130 +159,23 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeFamily-java.util.Set-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeFamily</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+               <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+               byte[]&nbsp;family,
+               <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#authorize-java.util.List-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-         <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         byte[]&nbsp;family,
-         byte[]&nbsp;qualifier,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#authorizeTable-java.util.Set-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action-">authorizeTable</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+              <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+              byte[]&nbsp;family,
+              byte[]&nbsp;qualifier,
+              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#hasAccess-java.util.List-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccess</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-         <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#setNamespaceGroupPermissions-java.lang.String-java.lang.String-java.util.List-">setNamespaceGroupPermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;group,
-                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms)</code>
-<div class="block">Overwrites the existing permission set for a group and triggers an update
- for zookeeper synchronization.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#setNamespaceUserPermissions-java.lang.String-java.lang.String-java.util.List-">setNamespaceUserPermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
-                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms)</code>
-<div class="block">Overwrites the existing permission set for a given user for a table, and
- triggers an update for zookeeper synchronization.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#setTableGroupPermissions-java.lang.String-org.apache.hadoop.hbase.TableName-java.util.List-">setTableGroupPermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;group,
-                        <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms)</code>
-<div class="block">Overwrites the existing permission set for a group and triggers an update
- for zookeeper synchronization.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#setTableUserPermissions-java.lang.String-org.apache.hadoop.hbase.TableName-java.util.List-">setTableUserPermissions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;username,
-                       <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms)</code>
-<div class="block">Overwrites the existing permission set for a given user for a table, and
- triggers an update for zookeeper synchronization.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions</code></td>
-<td class="colLast"><span class="typeNameLabel">ShadedAccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toUserTablePermissions-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">toUserTablePermissions</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perm)</code>
-<div class="block">Convert a ListMultimap&lt;String, TablePermission&gt; where key is username to a shaded
- protobuf UserPermission</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUserTablePermissions-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">toUserTablePermissions</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perm)</code>
-<div class="block">Convert a ListMultimap&lt;String, TablePermission&gt; where key is username
- to a protobuf UserPermission</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#updateGlobalCache-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">updateGlobalCache</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;userPerms)</code>
-<div class="block">Updates the internal global permissions cache</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#updateNsCache-java.lang.String-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">updateNsCache</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-             org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;tablePerms)</code>
-<div class="block">Updates the internal permissions cache for a single table, splitting
- the permissions listed into separate caches for users and groups to optimize
- group lookups.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#updateTableCache-org.apache.hadoop.hbase.TableName-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">updateTableCache</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;tablePerms)</code>
-<div class="block">Updates the internal permissions cache for a single table, splitting
- the permissions listed into separate caches for users and groups to optimize
- group lookups.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#writeNamespaceToZooKeeper-java.lang.String-org.apache.hadoop.hbase.security.access.TableAuthManager.PermissionCache-">writeNamespaceToZooKeeper</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
-                         <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;tablePerms)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static byte[]</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#writePermissionsAsBytes-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hadoop.conf.Configuration-">writePermissionsAsBytes</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;perms,
-                       org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block">Writes a set of permissions as <code>Writable</code> instances and returns the
- resulting byte array.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#writeTableToZooKeeper-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.TableAuthManager.PermissionCache-">writeTableToZooKeeper</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
-                     <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager.PermissionCache</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;tablePerms)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
-<caption><span>Constructors in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html#UserPermission-byte:A-org.apache.hadoop.hbase.security.access.TablePermission-">UserPermission</a></span>(byte[]&nbsp;user,
-              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&nbsp;perm)</code>
-<div class="block">Creates a new instance for the given user, table, column family and
- qualifier, matching the actions with the given codes.</div>
-</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#hasAccessTable-java.util.Set-org.apache.hadoop.hbase.security.access.Permission.Action-">hasAccessTable</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&nbsp;permissions,
+              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;action)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/UserPermission.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/UserPermission.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/UserPermission.html
index abbf433..759d604 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/UserPermission.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/UserPermission.html
@@ -117,12 +117,6 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ShadedAccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toUserPermission-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UserPermission-">toUserPermission</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UserPermission&nbsp;proto)</code>
-<div class="block">Converts a user permission proto to a client user permission object.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUserPermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UserPermission-">toUserPermission</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UserPermission&nbsp;proto)</code>
 <div class="block">Converts a user permission proto to a client user permission object.</div>
 </td>
@@ -137,6 +131,29 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getNamespacePermissions-org.apache.hadoop.conf.Configuration-java.lang.String-">getNamespacePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getPermissions-org.apache.hadoop.conf.Configuration-byte:A-org.apache.hadoop.hbase.client.Table-byte:A-byte:A-java.lang.String-boolean-">getPermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+              byte[]&nbsp;entryName,
+              <a href="../../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,
+              byte[]&nbsp;cf,
+              byte[]&nbsp;cq,
+              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+              boolean&nbsp;hasFilterUser)</code>
+<div class="block">Reads user permission assignments stored in the <code>l:</code> column family of the first
+ table row in <code>_acl_</code>.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getTablePermissions-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-">getTablePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+                   <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getUserNamespacePermissions-org.apache.hadoop.conf.Configuration-java.lang.String-java.lang.String-boolean-">getUserNamespacePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
@@ -146,7 +163,7 @@
  associated permissions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getUserPermissions-org.apache.hadoop.conf.Configuration-byte:A-byte:A-byte:A-java.lang.String-boolean-">getUserPermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                   byte[]&nbsp;entryName,
@@ -158,14 +175,14 @@
  permissions based on the specified column family, column qualifier and user name.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#getUserPermissions-org.apache.hadoop.hbase.client.Connection-java.lang.String-">getUserPermissions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableRegex)</code>
 <div class="block">List all the userPermissions matching the given pattern.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#getUserPermissions-org.apache.hadoop.hbase.client.Connection-java.lang.String-byte:A-">getUserPermissions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableRegex,
@@ -173,7 +190,7 @@
 <div class="block">List all the userPermissions matching the given table pattern and column family.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#getUserPermissions-org.apache.hadoop.hbase.client.Connection-java.lang.String-byte:A-byte:A-">getUserPermissions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableRegex,
@@ -183,7 +200,7 @@
  qualifier.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#getUserPermissions-org.apache.hadoop.hbase.client.Connection-java.lang.String-byte:A-byte:A-java.lang.String-">getUserPermissions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableRegex,
@@ -194,7 +211,7 @@
  qualifier.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#getUserPermissions-org.apache.hadoop.hbase.client.Connection-java.lang.String-byte:A-java.lang.String-">getUserPermissions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableRegex,
@@ -203,7 +220,7 @@
 <div class="block">List all the userPermissions matching the given table pattern, column family and user name.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#getUserPermissions-org.apache.hadoop.hbase.client.Connection-java.lang.String-java.lang.String-">getUserPermissions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableRegex,
@@ -211,14 +228,14 @@
 <div class="block">List all the userPermissions matching the given table pattern and user name.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#getUserPermissions-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-">getUserPermissions</a></span>(com.google.protobuf.RpcController&nbsp;controller,
                   org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol)</code>
 <div class="block">A utility used to get user's global permissions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#getUserPermissions-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-byte:A-">getUserPermissions</a></span>(com.google.protobuf.RpcController&nbsp;controller,
                   org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
@@ -226,7 +243,7 @@
 <div class="block">A utility used to get permissions for selected namespace.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#getUserPermissions-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-byte:A-java.lang.String-">getUserPermissions</a></span>(com.google.protobuf.RpcController&nbsp;controller,
                   org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
@@ -235,7 +252,7 @@
 <div class="block">A utility used to get permissions for selected namespace based on the specified user name.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#getUserPermissions-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-java.lang.String-">getUserPermissions</a></span>(com.google.protobuf.RpcController&nbsp;controller,
                   org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
@@ -243,7 +260,7 @@
 <div class="block">A utility used to get user's global permissions based on the specified user name.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#getUserPermissions-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-org.apache.hadoop.hbase.TableName-">getUserPermissions</a></span>(com.google.protobuf.RpcController&nbsp;controller,
                   org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
@@ -251,7 +268,7 @@
 <div class="block">A utility used to get user table permissions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#getUserPermissions-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-org.apache.hadoop.hbase.TableName-byte:A-byte:A-java.lang.String-">getUserPermissions</a></span>(com.google.protobuf.RpcController&nbsp;controller,
                   org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface&nbsp;protocol,
@@ -263,7 +280,7 @@
  user name.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getUserTablePermissions-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-byte:A-byte:A-java.lang.String-boolean-">getUserTablePermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                        <a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -275,6 +292,43 @@
  associated permissions.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#loadAll-org.apache.hadoop.conf.Configuration-">loadAll</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block">Load all permissions from the region server holding <code>_acl_</code>,
+ primarily intended for testing purposes.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#loadAll-org.apache.hadoop.hbase.regionserver.Region-">loadAll</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;aclRegion)</code>
+<div class="block">Loads all of the permission grants stored in a region of the <code>_acl_</code>
+ table.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#parsePermissions-byte:A-org.apache.hadoop.hbase.client.Result-byte:A-byte:A-java.lang.String-boolean-">parsePermissions</a></span>(byte[]&nbsp;entryName,
+                <a href="../../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
+                byte[]&nbsp;cf,
+                byte[]&nbsp;cq,
+                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+                boolean&nbsp;hasFilterUser)</code>
+<div class="block">Parse and filter permission based on the specified column family, column qualifier and user
+ name.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#readUserPermission-byte:A-org.apache.hadoop.conf.Configuration-">readUserPermission</a></span>(byte[]&nbsp;data,
+                  org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUserPermission-org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions-">toUserPermission</a></span>(org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions&nbsp;proto)</code>
+<div class="block">Convert a protobuf UserTablePermissions to a ListMultimap&lt;Username, UserPermission&gt</div>
+</td>
+</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -322,17 +376,13 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>(package private) static byte[]</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#userPermissionKey-org.apache.hadoop.hbase.security.access.UserPermission-">userPermissionKey</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;userPerm)</code>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#userPermissionKey-org.apache.hadoop.hbase.security.access.UserPermission-">userPermissionKey</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;permission)</code>
 <div class="block">Build qualifier key from user permission:
   username
   username,family
   username,family,qualifier</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>(package private) static byte[]</code></td>
-<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#userPermissionRowKey-org.apache.hadoop.hbase.security.access.UserPermission-">userPermissionRowKey</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&nbsp;userPerm)</code>&nbsp;</td>
-</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -348,6 +398,28 @@
 <div class="block">Converts the permissions list into a protocol buffer GetUserPermissionsResponse</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions</code></td>
+<td class="colLast"><span class="typeNameLabel">ShadedAccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#toUserTablePermissions-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">toUserTablePermissions</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;perm)</code>
+<div class="block">Convert a ListMultimap&lt;String, TablePermission&gt; where key is username to a shaded
+ protobuf UserPermission</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.UsersAndPermissions</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlUtil.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlUtil.html#toUserTablePermissions-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-">toUserTablePermissions</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;perm)</code>
+<div class="block">Convert a ListMultimap&lt;String, TablePermission&gt; where key is username
+ to a protobuf UserPermission</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static byte[]</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#writePermissionsAsBytes-org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap-org.apache.hadoop.conf.Configuration-">writePermissionsAsBytes</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&nbsp;perms,
+                       org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block">Writes a set of permissions as <code>Writable</code> instances and returns the
+ resulting byte array.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/class-use/ZKPermissionWatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/ZKPermissionWatcher.html b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/ZKPermissionWatcher.html
index db1e64f..45ec93f 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/class-use/ZKPermissionWatcher.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/class-use/ZKPermissionWatcher.html
@@ -104,7 +104,7 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#zkperms">zkperms</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#zkperms">zkperms</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -117,7 +117,7 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TableAuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html#getZKPermissionWatcher--">getZKPermissionWatcher</a></span>()</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AuthManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html#getZKPermissionWatcher--">getZKPermissionWatcher</a></span>()</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-frame.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-frame.html
index 8183fc6..159e137 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-frame.html
@@ -24,14 +24,16 @@
 <li><a href="AccessController.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">AccessController</a></li>
 <li><a href="AccessControlLists.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">AccessControlLists</a></li>
 <li><a href="AccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">AccessControlUtil</a></li>
+<li><a href="AuthManager.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">AuthManager</a></li>
+<li><a href="AuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">AuthManager.PermissionCache</a></li>
 <li><a href="AuthResult.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">AuthResult</a></li>
 <li><a href="AuthResult.Params.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">AuthResult.Params</a></li>
 <li><a href="CoprocessorWhitelistMasterObserver.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">CoprocessorWhitelistMasterObserver</a></li>
+<li><a href="GlobalPermission.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">GlobalPermission</a></li>
+<li><a href="NamespacePermission.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">NamespacePermission</a></li>
 <li><a href="Permission.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">Permission</a></li>
 <li><a href="SecureBulkLoadEndpoint.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">SecureBulkLoadEndpoint</a></li>
 <li><a href="ShadedAccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">ShadedAccessControlUtil</a></li>
-<li><a href="TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TableAuthManager</a></li>
-<li><a href="TableAuthManager.PermissionCache.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TableAuthManager.PermissionCache</a></li>
 <li><a href="TablePermission.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TablePermission</a></li>
 <li><a href="UserPermission.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">UserPermission</a></li>
 <li><a href="ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">ZKPermissionWatcher</a></li>
@@ -41,6 +43,7 @@
 <li><a href="AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access" target="classFrame">AccessControlFilter.Strategy</a></li>
 <li><a href="AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access" target="classFrame">AccessController.OpType</a></li>
 <li><a href="Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access" target="classFrame">Permission.Action</a></li>
+<li><a href="Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access" target="classFrame">Permission.Scope</a></li>
 </ul>
 </div>
 </body>


[36/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html b/devapidocs/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html
deleted file mode 100644
index 9edfa17..0000000
--- a/devapidocs/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html
+++ /dev/null
@@ -1,428 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TableAuthManager.PermissionCache (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TableAuthManager.PermissionCache (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TableAuthManager.PermissionCache.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" target="_top">Frames</a></li>
-<li><a href="TableAuthManager.PermissionCache.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
-<h2 title="Class TableAuthManager.PermissionCache" class="title">Class TableAuthManager.PermissionCache&lt;T extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.security.access.TableAuthManager.PermissionCache&lt;T&gt;</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></dd>
-</dl>
-<hr>
-<br>
-<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.html#line.57">TableAuthManager.PermissionCache</a>&lt;T extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;
-extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#groupCache">groupCache</a></span></code>
-<div class="block">Cache of group permissions</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#userCache">userCache</a></span></code>
-<div class="block">Cache of user permissions</div>
-</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier</th>
-<th class="colLast" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#PermissionCache--">PermissionCache</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#getAllPermissions--">getAllPermissions</a></span>()</code>
-<div class="block">Returns a combined map of user and group permissions, with group names
- distinguished according to <a href="../../../../../../org/apache/hadoop/hbase/AuthUtil.html#isGroupPrincipal-java.lang.String-"><code>AuthUtil.isGroupPrincipal(String)</code></a>.</div>
-</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#getGroup-java.lang.String-">getGroup</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;group)</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#getUser-java.lang.String-">getUser</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user)</code>&nbsp;</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#putGroup-java.lang.String-T-">putGroup</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;group,
-        <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&nbsp;perm)</code>&nbsp;</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#putUser-java.lang.String-T-">putUser</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
-       <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&nbsp;perm)</code>&nbsp;</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#replaceGroup-java.lang.String-java.lang.Iterable-">replaceGroup</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;group,
-            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;? extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;&nbsp;perms)</code>&nbsp;</td>
-</tr>
-<tr id="i6" class="altColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#replaceUser-java.lang.String-java.lang.Iterable-">replaceUser</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
-           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;? extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;&nbsp;perms)</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="userCache">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>userCache</h4>
-<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a> extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#line.59">userCache</a></pre>
-<div class="block">Cache of user permissions</div>
-</li>
-</ul>
-<a name="groupCache">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>groupCache</h4>
-<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a> extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#line.61">groupCache</a></pre>
-<div class="block">Cache of group permissions</div>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="PermissionCache--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>PermissionCache</h4>
-<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#line.57">PermissionCache</a>()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="getUser-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getUser</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#line.63">getUser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user)</pre>
-</li>
-</ul>
-<a name="putUser-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">
-<!--   -->
-</a><a name="putUser-java.lang.String-T-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>putUser</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#line.67">putUser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
-                    <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&nbsp;perm)</pre>
-</li>
-</ul>
-<a name="replaceUser-java.lang.String-java.lang.Iterable-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replaceUser</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#line.71">replaceUser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
-                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;? extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;&nbsp;perms)</pre>
-</li>
-</ul>
-<a name="getGroup-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getGroup</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#line.75">getGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;group)</pre>
-</li>
-</ul>
-<a name="putGroup-java.lang.String-org.apache.hadoop.hbase.security.access.Permission-">
-<!--   -->
-</a><a name="putGroup-java.lang.String-T-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>putGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#line.79">putGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;group,
-                     <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&nbsp;perm)</pre>
-</li>
-</ul>
-<a name="replaceGroup-java.lang.String-java.lang.Iterable-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replaceGroup</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#line.83">replaceGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;group,
-                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;? extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;&nbsp;perms)</pre>
-</li>
-</ul>
-<a name="getAllPermissions--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>getAllPermissions</h4>
-<pre>public&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" title="type parameter in TableAuthManager.PermissionCache">T</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html#line.91">getAllPermissions</a>()</pre>
-<div class="block">Returns a combined map of user and group permissions, with group names
- distinguished according to <a href="../../../../../../org/apache/hadoop/hbase/AuthUtil.html#isGroupPrincipal-java.lang.String-"><code>AuthUtil.isGroupPrincipal(String)</code></a>.</div>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TableAuthManager.PermissionCache.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TableAuthManager.PermissionCache.html" target="_top">Frames</a></li>
-<li><a href="TableAuthManager.PermissionCache.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>


[45/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/client/Consistency.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Consistency.html b/devapidocs/org/apache/hadoop/hbase/client/Consistency.html
index 7f3f29c..63443a9 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Consistency.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Consistency.html
@@ -253,7 +253,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Consistency.html#line.39">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Consistency.html#line.44">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -273,7 +273,7 @@ for (Consistency c : Consistency.values())
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Consistency.html#line.39">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client">Consistency</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Consistency.html#line.44">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/client/IsolationLevel.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/IsolationLevel.html b/devapidocs/org/apache/hadoop/hbase/client/IsolationLevel.html
index 1e48eae..dc80206 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/IsolationLevel.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/IsolationLevel.html
@@ -256,7 +256,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/IsolationLevel.html#line.46">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/IsolationLevel.html#line.57">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -276,7 +276,7 @@ for (IsolationLevel c : IsolationLevel.values())
 <ul class="blockList">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/IsolationLevel.html#line.46">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/IsolationLevel.html#line.57">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html
index 013a9e9..1e001cf 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html
@@ -2206,7 +2206,7 @@ service.</div>
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colFirst"><code>private static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#parsePermissions-byte:A-org.apache.hadoop.hbase.client.Result-byte:A-byte:A-java.lang.String-boolean-">parsePermissions</a></span>(byte[]&nbsp;entryName,
                 <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
                 byte[]&nbsp;cf,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html
index 634818a..df03300 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html
@@ -860,7 +860,7 @@ service.</div>
 <td class="colLast"><span class="typeNameLabel">AccessControlClient.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlClient.html#getAccessControlServiceStub-org.apache.hadoop.hbase.client.Table-">getAccessControlServiceStub</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;ht)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>(package private) static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colFirst"><code>(package private) static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#getPermissions-org.apache.hadoop.conf.Configuration-byte:A-org.apache.hadoop.hbase.client.Table-byte:A-byte:A-java.lang.String-boolean-">getPermissions</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
               byte[]&nbsp;entryName,
               <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;t,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index a9f1b7a..87d0029 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -555,24 +555,24 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/exceptions/class-use/DeserializationException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/exceptions/class-use/DeserializationException.html b/devapidocs/org/apache/hadoop/hbase/exceptions/class-use/DeserializationException.html
index 7048077..057f1d1 100644
--- a/devapidocs/org/apache/hadoop/hbase/exceptions/class-use/DeserializationException.html
+++ b/devapidocs/org/apache/hadoop/hbase/exceptions/class-use/DeserializationException.html
@@ -492,12 +492,14 @@
 <td class="colLast"><span class="typeNameLabel">AccessControlFilter.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#parseFrom-byte:A-">parseFrom</a></span>(byte[]&nbsp;pbBytes)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;</code></td>
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#readPermissions-byte:A-org.apache.hadoop.conf.Configuration-">readPermissions</a></span>(byte[]&nbsp;data,
-               org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block">Reads a set of permissions as <code>Writable</code> instances from the input
- stream.</div>
-</td>
+               org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#readUserPermission-byte:A-org.apache.hadoop.conf.Configuration-">readUserPermission</a></span>(byte[]&nbsp;data,
+                  org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index ce950b0..ae0124e 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -104,8 +104,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 92f4246..711664b 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -184,13 +184,13 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 27cacca..09edbb5 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -274,12 +274,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index c12ae36..427b9f5 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -353,8 +353,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index deb19ba..2e21581 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -293,10 +293,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/master/assignment/CloseRegionProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/CloseRegionProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/CloseRegionProcedure.html
index 1d5e356..99241bf 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/CloseRegionProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/CloseRegionProcedure.html
@@ -261,14 +261,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Reg
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#abort-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">abort</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#execute-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">execute</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#getTableName--">getTableName</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-java.io.IOException-">remoteCallFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteOperationCompleted-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">remoteOperationCompleted</a>, <a href="../../../../.
 ./../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteOperationFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">remoteOperationFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#rollback-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">rollback</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#abort-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">abort</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#execute-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">execute</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#getTableName--">getTableName</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-java.io.IOException-">remoteCallFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteOperationCompleted-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">remoteOperationCompleted</a>, <a href="../../../../.
 ./../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteOperationFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">remoteOperationFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#rollback-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">rollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#waitInitialized-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">waitInitialized</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex-int-">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#afterReplay-TEnvironment-">afterReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay-TEnvironment-">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#bypass-TEnvironment-">bypass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo-org.apache.hadoop.hbase.procedure2.Procedure-">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup-TEnvironment-">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute-TEnvironment-">doExecute</a>, 
 <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback-TEnvironment-">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime--">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getChildrenLatch--">getChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException--">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate--">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey--">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner--">getOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId--">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-
 TEnvironment-">getProcedureMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId--">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode-long-">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcName--">getProcName</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult--">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId-java.util.Map-org.apache.hadoop.hbase.procedure2.Procedure-">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcId--">getRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes--">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState--">getState</a>,
  <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getSubmittedTime--">getSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout--">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeoutTimestamp--">getTimeoutTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasChildren--">hasChildren</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException--">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock--">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner--">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent--">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout--">hasTimeout</a>, <a href="
 ../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#haveSameParent-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure-">haveSameParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch--">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isBypass--">isBypass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed--">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished--">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isInitializing--">isInitializing</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isLockedWhenLoading--">isLockedWhenLoading</a>, <a href="../../
 ../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isRunnable--">isRunnable</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess--">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting--">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex--">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure-java.lang.String-java.lang.String-">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch-int-">setChildrenLatch</a>, <a href="../../../../../../org/apa
 che/hadoop/hbase/procedure2/Procedure.html#setFailure-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure-java.lang.String-java.lang.Throwable-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setLastUpdate-long-">setLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey-org.apache.hadoop.hbase.util.NonceKey-">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-java.lang.String-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId-long-">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#se
 tProcId-long-">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult-byte:A-">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setRootProcId-long-">setRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes-java.util.List-">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState-">setState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setSubmittedTime-long-">setSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout-int-">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure-TEnvironment-">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedur
 e2/Procedure.html#shouldWaitClientAck-TEnvironment-">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#skipPersistence--">skipPersistence</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString--">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass--">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">toStringClassDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringDetails--">toStringDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringSimpleSB--">toStringSimpleSB</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState-java.lang.StringBuilder-">toStringState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Pr
 ocedure.html#updateMetricsOnFinish-TEnvironment-long-boolean-">updateMetricsOnFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateMetricsOnSubmit-TEnvironment-">updateMetricsOnSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp--">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-">waitInitialized</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted--">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex-int-">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#afterReplay-TEnvironment-">afterReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay-TEnvironment-">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#bypass-TEnvironment-">bypass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo-org.apache.hadoop.hbase.procedure2.Procedure-">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup-TEnvironment-">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute-TEnvironment-">doExecute</a>, 
 <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback-TEnvironment-">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime--">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getChildrenLatch--">getChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException--">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate--">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey--">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner--">getOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId--">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-
 TEnvironment-">getProcedureMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId--">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode-long-">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcName--">getProcName</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult--">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId-java.util.Map-org.apache.hadoop.hbase.procedure2.Procedure-">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcId--">getRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes--">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState--">getState</a>,
  <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getSubmittedTime--">getSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout--">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeoutTimestamp--">getTimeoutTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasChildren--">hasChildren</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException--">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock--">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner--">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent--">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout--">hasTimeout</a>, <a href="
 ../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#haveSameParent-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure-">haveSameParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch--">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isBypass--">isBypass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed--">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished--">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isInitializing--">isInitializing</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isLockedWhenLoading--">isLockedWhenLoading</a>, <a href="../../
 ../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isRunnable--">isRunnable</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess--">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting--">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex--">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure-java.lang.String-java.lang.String-">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch-int-">setChildrenLatch</a>, <a href="../../../../../../org/apa
 che/hadoop/hbase/procedure2/Procedure.html#setFailure-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure-java.lang.String-java.lang.Throwable-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setLastUpdate-long-">setLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey-org.apache.hadoop.hbase.util.NonceKey-">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-java.lang.String-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId-long-">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#se
 tProcId-long-">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult-byte:A-">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setRootProcId-long-">setRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes-java.util.List-">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState-">setState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setSubmittedTime-long-">setSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout-int-">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure-TEnvironment-">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedur
 e2/Procedure.html#shouldWaitClientAck-TEnvironment-">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#skipPersistence--">skipPersistence</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString--">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass--">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">toStringClassDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringDetails--">toStringDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringSimpleSB--">toStringSimpleSB</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState-java.lang.StringBuilder-">toStringState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Pr
 ocedure.html#updateMetricsOnFinish-TEnvironment-long-boolean-">updateMetricsOnFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateMetricsOnSubmit-TEnvironment-">updateMetricsOnSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp--">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted--">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -418,11 +418,13 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Reg
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#shouldDispatch-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">RegionRemoteProcedureBase</a></code></span></div>
 <div class="block">Check whether we still need to make the call to RS.
  <p/>
- Usually this will not happen if we do not allow assigning a already onlined region. But if we
- have something wrong in the RSProcedureDispatcher, where we have already sent the request to
- RS, but then we tell the upper layer the remote call is failed due to rpc timeout or connection
- closed or anything else, then this issue can still happen. So here we add a check to make it
- more robust.</div>
+ This could happen when master restarts. Since we do not know whether a request has already been
+ sent to the region server after we add a remote operation to the dispatcher, so the safe way is
+ to not persist the dispatched field and try to add the remote operation again. But it is
+ possible that we do have already sent the request to region server and it has also sent back
+ the response, so here we need to check the region state, if it is not in the expecting state,
+ we should give up, otherwise we may hang for ever, as the region server will just ignore
+ redundant calls.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#shouldDispatch-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">shouldDispatch</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/master/assignment/OpenRegionProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/OpenRegionProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/OpenRegionProcedure.html
index 6e98f76..0b1cc40 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/OpenRegionProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/OpenRegionProcedure.html
@@ -249,14 +249,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Reg
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#abort-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">abort</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#execute-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">execute</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#getTableName--">getTableName</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-java.io.IOException-">remoteCallFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteOperationCompleted-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">remoteOperationCompleted</a>, <a href="../../../../.
 ./../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteOperationFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">remoteOperationFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#rollback-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">rollback</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#abort-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">abort</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#execute-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">execute</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#getTableName--">getTableName</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-java.io.IOException-">remoteCallFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteOperationCompleted-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">remoteOperationCompleted</a>, <a href="../../../../.
 ./../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteOperationFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">remoteOperationFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#rollback-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">rollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#waitInitialized-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">waitInitialized</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex-int-">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#afterReplay-TEnvironment-">afterReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay-TEnvironment-">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#bypass-TEnvironment-">bypass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo-org.apache.hadoop.hbase.procedure2.Procedure-">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup-TEnvironment-">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute-TEnvironment-">doExecute</a>, 
 <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback-TEnvironment-">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime--">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getChildrenLatch--">getChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException--">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate--">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey--">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner--">getOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId--">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-
 TEnvironment-">getProcedureMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId--">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode-long-">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcName--">getProcName</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult--">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId-java.util.Map-org.apache.hadoop.hbase.procedure2.Procedure-">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcId--">getRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes--">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState--">getState</a>,
  <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getSubmittedTime--">getSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout--">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeoutTimestamp--">getTimeoutTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasChildren--">hasChildren</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException--">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock--">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner--">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent--">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout--">hasTimeout</a>, <a href="
 ../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#haveSameParent-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure-">haveSameParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch--">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isBypass--">isBypass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed--">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished--">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isInitializing--">isInitializing</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isLockedWhenLoading--">isLockedWhenLoading</a>, <a href="../../
 ../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isRunnable--">isRunnable</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess--">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting--">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex--">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure-java.lang.String-java.lang.String-">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch-int-">setChildrenLatch</a>, <a href="../../../../../../org/apa
 che/hadoop/hbase/procedure2/Procedure.html#setFailure-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure-java.lang.String-java.lang.Throwable-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setLastUpdate-long-">setLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey-org.apache.hadoop.hbase.util.NonceKey-">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-java.lang.String-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId-long-">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#se
 tProcId-long-">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult-byte:A-">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setRootProcId-long-">setRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes-java.util.List-">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState-">setState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setSubmittedTime-long-">setSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout-int-">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure-TEnvironment-">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedur
 e2/Procedure.html#shouldWaitClientAck-TEnvironment-">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#skipPersistence--">skipPersistence</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString--">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass--">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">toStringClassDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringDetails--">toStringDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringSimpleSB--">toStringSimpleSB</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState-java.lang.StringBuilder-">toStringState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Pr
 ocedure.html#updateMetricsOnFinish-TEnvironment-long-boolean-">updateMetricsOnFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateMetricsOnSubmit-TEnvironment-">updateMetricsOnSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp--">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-">waitInitialized</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted--">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex-int-">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#afterReplay-TEnvironment-">afterReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay-TEnvironment-">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#bypass-TEnvironment-">bypass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo-org.apache.hadoop.hbase.procedure2.Procedure-">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup-TEnvironment-">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute-TEnvironment-">doExecute</a>, 
 <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback-TEnvironment-">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime--">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getChildrenLatch--">getChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException--">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate--">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey--">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner--">getOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId--">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-
 TEnvironment-">getProcedureMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId--">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode-long-">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcName--">getProcName</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult--">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId-java.util.Map-org.apache.hadoop.hbase.procedure2.Procedure-">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcId--">getRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes--">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState--">getState</a>,
  <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getSubmittedTime--">getSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout--">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeoutTimestamp--">getTimeoutTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasChildren--">hasChildren</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException--">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock--">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner--">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent--">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout--">hasTimeout</a>, <a href="
 ../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#haveSameParent-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure-">haveSameParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch--">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isBypass--">isBypass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed--">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished--">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isInitializing--">isInitializing</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isLockedWhenLoading--">isLockedWhenLoading</a>, <a href="../../
 ../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isRunnable--">isRunnable</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess--">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting--">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex--">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure-java.lang.String-java.lang.String-">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch-int-">setChildrenLatch</a>, <a href="../../../../../../org/apa
 che/hadoop/hbase/procedure2/Procedure.html#setFailure-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure-java.lang.String-java.lang.Throwable-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setLastUpdate-long-">setLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey-org.apache.hadoop.hbase.util.NonceKey-">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-java.lang.String-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId-long-">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#se
 tProcId-long-">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult-byte:A-">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setRootProcId-long-">setRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes-java.util.List-">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState-">setState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setSubmittedTime-long-">setSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout-int-">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure-TEnvironment-">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedur
 e2/Procedure.html#shouldWaitClientAck-TEnvironment-">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#skipPersistence--">skipPersistence</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString--">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass--">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">toStringClassDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringDetails--">toStringDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringSimpleSB--">toStringSimpleSB</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState-java.lang.StringBuilder-">toStringState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Pr
 ocedure.html#updateMetricsOnFinish-TEnvironment-long-boolean-">updateMetricsOnFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateMetricsOnSubmit-TEnvironment-">updateMetricsOnSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp--">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted--">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -388,11 +388,13 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Reg
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#shouldDispatch-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">RegionRemoteProcedureBase</a></code></span></div>
 <div class="block">Check whether we still need to make the call to RS.
  <p/>
- Usually this will not happen if we do not allow assigning a already onlined region. But if we
- have something wrong in the RSProcedureDispatcher, where we have already sent the request to
- RS, but then we tell the upper layer the remote call is failed due to rpc timeout or connection
- closed or anything else, then this issue can still happen. So here we add a check to make it
- more robust.</div>
+ This could happen when master restarts. Since we do not know whether a request has already been
+ sent to the region server after we add a remote operation to the dispatcher, so the safe way is
+ to not persist the dispatched field and try to add the remote operation again. But it is
+ possible that we do have already sent the request to region server and it has also sent back
+ the response, so here we need to check the region state, if it is not in the expecting state,
+ we should give up, otherwise we may hang for ever, as the region server will just ignore
+ redundant calls.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#shouldDispatch-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">shouldDispatch</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a></code></dd>


[19/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html
index 042bf4a..cb2cfdc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.Action.html
@@ -30,194 +30,226 @@
 <span class="sourceLineNo">022</span>import java.io.DataOutput;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.util.Arrays;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.Map;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.slf4j.Logger;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.slf4j.LoggerFactory;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.io.VersionedWritable;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>/**<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * Base permissions instance representing the ability to perform a given set<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * of actions.<a name="line.37"></a>
-<span class="sourceLineNo">038</span> *<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * @see TablePermission<a name="line.39"></a>
-<span class="sourceLineNo">040</span> */<a name="line.40"></a>
-<span class="sourceLineNo">041</span>@InterfaceAudience.Public<a name="line.41"></a>
-<span class="sourceLineNo">042</span>public class Permission extends VersionedWritable {<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  protected static final byte VERSION = 0;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>  @InterfaceAudience.Public<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  public enum Action {<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A');<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>    private final byte code;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    Action(char code) {<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      this.code = (byte)code;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    }<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>    public byte code() { return code; }<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  }<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private static final Logger LOG = LoggerFactory.getLogger(Permission.class);<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  protected static final Map&lt;Byte,Action&gt; ACTION_BY_CODE = Maps.newHashMap();<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  protected Action[] actions;<a name="line.60"></a>
+<span class="sourceLineNo">025</span>import java.util.EnumSet;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Map;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.slf4j.Logger;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.slf4j.LoggerFactory;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.io.VersionedWritable;<a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * Base permissions instance representing the ability to perform a given set<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * of actions.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * @see TablePermission<a name="line.40"></a>
+<span class="sourceLineNo">041</span> */<a name="line.41"></a>
+<span class="sourceLineNo">042</span>@InterfaceAudience.Public<a name="line.42"></a>
+<span class="sourceLineNo">043</span>public class Permission extends VersionedWritable {<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  protected static final byte VERSION = 0;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>  @InterfaceAudience.Public<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  public enum Action {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A');<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>    private final byte code;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    Action(char code) {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      this.code = (byte) code;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    }<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>    public byte code() { return code; }<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  }<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  @InterfaceAudience.Private<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  protected enum Scope {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    GLOBAL('G'), NAMESPACE('N'), TABLE('T'), EMPTY('E');<a name="line.60"></a>
 <span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  static {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    for (Action a : Action.values()) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      ACTION_BY_CODE.put(a.code(), a);<a name="line.64"></a>
+<span class="sourceLineNo">062</span>    private final byte code;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    Scope(char code) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      this.code = (byte) code;<a name="line.64"></a>
 <span class="sourceLineNo">065</span>    }<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  }<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  /** Empty constructor for Writable implementation.  &lt;b&gt;Do not use.&lt;/b&gt; */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public Permission() {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    super();<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public Permission(Action... assigned) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    if (assigned != null &amp;&amp; assigned.length &gt; 0) {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      actions = Arrays.copyOf(assigned, assigned.length);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public Permission(byte[] actionCodes) {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    if (actionCodes != null) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      Action acts[] = new Action[actionCodes.length];<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      int j = 0;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      for (int i=0; i&lt;actionCodes.length; i++) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>        byte b = actionCodes[i];<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        Action a = ACTION_BY_CODE.get(b);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        if (a == null) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>          LOG.error("Ignoring unknown action code '"+<a name="line.87"></a>
-<span class="sourceLineNo">088</span>              Bytes.toStringBinary(new byte[]{b})+"'");<a name="line.88"></a>
-<span class="sourceLineNo">089</span>          continue;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        }<a name="line.90"></a>
-<span class="sourceLineNo">091</span>        acts[j++] = a;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      this.actions = Arrays.copyOf(acts, j);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    }<a name="line.94"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>    public byte code() {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      return code;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private static final Logger LOG = LoggerFactory.getLogger(Permission.class);<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  protected static final Map&lt;Byte, Action&gt; ACTION_BY_CODE;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  protected static final Map&lt;Byte, Scope&gt; SCOPE_BY_CODE;<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  protected EnumSet&lt;Action&gt; actions = EnumSet.noneOf(Action.class);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  protected Scope scope = Scope.EMPTY;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  static {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    ACTION_BY_CODE = ImmutableMap.of(<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      Action.READ.code, Action.READ,<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      Action.WRITE.code, Action.WRITE,<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      Action.EXEC.code, Action.EXEC,<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      Action.CREATE.code, Action.CREATE,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      Action.ADMIN.code, Action.ADMIN<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    );<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>    SCOPE_BY_CODE = ImmutableMap.of(<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      Scope.GLOBAL.code, Scope.GLOBAL,<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      Scope.NAMESPACE.code, Scope.NAMESPACE,<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      Scope.TABLE.code, Scope.TABLE,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      Scope.EMPTY.code, Scope.EMPTY<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    );<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  }<a name="line.95"></a>
 <span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public Action[] getActions() {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    return actions;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public boolean implies(Action action) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    if (this.actions != null) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      for (Action a : this.actions) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        if (a == action) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>          return true;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    }<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>    return false;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public void setActions(Action[] assigned) {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    if (assigned != null &amp;&amp; assigned.length &gt; 0) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      actions = Arrays.copyOf(assigned, assigned.length);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public boolean equals(Object obj) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    if (!(obj instanceof Permission)) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      return false;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    Permission other = (Permission)obj;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    // check actions<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    if (actions == null &amp;&amp; other.getActions() == null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      return true;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    } else if (actions != null &amp;&amp; other.getActions() != null) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      Action[] otherActions = other.getActions();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      if (actions.length != otherActions.length) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        return false;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>      outer:<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      for (Action a : actions) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        for (Action oa : otherActions) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>          if (a == oa) continue outer;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        return false;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      return true;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">097</span>  /** Empty constructor for Writable implementation.  &lt;b&gt;Do not use.&lt;/b&gt; */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public Permission() {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    super();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public Permission(Action... assigned) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (assigned != null &amp;&amp; assigned.length &gt; 0) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      actions.addAll(Arrays.asList(assigned));<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public Permission(byte[] actionCodes) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    if (actionCodes != null) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      for (byte code : actionCodes) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        Action action = ACTION_BY_CODE.get(code);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        if (action == null) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          LOG.error("Ignoring unknown action code '" +<a name="line.113"></a>
+<span class="sourceLineNo">114</span>            Bytes.toStringBinary(new byte[] { code }) + "'");<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          continue;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        actions.add(action);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  public Action[] getActions() {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    return actions.toArray(new Action[actions.size()]);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>  /**<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * check if given action is granted<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param action action to be checked<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @return true if granted, false otherwise<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public boolean implies(Action action) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    return actions.contains(action);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  public void setActions(Action[] assigned) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    if (assigned != null &amp;&amp; assigned.length &gt; 0) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      // setActions should cover the previous actions,<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      // so we call clear here.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      actions.clear();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      actions.addAll(Arrays.asList(assigned));<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
 <span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return false;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @Override<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public int hashCode() {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    final int prime = 37;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    int result = 23;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    for (Action a : actions) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      result = prime * result + a.code();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    return result;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  }<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>  @Override<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  public String toString() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    StringBuilder str = new StringBuilder("[Permission: ")<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        .append("actions=");<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    if (actions != null) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      for (int i=0; i&lt;actions.length; i++) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        if (i &gt; 0)<a name="line.163"></a>
-<span class="sourceLineNo">164</span>          str.append(",");<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        if (actions[i] != null)<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          str.append(actions[i].toString());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        else<a name="line.167"></a>
-<span class="sourceLineNo">168</span>          str.append("NULL");<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    str.append("]");<a name="line.171"></a>
+<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * Check if two permission equals regardless of actions. It is useful when<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * merging a new permission with an existed permission which needs to check two permissions's<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * fields.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * @param obj instance<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @return true if equals, false otherwise<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public boolean equalsExceptActions(Object obj) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    return obj instanceof Permission;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  @Override<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public boolean equals(Object obj) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    if (!(obj instanceof Permission)) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return false;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span><a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Permission other = (Permission) obj;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    if (actions.isEmpty() &amp;&amp; other.actions.isEmpty()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      return true;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    } else if (!actions.isEmpty() &amp;&amp; !other.actions.isEmpty()) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      if (actions.size() != other.actions.size()) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        return false;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return actions.containsAll(other.actions);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    return false;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
 <span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    return str.toString();<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  /** @return the object version number */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  @Override<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  public byte getVersion() {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    return VERSION;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>  @Override<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public void readFields(DataInput in) throws IOException {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    super.readFields(in);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    int length = (int)in.readByte();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    if (length &gt; 0) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      actions = new Action[length];<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      for (int i = 0; i &lt; length; i++) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        byte b = in.readByte();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        Action a = ACTION_BY_CODE.get(b);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (a == null) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          throw new IOException("Unknown action code '"+<a name="line.192"></a>
-<span class="sourceLineNo">193</span>              Bytes.toStringBinary(new byte[]{b})+"' in input");<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        this.actions[i] = a;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    } else {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      actions = new Action[0];<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  @Override<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  public void write(DataOutput out) throws IOException {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    super.write(out);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    out.writeByte(actions != null ? actions.length : 0);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (actions != null) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      for (Action a: actions) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        out.writeByte(a.code());<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>}<a name="line.212"></a>
+<span class="sourceLineNo">173</span>  @Override<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public int hashCode() {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    final int prime = 37;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    int result = 23;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    for (Action a : actions) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      result = prime * result + a.code();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    result = prime * result + scope.code();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    return result;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Override<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public String toString() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    return "[Permission: " + rawExpression() + "]";<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  protected String rawExpression() {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    StringBuilder raw = new StringBuilder("actions=");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    if (actions != null) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      int i = 0;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      for (Action action : actions) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        if (i &gt; 0) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          raw.append(",");<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        raw.append(action != null ? action.toString() : "NULL");<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        i++;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    return raw.toString();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /** @return the object version number */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  @Override<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  public byte getVersion() {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    return VERSION;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  @Override<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  public void readFields(DataInput in) throws IOException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    super.readFields(in);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    int length = (int) in.readByte();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    actions = EnumSet.noneOf(Action.class);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    if (length &gt; 0) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      for (int i = 0; i &lt; length; i++) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        byte b = in.readByte();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        Action action = ACTION_BY_CODE.get(b);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        if (action == null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>          throw new IOException("Unknown action code '" +<a name="line.220"></a>
+<span class="sourceLineNo">221</span>            Bytes.toStringBinary(new byte[] { b }) + "' in input");<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        }<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        actions.add(action);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    scope = SCOPE_BY_CODE.get(in.readByte());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>  @Override<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  public void write(DataOutput out) throws IOException {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    super.write(out);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    out.writeByte(actions != null ? actions.size() : 0);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    if (actions != null) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      for (Action a: actions) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        out.writeByte(a.code());<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    out.writeByte(scope.code());<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  public Scope getAccessScope() {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return scope;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>}<a name="line.244"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.Scope.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.Scope.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.Scope.html
new file mode 100644
index 0000000..cb2cfdc
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.Scope.html
@@ -0,0 +1,316 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span><a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.DataInput;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.DataOutput;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Arrays;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.EnumSet;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Map;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.slf4j.Logger;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.slf4j.LoggerFactory;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.io.VersionedWritable;<a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * Base permissions instance representing the ability to perform a given set<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * of actions.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * @see TablePermission<a name="line.40"></a>
+<span class="sourceLineNo">041</span> */<a name="line.41"></a>
+<span class="sourceLineNo">042</span>@InterfaceAudience.Public<a name="line.42"></a>
+<span class="sourceLineNo">043</span>public class Permission extends VersionedWritable {<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  protected static final byte VERSION = 0;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>  @InterfaceAudience.Public<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  public enum Action {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A');<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>    private final byte code;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    Action(char code) {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      this.code = (byte) code;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    }<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>    public byte code() { return code; }<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  }<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  @InterfaceAudience.Private<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  protected enum Scope {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    GLOBAL('G'), NAMESPACE('N'), TABLE('T'), EMPTY('E');<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>    private final byte code;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    Scope(char code) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      this.code = (byte) code;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    }<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>    public byte code() {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      return code;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private static final Logger LOG = LoggerFactory.getLogger(Permission.class);<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  protected static final Map&lt;Byte, Action&gt; ACTION_BY_CODE;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  protected static final Map&lt;Byte, Scope&gt; SCOPE_BY_CODE;<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  protected EnumSet&lt;Action&gt; actions = EnumSet.noneOf(Action.class);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  protected Scope scope = Scope.EMPTY;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  static {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    ACTION_BY_CODE = ImmutableMap.of(<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      Action.READ.code, Action.READ,<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      Action.WRITE.code, Action.WRITE,<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      Action.EXEC.code, Action.EXEC,<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      Action.CREATE.code, Action.CREATE,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      Action.ADMIN.code, Action.ADMIN<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    );<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>    SCOPE_BY_CODE = ImmutableMap.of(<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      Scope.GLOBAL.code, Scope.GLOBAL,<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      Scope.NAMESPACE.code, Scope.NAMESPACE,<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      Scope.TABLE.code, Scope.TABLE,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      Scope.EMPTY.code, Scope.EMPTY<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    );<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  /** Empty constructor for Writable implementation.  &lt;b&gt;Do not use.&lt;/b&gt; */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public Permission() {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    super();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public Permission(Action... assigned) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (assigned != null &amp;&amp; assigned.length &gt; 0) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      actions.addAll(Arrays.asList(assigned));<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public Permission(byte[] actionCodes) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    if (actionCodes != null) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      for (byte code : actionCodes) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        Action action = ACTION_BY_CODE.get(code);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        if (action == null) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          LOG.error("Ignoring unknown action code '" +<a name="line.113"></a>
+<span class="sourceLineNo">114</span>            Bytes.toStringBinary(new byte[] { code }) + "'");<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          continue;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        actions.add(action);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  public Action[] getActions() {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    return actions.toArray(new Action[actions.size()]);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>  /**<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * check if given action is granted<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param action action to be checked<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @return true if granted, false otherwise<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public boolean implies(Action action) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    return actions.contains(action);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  public void setActions(Action[] assigned) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    if (assigned != null &amp;&amp; assigned.length &gt; 0) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      // setActions should cover the previous actions,<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      // so we call clear here.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      actions.clear();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      actions.addAll(Arrays.asList(assigned));<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * Check if two permission equals regardless of actions. It is useful when<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * merging a new permission with an existed permission which needs to check two permissions's<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * fields.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * @param obj instance<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @return true if equals, false otherwise<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public boolean equalsExceptActions(Object obj) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    return obj instanceof Permission;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  @Override<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public boolean equals(Object obj) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    if (!(obj instanceof Permission)) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return false;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span><a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Permission other = (Permission) obj;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    if (actions.isEmpty() &amp;&amp; other.actions.isEmpty()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      return true;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    } else if (!actions.isEmpty() &amp;&amp; !other.actions.isEmpty()) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      if (actions.size() != other.actions.size()) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        return false;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return actions.containsAll(other.actions);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    return false;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  @Override<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public int hashCode() {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    final int prime = 37;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    int result = 23;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    for (Action a : actions) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      result = prime * result + a.code();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    result = prime * result + scope.code();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    return result;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Override<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public String toString() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    return "[Permission: " + rawExpression() + "]";<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  protected String rawExpression() {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    StringBuilder raw = new StringBuilder("actions=");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    if (actions != null) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      int i = 0;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      for (Action action : actions) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        if (i &gt; 0) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          raw.append(",");<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        raw.append(action != null ? action.toString() : "NULL");<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        i++;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    return raw.toString();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /** @return the object version number */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  @Override<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  public byte getVersion() {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    return VERSION;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  @Override<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  public void readFields(DataInput in) throws IOException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    super.readFields(in);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    int length = (int) in.readByte();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    actions = EnumSet.noneOf(Action.class);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    if (length &gt; 0) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      for (int i = 0; i &lt; length; i++) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        byte b = in.readByte();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        Action action = ACTION_BY_CODE.get(b);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        if (action == null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>          throw new IOException("Unknown action code '" +<a name="line.220"></a>
+<span class="sourceLineNo">221</span>            Bytes.toStringBinary(new byte[] { b }) + "' in input");<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        }<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        actions.add(action);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    scope = SCOPE_BY_CODE.get(in.readByte());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>  @Override<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  public void write(DataOutput out) throws IOException {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    super.write(out);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    out.writeByte(actions != null ? actions.size() : 0);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    if (actions != null) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      for (Action a: actions) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        out.writeByte(a.code());<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    out.writeByte(scope.code());<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  public Scope getAccessScope() {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return scope;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>}<a name="line.244"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[22/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessController.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessController.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessController.html
index 25b7848..5c428b5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessController.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/AccessController.html
@@ -245,20 +245,20 @@
 <span class="sourceLineNo">237</span>    return regionEnv != null ? regionEnv.getRegion() : null;<a name="line.237"></a>
 <span class="sourceLineNo">238</span>  }<a name="line.238"></a>
 <span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  public TableAuthManager getAuthManager() {<a name="line.240"></a>
+<span class="sourceLineNo">240</span>  public AuthManager getAuthManager() {<a name="line.240"></a>
 <span class="sourceLineNo">241</span>    return accessChecker.getAuthManager();<a name="line.241"></a>
 <span class="sourceLineNo">242</span>  }<a name="line.242"></a>
 <span class="sourceLineNo">243</span><a name="line.243"></a>
 <span class="sourceLineNo">244</span>  private void initialize(RegionCoprocessorEnvironment e) throws IOException {<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    final Region region = e.getRegion();<a name="line.245"></a>
 <span class="sourceLineNo">246</span>    Configuration conf = e.getConfiguration();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    Map&lt;byte[], ListMultimap&lt;String, TablePermission&gt;&gt; tables = AccessControlLists.loadAll(region);<a name="line.247"></a>
+<span class="sourceLineNo">247</span>    Map&lt;byte[], ListMultimap&lt;String, UserPermission&gt;&gt; tables = AccessControlLists.loadAll(region);<a name="line.247"></a>
 <span class="sourceLineNo">248</span>    // For each table, write out the table's permissions to the respective<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    // znode for that table.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    for (Map.Entry&lt;byte[], ListMultimap&lt;String,TablePermission&gt;&gt; t:<a name="line.250"></a>
+<span class="sourceLineNo">250</span>    for (Map.Entry&lt;byte[], ListMultimap&lt;String, UserPermission&gt;&gt; t:<a name="line.250"></a>
 <span class="sourceLineNo">251</span>      tables.entrySet()) {<a name="line.251"></a>
 <span class="sourceLineNo">252</span>      byte[] entry = t.getKey();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      ListMultimap&lt;String,TablePermission&gt; perms = t.getValue();<a name="line.253"></a>
+<span class="sourceLineNo">253</span>      ListMultimap&lt;String, UserPermission&gt; perms = t.getValue();<a name="line.253"></a>
 <span class="sourceLineNo">254</span>      byte[] serialized = AccessControlLists.writePermissionsAsBytes(perms, conf);<a name="line.254"></a>
 <span class="sourceLineNo">255</span>      getAuthManager().getZKPermissionWatcher().writeToZookeeper(entry, serialized);<a name="line.255"></a>
 <span class="sourceLineNo">256</span>    }<a name="line.256"></a>
@@ -294,7 +294,7 @@
 <span class="sourceLineNo">286</span>    try (Table t = e.getConnection().getTable(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.286"></a>
 <span class="sourceLineNo">287</span>      for (byte[] entry : entries) {<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        currentEntry = entry;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        ListMultimap&lt;String, TablePermission&gt; perms =<a name="line.289"></a>
+<span class="sourceLineNo">289</span>        ListMultimap&lt;String, UserPermission&gt; perms =<a name="line.289"></a>
 <span class="sourceLineNo">290</span>            AccessControlLists.getPermissions(conf, entry, t, null, null, null, false);<a name="line.290"></a>
 <span class="sourceLineNo">291</span>        byte[] serialized = AccessControlLists.writePermissionsAsBytes(perms, conf);<a name="line.291"></a>
 <span class="sourceLineNo">292</span>        zkw.writeToZookeeper(entry, serialized);<a name="line.292"></a>
@@ -338,7 +338,7 @@
 <span class="sourceLineNo">330</span>    }<a name="line.330"></a>
 <span class="sourceLineNo">331</span><a name="line.331"></a>
 <span class="sourceLineNo">332</span>    // 2. check for the table-level, if successful we can short-circuit<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    if (getAuthManager().authorize(user, tableName, (byte[])null, permRequest)) {<a name="line.333"></a>
+<span class="sourceLineNo">333</span>    if (getAuthManager().authorizeUserTable(user, tableName, permRequest)) {<a name="line.333"></a>
 <span class="sourceLineNo">334</span>      return AuthResult.allow(request, "Table permission granted", user,<a name="line.334"></a>
 <span class="sourceLineNo">335</span>        permRequest, tableName, families);<a name="line.335"></a>
 <span class="sourceLineNo">336</span>    }<a name="line.336"></a>
@@ -348,7 +348,7 @@
 <span class="sourceLineNo">340</span>      // all families must pass<a name="line.340"></a>
 <span class="sourceLineNo">341</span>      for (Map.Entry&lt;byte [], ? extends Collection&lt;?&gt;&gt; family : families.entrySet()) {<a name="line.341"></a>
 <span class="sourceLineNo">342</span>        // a) check for family level access<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        if (getAuthManager().authorize(user, tableName, family.getKey(),<a name="line.343"></a>
+<span class="sourceLineNo">343</span>        if (getAuthManager().authorizeUserTable(user, tableName, family.getKey(),<a name="line.343"></a>
 <span class="sourceLineNo">344</span>            permRequest)) {<a name="line.344"></a>
 <span class="sourceLineNo">345</span>          continue;  // family-level permission overrides per-qualifier<a name="line.345"></a>
 <span class="sourceLineNo">346</span>        }<a name="line.346"></a>
@@ -359,17 +359,17 @@
 <span class="sourceLineNo">351</span>            // for each qualifier of the family<a name="line.351"></a>
 <span class="sourceLineNo">352</span>            Set&lt;byte[]&gt; familySet = (Set&lt;byte[]&gt;)family.getValue();<a name="line.352"></a>
 <span class="sourceLineNo">353</span>            for (byte[] qualifier : familySet) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>              if (!getAuthManager().authorize(user, tableName, family.getKey(),<a name="line.354"></a>
-<span class="sourceLineNo">355</span>                                         qualifier, permRequest)) {<a name="line.355"></a>
+<span class="sourceLineNo">354</span>              if (!getAuthManager().authorizeUserTable(user, tableName,<a name="line.354"></a>
+<span class="sourceLineNo">355</span>                    family.getKey(), qualifier, permRequest)) {<a name="line.355"></a>
 <span class="sourceLineNo">356</span>                return AuthResult.deny(request, "Failed qualifier check", user,<a name="line.356"></a>
-<span class="sourceLineNo">357</span>                    permRequest, tableName, makeFamilyMap(family.getKey(), qualifier));<a name="line.357"></a>
+<span class="sourceLineNo">357</span>                  permRequest, tableName, makeFamilyMap(family.getKey(), qualifier));<a name="line.357"></a>
 <span class="sourceLineNo">358</span>              }<a name="line.358"></a>
 <span class="sourceLineNo">359</span>            }<a name="line.359"></a>
 <span class="sourceLineNo">360</span>          } else if (family.getValue() instanceof List) { // List&lt;Cell&gt;<a name="line.360"></a>
 <span class="sourceLineNo">361</span>            List&lt;Cell&gt; cellList = (List&lt;Cell&gt;)family.getValue();<a name="line.361"></a>
 <span class="sourceLineNo">362</span>            for (Cell cell : cellList) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>              if (!getAuthManager().authorize(user, tableName, family.getKey(),<a name="line.363"></a>
-<span class="sourceLineNo">364</span>                CellUtil.cloneQualifier(cell), permRequest)) {<a name="line.364"></a>
+<span class="sourceLineNo">363</span>              if (!getAuthManager().authorizeUserTable(user, tableName, family.getKey(),<a name="line.363"></a>
+<span class="sourceLineNo">364</span>                  CellUtil.cloneQualifier(cell), permRequest)) {<a name="line.364"></a>
 <span class="sourceLineNo">365</span>                return AuthResult.deny(request, "Failed qualifier check", user, permRequest,<a name="line.365"></a>
 <span class="sourceLineNo">366</span>                  tableName, makeFamilyMap(family.getKey(), CellUtil.cloneQualifier(cell)));<a name="line.366"></a>
 <span class="sourceLineNo">367</span>              }<a name="line.367"></a>
@@ -378,7 +378,7 @@
 <span class="sourceLineNo">370</span>        } else {<a name="line.370"></a>
 <span class="sourceLineNo">371</span>          // no qualifiers and family-level check already failed<a name="line.371"></a>
 <span class="sourceLineNo">372</span>          return AuthResult.deny(request, "Failed family check", user, permRequest,<a name="line.372"></a>
-<span class="sourceLineNo">373</span>              tableName, makeFamilyMap(family.getKey(), null));<a name="line.373"></a>
+<span class="sourceLineNo">373</span>            tableName, makeFamilyMap(family.getKey(), null));<a name="line.373"></a>
 <span class="sourceLineNo">374</span>        }<a name="line.374"></a>
 <span class="sourceLineNo">375</span>      }<a name="line.375"></a>
 <span class="sourceLineNo">376</span><a name="line.376"></a>
@@ -495,2153 +495,2161 @@
 <span class="sourceLineNo">487</span>          familyMap.entrySet()) {<a name="line.487"></a>
 <span class="sourceLineNo">488</span>        if (family.getValue() != null &amp;&amp; !family.getValue().isEmpty()) {<a name="line.488"></a>
 <span class="sourceLineNo">489</span>          for (byte[] qualifier : family.getValue()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            if (getAuthManager().matchPermission(user, tableName,<a name="line.490"></a>
-<span class="sourceLineNo">491</span>                family.getKey(), qualifier, perm)) {<a name="line.491"></a>
+<span class="sourceLineNo">490</span>            if (getAuthManager().authorizeUserTable(user, tableName,<a name="line.490"></a>
+<span class="sourceLineNo">491</span>                  family.getKey(), qualifier, perm)) {<a name="line.491"></a>
 <span class="sourceLineNo">492</span>              return true;<a name="line.492"></a>
 <span class="sourceLineNo">493</span>            }<a name="line.493"></a>
 <span class="sourceLineNo">494</span>          }<a name="line.494"></a>
 <span class="sourceLineNo">495</span>        } else {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          if (getAuthManager().matchPermission(user, tableName, family.getKey(),<a name="line.496"></a>
-<span class="sourceLineNo">497</span>              perm)) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>            return true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          }<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      }<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    } else if (LOG.isDebugEnabled()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      LOG.debug("Empty family map passed for permission check");<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>    return false;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>  private enum OpType {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    GET("get"),<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    EXISTS("exists"),<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    SCAN("scan"),<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    PUT("put"),<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    DELETE("delete"),<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    CHECK_AND_PUT("checkAndPut"),<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    CHECK_AND_DELETE("checkAndDelete"),<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    INCREMENT_COLUMN_VALUE("incrementColumnValue"),<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    APPEND("append"),<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    INCREMENT("increment");<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>    private String type;<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    private OpType(String type) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      this.type = type;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span>    @Override<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    public String toString() {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return type;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>  /**<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * Determine if cell ACLs covered by the operation grant access. This is expensive.<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   * @return false if cell ACLs failed to grant access, true otherwise<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   * @throws IOException<a name="line.536"></a>
-<span class="sourceLineNo">537</span>   */<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  private boolean checkCoveringPermission(User user, OpType request, RegionCoprocessorEnvironment e,<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      byte[] row, Map&lt;byte[], ? extends Collection&lt;?&gt;&gt; familyMap, long opTs, Action... actions)<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      throws IOException {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    if (!cellFeaturesEnabled) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      return false;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    long cellGrants = 0;<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    long latestCellTs = 0;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    Get get = new Get(row);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    // Only in case of Put/Delete op, consider TS within cell (if set for individual cells).<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // When every cell, within a Mutation, can be linked with diff TS we can not rely on only one<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // version. We have to get every cell version and check its TS against the TS asked for in<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    // Mutation and skip those Cells which is outside this Mutation TS.In case of Put, we have to<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    // consider only one such passing cell. In case of Delete we have to consider all the cell<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    // versions under this passing version. When Delete Mutation contains columns which are a<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // version delete just consider only one version for those column cells.<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    boolean considerCellTs  = (request == OpType.PUT || request == OpType.DELETE);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    if (considerCellTs) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      get.setMaxVersions();<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    } else {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      get.setMaxVersions(1);<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    }<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    boolean diffCellTsFromOpTs = false;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    for (Map.Entry&lt;byte[], ? extends Collection&lt;?&gt;&gt; entry: familyMap.entrySet()) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      byte[] col = entry.getKey();<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      // TODO: HBASE-7114 could possibly unify the collection type in family<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      // maps so we would not need to do this<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      if (entry.getValue() instanceof Set) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>        Set&lt;byte[]&gt; set = (Set&lt;byte[]&gt;)entry.getValue();<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        if (set == null || set.isEmpty()) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          get.addFamily(col);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        } else {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>          for (byte[] qual: set) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>            get.addColumn(col, qual);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>          }<a name="line.572"></a>
-<span class="sourceLineNo">573</span>        }<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      } else if (entry.getValue() instanceof List) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        List&lt;Cell&gt; list = (List&lt;Cell&gt;)entry.getValue();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>        if (list == null || list.isEmpty()) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          get.addFamily(col);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        } else {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          // In case of family delete, a Cell will be added into the list with Qualifier as null.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          for (Cell cell : list) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            if (cell.getQualifierLength() == 0<a name="line.581"></a>
-<span class="sourceLineNo">582</span>                &amp;&amp; (cell.getTypeByte() == Type.DeleteFamily.getCode()<a name="line.582"></a>
-<span class="sourceLineNo">583</span>                || cell.getTypeByte() == Type.DeleteFamilyVersion.getCode())) {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>              get.addFamily(col);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>            } else {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              get.addColumn(col, CellUtil.cloneQualifier(cell));<a name="line.586"></a>
-<span class="sourceLineNo">587</span>            }<a name="line.587"></a>
-<span class="sourceLineNo">588</span>            if (considerCellTs) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>              long cellTs = cell.getTimestamp();<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              latestCellTs = Math.max(latestCellTs, cellTs);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>              diffCellTsFromOpTs = diffCellTsFromOpTs || (opTs != cellTs);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            }<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          }<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        }<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      } else if (entry.getValue() == null) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        get.addFamily(col);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      } else {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        throw new RuntimeException("Unhandled collection type " +<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          entry.getValue().getClass().getName());<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      }<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    // We want to avoid looking into the future. So, if the cells of the<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    // operation specify a timestamp, or the operation itself specifies a<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    // timestamp, then we use the maximum ts found. Otherwise, we bound<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    // the Get to the current server time. We add 1 to the timerange since<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    // the upper bound of a timerange is exclusive yet we need to examine<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    // any cells found there inclusively.<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    long latestTs = Math.max(opTs, latestCellTs);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    if (latestTs == 0 || latestTs == HConstants.LATEST_TIMESTAMP) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      latestTs = EnvironmentEdgeManager.currentTime();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    get.setTimeRange(0, latestTs + 1);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    // In case of Put operation we set to read all versions. This was done to consider the case<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    // where columns are added with TS other than the Mutation TS. But normally this wont be the<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    // case with Put. There no need to get all versions but get latest version only.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    if (!diffCellTsFromOpTs &amp;&amp; request == OpType.PUT) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      get.setMaxVersions(1);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    }<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (LOG.isTraceEnabled()) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      LOG.trace("Scanning for cells with " + get);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    // This Map is identical to familyMap. The key is a BR rather than byte[].<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    // It will be easy to do gets over this new Map as we can create get keys over the Cell cf by<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    // new SimpleByteRange(cell.familyArray, cell.familyOffset, cell.familyLen)<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    Map&lt;ByteRange, List&lt;Cell&gt;&gt; familyMap1 = new HashMap&lt;&gt;();<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    for (Entry&lt;byte[], ? extends Collection&lt;?&gt;&gt; entry : familyMap.entrySet()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      if (entry.getValue() instanceof List) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        familyMap1.put(new SimpleMutableByteRange(entry.getKey()), (List&lt;Cell&gt;) entry.getValue());<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    }<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    RegionScanner scanner = getRegion(e).getScanner(new Scan(get));<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    List&lt;Cell&gt; cells = Lists.newArrayList();<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    Cell prevCell = null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    ByteRange curFam = new SimpleMutableByteRange();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    boolean curColAllVersions = (request == OpType.DELETE);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    long curColCheckTs = opTs;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    boolean foundColumn = false;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    try {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      boolean more = false;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      ScannerContext scannerContext = ScannerContext.newBuilder().setBatchLimit(1).build();<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>      do {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        cells.clear();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        // scan with limit as 1 to hold down memory use on wide rows<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        more = scanner.next(cells, scannerContext);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        for (Cell cell: cells) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          if (LOG.isTraceEnabled()) {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>            LOG.trace("Found cell " + cell);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          }<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          boolean colChange = prevCell == null || !CellUtil.matchingColumn(prevCell, cell);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          if (colChange) foundColumn = false;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          prevCell = cell;<a name="line.652"></a>
-<span class="sourceLineNo">653</span>          if (!curColAllVersions &amp;&amp; foundColumn) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>            continue;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>          }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          if (colChange &amp;&amp; considerCellTs) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>            curFam.set(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());<a name="line.657"></a>
-<span class="sourceLineNo">658</span>            List&lt;Cell&gt; cols = familyMap1.get(curFam);<a name="line.658"></a>
-<span class="sourceLineNo">659</span>            for (Cell col : cols) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>              // null/empty qualifier is used to denote a Family delete. The TS and delete type<a name="line.660"></a>
-<span class="sourceLineNo">661</span>              // associated with this is applicable for all columns within the family. That is<a name="line.661"></a>
-<span class="sourceLineNo">662</span>              // why the below (col.getQualifierLength() == 0) check.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>              if ((col.getQualifierLength() == 0 &amp;&amp; request == OpType.DELETE)<a name="line.663"></a>
-<span class="sourceLineNo">664</span>                  || CellUtil.matchingQualifier(cell, col)) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>                byte type = col.getTypeByte();<a name="line.665"></a>
-<span class="sourceLineNo">666</span>                if (considerCellTs) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>                  curColCheckTs = col.getTimestamp();<a name="line.667"></a>
-<span class="sourceLineNo">668</span>                }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>                // For a Delete op we pass allVersions as true. When a Delete Mutation contains<a name="line.669"></a>
-<span class="sourceLineNo">670</span>                // a version delete for a column no need to check all the covering cells within<a name="line.670"></a>
-<span class="sourceLineNo">671</span>                // that column. Check all versions when Type is DeleteColumn or DeleteFamily<a name="line.671"></a>
-<span class="sourceLineNo">672</span>                // One version delete types are Delete/DeleteFamilyVersion<a name="line.672"></a>
-<span class="sourceLineNo">673</span>                curColAllVersions = (KeyValue.Type.DeleteColumn.getCode() == type)<a name="line.673"></a>
-<span class="sourceLineNo">674</span>                    || (KeyValue.Type.DeleteFamily.getCode() == type);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>                break;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>              }<a name="line.676"></a>
-<span class="sourceLineNo">677</span>            }<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          }<a name="line.678"></a>
-<span class="sourceLineNo">679</span>          if (cell.getTimestamp() &gt; curColCheckTs) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>            // Just ignore this cell. This is not a covering cell.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            continue;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          }<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          foundColumn = true;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          for (Action action: actions) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            // Are there permissions for this user for the cell?<a name="line.685"></a>
-<span class="sourceLineNo">686</span>            if (!getAuthManager().authorize(user, getTableName(e), cell, action)) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>              // We can stop if the cell ACL denies access<a name="line.687"></a>
-<span class="sourceLineNo">688</span>              return false;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            }<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          }<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          cellGrants++;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>        }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      } while (more);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    } catch (AccessDeniedException ex) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      throw ex;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    } catch (IOException ex) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      LOG.error("Exception while getting cells to calculate covering permission", ex);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    } finally {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      scanner.close();<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    // We should not authorize unless we have found one or more cell ACLs that<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    // grant access. This code is used to check for additional permissions<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    // after no table or CF grants are found.<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    return cellGrants &gt; 0;<a name="line.704"></a>
-<span class="sourceLineNo">705</span>  }<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>  private static void addCellPermissions(final byte[] perms, Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    // Iterate over the entries in the familyMap, replacing the cells therein<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    // with new cells including the ACL data<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    for (Map.Entry&lt;byte[], List&lt;Cell&gt;&gt; e: familyMap.entrySet()) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      List&lt;Cell&gt; newCells = Lists.newArrayList();<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      for (Cell cell: e.getValue()) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        // Prepend the supplied perms in a new ACL tag to an update list of tags for the cell<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        List&lt;Tag&gt; tags = new ArrayList&lt;&gt;();<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        tags.add(new ArrayBackedTag(AccessControlLists.ACL_TAG_TYPE, perms));<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        Iterator&lt;Tag&gt; tagIterator = PrivateCellUtil.tagsIterator(cell);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        while (tagIterator.hasNext()) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          tags.add(tagIterator.next());<a name="line.718"></a>
-<span class="sourceLineNo">719</span>        }<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        newCells.add(PrivateCellUtil.createCell(cell, tags));<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      // This is supposed to be safe, won't CME<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      e.setValue(newCells);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
-<span class="sourceLineNo">725</span>  }<a name="line.725"></a>
-<span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>  // Checks whether incoming cells contain any tag with type as ACL_TAG_TYPE. This tag<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  // type is reserved and should not be explicitly set by user.<a name="line.728"></a>
-<span class="sourceLineNo">729</span>  private void checkForReservedTagPresence(User user, Mutation m) throws IOException {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // No need to check if we're not going to throw<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    if (!authorizationEnabled) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      m.setAttribute(TAG_CHECK_PASSED, TRUE);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      return;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    }<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    // Superusers are allowed to store cells unconditionally.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    if (Superusers.isSuperUser(user)) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      m.setAttribute(TAG_CHECK_PASSED, TRUE);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      return;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    }<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    // We already checked (prePut vs preBatchMutation)<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    if (m.getAttribute(TAG_CHECK_PASSED) != null) {<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      return;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    }<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    for (CellScanner cellScanner = m.cellScanner(); cellScanner.advance();) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      Iterator&lt;Tag&gt; tagsItr = PrivateCellUtil.tagsIterator(cellScanner.current());<a name="line.745"></a>
-<span class="sourceLineNo">746</span>      while (tagsItr.hasNext()) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        if (tagsItr.next().getType() == AccessControlLists.ACL_TAG_TYPE) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          throw new AccessDeniedException("Mutation contains cell with reserved type tag");<a name="line.748"></a>
-<span class="sourceLineNo">749</span>        }<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      }<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    }<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    m.setAttribute(TAG_CHECK_PASSED, TRUE);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>  }<a name="line.753"></a>
-<span class="sourceLineNo">754</span><a name="line.754"></a>
-<span class="sourceLineNo">755</span>  /* ---- MasterObserver implementation ---- */<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  @Override<a name="line.756"></a>
-<span class="sourceLineNo">757</span>  public void start(CoprocessorEnvironment env) throws IOException {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    CompoundConfiguration conf = new CompoundConfiguration();<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    conf.add(env.getConfiguration());<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>    authorizationEnabled = AccessChecker.isAuthorizationSupported(conf);<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    if (!authorizationEnabled) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      LOG.warn("AccessController has been loaded with authorization checks DISABLED!");<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>    shouldCheckExecPermission = conf.getBoolean(AccessControlConstants.EXEC_PERMISSION_CHECKS_KEY,<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      AccessControlConstants.DEFAULT_EXEC_PERMISSION_CHECKS);<a name="line.767"></a>
-<span class="sourceLineNo">768</span><a name="line.768"></a>
-<span class="sourceLineNo">769</span>    cellFeaturesEnabled = (HFile.getFormatVersion(conf) &gt;= HFile.MIN_FORMAT_VERSION_WITH_TAGS);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    if (!cellFeaturesEnabled) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      LOG.info("A minimum HFile version of " + HFile.MIN_FORMAT_VERSION_WITH_TAGS<a name="line.771"></a>
-<span class="sourceLineNo">772</span>          + " is required to persist cell ACLs. Consider setting " + HFile.FORMAT_VERSION_KEY<a name="line.772"></a>
-<span class="sourceLineNo">773</span>          + " accordingly.");<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>    ZKWatcher zk = null;<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    if (env instanceof MasterCoprocessorEnvironment) {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      // if running on HMaster<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      MasterCoprocessorEnvironment mEnv = (MasterCoprocessorEnvironment)env;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      if (mEnv instanceof HasMasterServices) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        zk = ((HasMasterServices)mEnv).getMasterServices().getZooKeeper();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    } else if (env instanceof RegionServerCoprocessorEnvironment) {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      RegionServerCoprocessorEnvironment rsEnv = (RegionServerCoprocessorEnvironment)env;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>      if (rsEnv instanceof HasRegionServerServices) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>        zk = ((HasRegionServerServices)rsEnv).getRegionServerServices().getZooKeeper();<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    } else if (env instanceof RegionCoprocessorEnvironment) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      // if running at region<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      regionEnv = (RegionCoprocessorEnvironment) env;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      conf.addBytesMap(regionEnv.getRegion().getTableDescriptor().getValues());<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      compatibleEarlyTermination = conf.getBoolean(AccessControlConstants.CF_ATTRIBUTE_EARLY_OUT,<a name="line.792"></a>
-<span class="sourceLineNo">793</span>          AccessControlConstants.DEFAULT_ATTRIBUTE_EARLY_OUT);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      if (regionEnv instanceof HasRegionServerServices) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>        zk = ((HasRegionServerServices)regionEnv).getRegionServerServices().getZooKeeper();<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    }<a name="line.797"></a>
-<span class="sourceLineNo">798</span><a name="line.798"></a>
-<span class="sourceLineNo">799</span>    // set the user-provider.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    this.userProvider = UserProvider.instantiate(env.getConfiguration());<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    // Throws RuntimeException if fails to load TableAuthManager so that coprocessor is unloaded.<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    accessChecker = new AccessChecker(env.getConfiguration(), zk);<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    tableAcls = new MapMaker().weakValues().makeMap();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  }<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>  @Override<a name="line.806"></a>
-<span class="sourceLineNo">807</span>  public void stop(CoprocessorEnvironment env) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    accessChecker.stop();<a name="line.808"></a>
-<span class="sourceLineNo">809</span>  }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>  /*********************************** Observer/Service Getters ***********************************/<a name="line.811"></a>
-<span class="sourceLineNo">812</span>  @Override<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  public Optional&lt;RegionObserver&gt; getRegionObserver() {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    return Optional.of(this);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>  }<a name="line.815"></a>
-<span class="sourceLineNo">816</span><a name="line.816"></a>
-<span class="sourceLineNo">817</span>  @Override<a name="line.817"></a>
-<span class="sourceLineNo">818</span>  public Optional&lt;MasterObserver&gt; getMasterObserver() {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    return Optional.of(this);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  }<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>  @Override<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  public Optional&lt;EndpointObserver&gt; getEndpointObserver() {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    return Optional.of(this);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>  }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>  @Override<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  public Optional&lt;BulkLoadObserver&gt; getBulkLoadObserver() {<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    return Optional.of(this);<a name="line.829"></a>
-<span class="sourceLineNo">830</span>  }<a name="line.830"></a>
-<span class="sourceLineNo">831</span><a name="line.831"></a>
-<span class="sourceLineNo">832</span>  @Override<a name="line.832"></a>
-<span class="sourceLineNo">833</span>  public Optional&lt;RegionServerObserver&gt; getRegionServerObserver() {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    return Optional.of(this);<a name="line.834"></a>
-<span class="sourceLineNo">835</span>  }<a name="line.835"></a>
-<span class="sourceLineNo">836</span><a name="line.836"></a>
-<span class="sourceLineNo">837</span>  @Override<a name="line.837"></a>
-<span class="sourceLineNo">838</span>  public Iterable&lt;Service&gt; getServices() {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    return Collections.singleton(<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        AccessControlProtos.AccessControlService.newReflectiveService(this));<a name="line.840"></a>
-<span class="sourceLineNo">841</span>  }<a name="line.841"></a>
-<span class="sourceLineNo">842</span><a name="line.842"></a>
-<span class="sourceLineNo">843</span>  /*********************************** Observer implementations ***********************************/<a name="line.843"></a>
-<span class="sourceLineNo">844</span><a name="line.844"></a>
-<span class="sourceLineNo">845</span>  @Override<a name="line.845"></a>
-<span class="sourceLineNo">846</span>  public void preCreateTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c,<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      TableDescriptor desc, RegionInfo[] regions) throws IOException {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    Set&lt;byte[]&gt; families = desc.getColumnFamilyNames();<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    Map&lt;byte[], Set&lt;byte[]&gt;&gt; familyMap = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    for (byte[] family: families) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      familyMap.put(family, null);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    }<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    requireNamespacePermission(c, "createTable",<a name="line.853"></a>
-<span class="sourceLineNo">854</span>        desc.getTableName().getNamespaceAsString(), desc.getTableName(), familyMap, Action.CREATE);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>  @Override<a name="line.857"></a>
-<span class="sourceLineNo">858</span>  public void postCompletedCreateTableAction(<a name="line.858"></a>
-<span class="sourceLineNo">859</span>      final ObserverContext&lt;MasterCoprocessorEnvironment&gt; c,<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      final TableDescriptor desc,<a name="line.860"></a>
-<span class="sourceLineNo">861</span>      final RegionInfo[] regions) throws IOException {<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    // When AC is used, it should be configured as the 1st CP.<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    // In Master, the table operations like create, are handled by a Thread pool but the max size<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    // for this pool is 1. So if multiple CPs create tables on startup, these creations will happen<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    // sequentially only.<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    // Related code in HMaster#startServiceThreads<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    // {code}<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    //   // We depend on there being only one instance of this executor running<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    //   // at a time. To do concurrency, would need fencing of enable/disable of<a name="line.869"></a>
-<span class="sourceLineNo">870</span>    //   // tables.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    //   this.service.startExecutorService(ExecutorType.MASTER_TABLE_OPERATIONS, 1);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    // {code}<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    // In future if we change this pool to have more threads, then there is a chance for thread,<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    // creating acl table, getting delayed and by that time another table creation got over and<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    // this hook is getting called. In such a case, we will need a wait logic here which will<a name="line.875"></a>
-<span class="sourceLineNo">876</span>    // wait till the acl table is created.<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    if (AccessControlLists.isAclTable(desc)) {<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      this.aclTabAvailable = true;<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    } else if (!(TableName.NAMESPACE_TABLE_NAME.equals(desc.getTableName()))) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      if (!aclTabAvailable) {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>        LOG.warn("Not adding owner permission for table " + desc.getTableName() + ". "<a name="line.881"></a>
-<span class="sourceLineNo">882</span>            + AccessControlLists.ACL_TABLE_NAME + " is not yet created. "<a name="line.882"></a>
-<span class="sourceLineNo">883</span>            + getClass().getSimpleName() + " should be configured as the first Coprocessor");<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      } else {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>        String owner = desc.getOwnerString();<a name="line.885"></a>
-<span class="sourceLineNo">886</span>        // default the table owner to current user, if not specified.<a name="line.886"></a>
-<span class="sourceLineNo">887</span>        if (owner == null)<a name="line.887"></a>
-<span class="sourceLineNo">888</span>          owner = getActiveUser(c).getShortName();<a name="line.888"></a>
-<span class="sourceLineNo">889</span>        final UserPermission userperm = new UserPermission(Bytes.toBytes(owner),<a name="line.889"></a>
-<span class="sourceLineNo">890</span>            desc.getTableName(), null, Action.values());<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        // switch to the real hbase master user for doing the RPC on the ACL table<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        User.runAsLoginUser(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>          @Override<a name="line.893"></a>
-<span class="sourceLineNo">894</span>          public Void run() throws Exception {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>            try (Table table = c.getEnvironment().getConnection().<a name="line.895"></a>
-<span class="sourceLineNo">896</span>                getTable(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>              AccessControlLists.addUserPermission(c.getEnvironment().getConfiguration(),<a name="line.897"></a>
-<span class="sourceLineNo">898</span>                  userperm, table);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>            }<a name="line.899"></a>
-<span class="sourceLineNo">900</span>            return null;<a name="line.900"></a>
-<span class="sourceLineNo">901</span>          }<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        });<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    }<a name="line.904"></a>
-<span class="sourceLineNo">905</span>  }<a name="line.905"></a>
-<span class="sourceLineNo">906</span><a name="line.906"></a>
-<span class="sourceLineNo">907</span>  @Override<a name="line.907"></a>
-<span class="sourceLineNo">908</span>  public void preDeleteTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, TableName tableName)<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      throws IOException {<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    requirePermission(c, "deleteTable",<a name="line.910"></a>
-<span class="sourceLineNo">911</span>        tableName, null, null, Action.ADMIN, Action.CREATE);<a name="line.911"></a>
-<span class="sourceLineNo">912</span>  }<a name="line.912"></a>
-<span class="sourceLineNo">913</span><a name="line.913"></a>
-<span class="sourceLineNo">914</span>  @Override<a name="line.914"></a>
-<span class="sourceLineNo">915</span>  public void postDeleteTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c,<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      final TableName tableName) throws IOException {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    final Configuration conf = c.getEnvironment().getConfiguration();<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    User.runAsLoginUser(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      @Override<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      public Void run() throws Exception {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        try (Table table = c.getEnvironment().getConnection().<a name="line.921"></a>
-<span class="sourceLineNo">922</span>            getTable(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.922"></a>
-<span class="sourceLineNo">923</span>          AccessControlLists.removeTablePermissions(conf, tableName, table);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>        }<a name="line.924"></a>
-<span class="sourceLineNo">925</span>        return null;<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      }<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    });<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    getAuthManager().getZKPermissionWatcher().deleteTableACLNode(tableName);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
-<span class="sourceLineNo">930</span><a name="line.930"></a>
-<span class="sourceLineNo">931</span>  @Override<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  public void preTruncateTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c,<a name="line.932"></a>
-<span class="sourceLineNo">933</span>      final TableName tableName) throws IOException {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    requirePermission(c, "truncateTable",<a name="line.934"></a>
-<span class="sourceLineNo">935</span>        tableName, null, null, Action.ADMIN, Action.CREATE);<a name="line.935"></a>
-<span class="sourceLineNo">936</span><a name="line.936"></a>
-<span class="sourceLineNo">937</span>    final Configuration conf = c.getEnvironment().getConfiguration();<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    User.runAsLoginUser(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      @Override<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      public Void run() throws Exception {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>        List&lt;UserPermission&gt; acls =<a name="line.941"></a>
-<span class="sourceLineNo">942</span>            AccessControlLists.getUserTablePermissions(conf, tableName, null, null, null, false);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>        if (acls != null) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>          tableAcls.put(tableName, acls);<a name="line.944"></a>
-<span class="sourceLineNo">945</span>        }<a name="line.945"></a>
-<span class="sourceLineNo">946</span>        return null;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      }<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    });<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>  @Override<a name="line.951"></a>
-<span class="sourceLineNo">952</span>  public void postTruncateTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      final TableName tableName) throws IOException {<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    final Configuration conf = ctx.getEnvironment().getConfiguration();<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    User.runAsLoginUser(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      public Void run() throws Exception {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>        List&lt;UserPermission&gt; perms = tableAcls.get(tableName);<a name="line.958"></a>
-<span class="sourceLineNo">959</span>        if (perms != null) {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>          for (UserPermission perm : perms) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>            try (Table table = ctx.getEnvironment().getConnection().<a name="line.961"></a>
-<span class="sourceLineNo">962</span>                getTable(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.962"></a>
-<span class="sourceLineNo">963</span>              AccessControlLists.addUserPermission(conf, perm, table);<a name="line.963"></a>
-<span class="sourceLineNo">964</span>            }<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          }<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        }<a name="line.966"></a>
-<span class="sourceLineNo">967</span>        tableAcls.remove(tableName);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        return null;<a name="line.968"></a>
-<span class="sourceLineNo">969</span>      }<a name="line.969"></a>
-<span class="sourceLineNo">970</span>    });<a name="line.970"></a>
-<span class="sourceLineNo">971</span>  }<a name="line.971"></a>
-<span class="sourceLineNo">972</span><a name="line.972"></a>
-<span class="sourceLineNo">973</span>  @Override<a name="line.973"></a>
-<span class="sourceLineNo">974</span>  public void preModifyTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, TableName tableName,<a name="line.974"></a>
-<span class="sourceLineNo">975</span>      TableDescriptor currentDesc, TableDescriptor newDesc) throws IOException {<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    // TODO: potentially check if this is a add/modify/delete column operation<a name="line.976"></a>
-<span class="sourceLineNo">977</span>    requirePermission(c, "modifyTable",<a name="line.977"></a>
-<span class="sourceLineNo">978</span>        tableName, null, null, Action.ADMIN, Action.CREATE);<a name="line.978"></a>
-<span class="sourceLineNo">979</span>  }<a name="line.979"></a>
-<span class="sourceLineNo">980</span><a name="line.980"></a>
-<span class="sourceLineNo">981</span>  @Override<a name="line.981"></a>
-<span class="sourceLineNo">982</span>  public void postModifyTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, TableName tableName,<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    TableDescriptor oldDesc, TableDescriptor currentDesc) throws IOException {<a name="line.983"></a>
-<span class="sourceLineNo">984</span>    final Configuration conf = c.getEnvironment().getConfiguration();<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    // default the table owner to current user, if not specified.<a name="line.985"></a>
-<span class="sourceLineNo">986</span>    final String owner = (currentDesc.getOwnerString() != null) ? currentDesc.getOwnerString() :<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      getActiveUser(c).getShortName();<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    User.runAsLoginUser(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.988"></a>
-<span class="sourceLineNo">989</span>      @Override<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      public Void run() throws Exception {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>        UserPermission userperm = new UserPermission(Bytes.toBytes(owner),<a name="line.991"></a>
-<span class="sourceLineNo">992</span>            currentDesc.getTableName(), null, Action.values());<a name="line.992"></a>
-<span class="sourceLineNo">993</span>        try (Table table = c.getEnvironment().getConnection().<a name="line.993"></a>
-<span class="sourceLineNo">994</span>            getTable(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          AccessControlLists.addUserPermission(conf, userperm, table);<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>        return null;<a name="line.997"></a>
-<span class="sourceLineNo">998</span>      }<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    });<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>  }<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span><a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  @Override<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>  public void preEnableTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, TableName tableName)<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      throws IOException {<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    requirePermission(c, "enableTable",<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>        tableName, null, null, Action.ADMIN, Action.CREATE);<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>  }<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span><a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>  @Override<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>  public void preDisableTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, TableName tableName)<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      throws IOException {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>    if (Bytes.equals(tableName.getName(), AccessControlLists.ACL_GLOBAL_NAME)) {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      // We have to unconditionally disallow disable of the ACL table when we are installed,<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // even if not enforcing authorizations. We are still allowing grants and revocations,<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      // checking permissions and logging audit messages, etc. If the ACL table is not<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      // available we will fail random actions all over the place.<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      throw new AccessDeniedException("Not allowed to disable "<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>          + AccessControlLists.ACL_TABLE_NAME + " table with AccessController installed");<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    requirePermission(c, "disableTable",<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>        tableName, null, null, Action.ADMIN, Action.CREATE);<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  }<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span><a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>  @Override<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  public void preAbortProcedure(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>      final long procId) throws IOException {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>    requirePermission(ctx, "abortProcedure", Action.ADMIN);<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>  }<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span><a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>  @Override<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>  public void postAbortProcedure(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      throws IOException {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>    // There is nothing to do at this time after the procedure abort request was sent.<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>  }<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span><a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>  @Override<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>  public void preGetProcedures(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      throws IOException {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    requirePermission(ctx, "getProcedure", Action.ADMIN);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>  }<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span><a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>  @Override<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  public void preGetLocks(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>      throws IOException {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    User user = getActiveUser(ctx);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    accessChecker.requirePermission(user, "getLocks", null, Action.ADMIN);<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>  }<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span><a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>  @Override<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>  public void preMove(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, RegionInfo region,<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>      ServerName srcServer, ServerName destServer) throws IOException {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    requirePermission(c, "move",<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>        region.getTable(), null, null, Action.ADMIN);<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>  }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  @Override<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>  public void preAssign(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, RegionInfo regionInfo)<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      throws IOException {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    requirePermission(c, "assign",<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>        regionInfo.getTable(), null, null, Action.ADMIN);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>  }<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span><a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  @Override<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>  public void preUnassign(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c, RegionInfo regionInfo,<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>      boolean force) throws IOException {<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    requirePermission(c, "unassign",<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>        regionInfo.getTable(), null, null, Action.ADMIN);<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>  @Override<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>  public void preRegionOffline(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c,<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      RegionInfo regionInfo) throws IOException {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    requirePermission(c, "regionOffline",<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>        regionInfo.getTable(), null, null, Action.ADMIN);<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>  }<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>  @Override<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>  public void preSetSplitOrMergeEnabled(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>      final boolean newValue, final MasterSwitchType switchType) throws IOException {<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    requirePermission(ctx, "setSplitOrMergeEnabled",<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>        Action.ADMIN);<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>  }<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span><a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>  @Override<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>  public void preBalance(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c)<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      throws IOException {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    requirePermission(c, "balance", Action.ADMIN);<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>  }<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span><a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>  @Override<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>  public void preBalanceSwitch(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c,<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      boolean newValue) throws IOException {<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    requirePermission(c, "balanceSwitch", Action.ADMIN);<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>  }<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span><a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>  @Override<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>  public void preShutdown(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c)<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      throws IOException {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    requirePermission(c, "shutdown", Action.ADMIN);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>  }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span><a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>  @Override<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>  public void preStopMaster(ObserverContext&lt;MasterCoprocessorEnvironment&gt; c)<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      throws IOException {<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    requirePermission(c, "stopMaster", Action.ADMIN);<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>  }<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span><a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>  @Override<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>  public void postStartMaster(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx)<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      throws IOException {<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    try (Admin admin = ctx.getEnvironment().getConnection().getAdmin()) {<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>      if (!admin.tableExists(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        createACLTable(admin);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      } else {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        this.aclTabAvailable = true;<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      }<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>  }<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  /**<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>   * Create the ACL table<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>   * @throws IOException<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>   */<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>  private static void createACLTable(Admin admin) throws IOException {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    /** Table descriptor for ACL table */<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    ColumnFamilyDescriptor cfd =<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>        ColumnFamilyDescriptorBuilder.newBuilder(AccessControlLists.ACL_LIST_FAMILY).<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>        setMaxVersions(1).<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>        setInMemory(true).<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>        setBlockCacheEnabled(true).<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>        setBlocksize(8 * 1024).<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>        setBloomFilterType(BloomType.NONE).<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>        setScope(HConstants.REPLICATION_SCOPE_LOCAL).build();<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    TableDescriptor td =<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        TableDescriptorBuilder.newBuilder(AccessControlLists.ACL_TABLE_NAME).<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>          setColumnFamily(cfd).build();<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    admin.createTable(td);<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>  }<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span><a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>  @Override<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>  public void preSnapshot(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>      final SnapshotDescription snapshot, final TableDescriptor hTableDescriptor)<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      throws IOException {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    // Move this ACL check to SnapshotManager#checkPermissions as part of AC deprecation.<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    requirePermission(ctx, "snapshot " + snapshot.getName(),<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>        hTableDescriptor.getTableName(), null, null, Permission.Action.ADMIN);<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>  }<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span><a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>  @Override<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>  public void preListSnapshot(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>      final SnapshotDescription snapshot) throws IOException {<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    User user = getActiveUser(ctx);<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (SnapshotDescriptionUtils.isSnapshotOwner(snapshot, user)) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      // list it, if user is the owner of snapshot<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      AuthResult result = AuthResult.allow("listSnapshot " + snapshot.getName(),<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>          "Snapshot owner check allowed", user, null, null, null);<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      AccessChecker.logResult(result);<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    } else {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      accessChecker.requirePermission(user, "listSnapshot " + snapshot.getName(), null,<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>        Action.ADMIN);<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>    }<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>  }<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span><a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>  @Override<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>  public void preCloneSnapshot(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>      final SnapshotDescription snapshot, final TableDescriptor hTableDescriptor)<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>      throws IOException {<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    User user = getActiveUser(ctx);<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    if (SnapshotDescriptionUtils.isSnapshotOwner(snapshot, user)<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>        &amp;&amp; hTableDescriptor.getTableName().getNameAsString().equals(snapshot.getTable())) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>      // Snapshot owner is allowed to create a table with the same name as the snapshot he took<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      AuthResult result = AuthResult.allow("cloneSnapshot " + snapshot.getName(),<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>        "Snapshot owner check allowed", user, null, hTableDescriptor.getTableName(), null);<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>      AccessChecker.logResult(result);<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    } else {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>      accessChecker.requirePermission(user, "cloneSnapshot " + snapshot.getName(), null,<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>        Action.ADMIN);<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    }<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>  }<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>  @Override<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>  public void preRestoreSnapshot(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      final SnapshotDescription snapshot, final TableDescriptor hTableDescriptor)<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>      throws IOException {<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    User user = getActiveUser(ctx);<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    if (SnapshotDescriptionUtils.isSnapshotOwner(snapshot, user)) {<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>      accessChecker.requirePermission(user, "restoreSnapshot " + snapshot.getName(),<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>        hTableDescriptor.getTableName(), null, null, null, Permission.Action.ADMIN);<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>    } else {<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      accessChecker.requirePermission(user, "restoreSnapshot " + snapshot.getName(), null,<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>        Action.ADMIN);<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>  }<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  @Override<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>  public void preDeleteSnapshot(final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      final SnapshotDescription snapshot) throws IOException {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    User user = getActiveUser(ctx);<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>    if (SnapshotDescriptionUtils.isSnapshotOwner(snapshot, user)) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>      // Snapshot owner is allowed to delete the snapshot<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      AuthResult result = AuthResult.allow("deleteSnapshot " + snapshot.getName(),<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>          "Snapshot owner check allowed", user, null, null, null);<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>      AccessChecker.logResult(result);<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>    } else {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      accessChecker.requirePermission(user, "deleteSnapshot " + snapshot.getName(), null,<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>        Action.ADMIN);<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>    }<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>  }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span><a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>  @Override<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>  public void preCreateNamespace(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      NamespaceDescriptor ns) throws IOException {<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>    requireGlobalPermission(ctx, "createNamespace",<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>        Action.ADMIN, ns.getName());<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>  }<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span><a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>  @Override<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>  public void preDeleteNamespace(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx, String namespace)<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      throws IOException {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>    requireGlobalPermission(ctx, "deleteNamespace",<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>        Action.ADMIN, namespace);<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>  }<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span><a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>  @Override<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>  public void postDeleteNamespace(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      final String namespace) throws IOException {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>    final Configuration conf = ctx.getEnvironment().getConfiguration();<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>    User.runAsLoginUser(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      @Override<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      public Void run() throws Exception {<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>        try (Table table = ctx.getEnvironment().getConnection().<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>            getTable(AccessControlLists.ACL_TABLE_NAME)) {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>          AccessControlLists.removeNamespacePermissions(conf, namespace, table);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        return null;<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>    });<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    getAuthManager().getZKPermissionWatcher().deleteNamespaceACLNode(namespace);<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    LOG.info(namespace + " entry deleted in " + AccessControlLists.ACL_TABLE_NAME + " table.");<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  }<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span><a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>  @Override<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>  public void preModifyNamespace(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      NamespaceDescriptor currentNsDesc, NamespaceDescriptor newNsDesc) throws IOException {<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    // We require only global permission so that<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    // a user with NS admin cannot altering namespace configurations. i.e. namespace quota<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    requireGlobalPermission(ctx, "modifyNamespace", Action.ADMIN, newNsDesc.getName());<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>  }<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span><a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>  @Override<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>  public void preGetNamespaceDescriptor(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    String namespace) throws IOException {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    requireNamespacePermission(ctx, "getNamespaceDescriptor", namespace, Action.ADMIN);<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>  }<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span><a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>  @Overr

<TRUNCATED>

[15/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TablePermission.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TablePermission.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TablePermission.html
index d00864b..0eb1c04 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TablePermission.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/TablePermission.html
@@ -39,7 +39,7 @@
 <span class="sourceLineNo">031</span>/**<a name="line.31"></a>
 <span class="sourceLineNo">032</span> * Represents an authorization for access for the given actions, optionally<a name="line.32"></a>
 <span class="sourceLineNo">033</span> * restricted to the given column family or column qualifier, over the<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * given table.  If the family property is &lt;code&gt;null&lt;/code&gt;, it implies<a name="line.34"></a>
+<span class="sourceLineNo">034</span> * given table. If the family property is &lt;code&gt;null&lt;/code&gt;, it implies<a name="line.34"></a>
 <span class="sourceLineNo">035</span> * full table access.<a name="line.35"></a>
 <span class="sourceLineNo">036</span> */<a name="line.36"></a>
 <span class="sourceLineNo">037</span>@InterfaceAudience.Private<a name="line.37"></a>
@@ -49,393 +49,278 @@
 <span class="sourceLineNo">041</span>  private byte[] family;<a name="line.41"></a>
 <span class="sourceLineNo">042</span>  private byte[] qualifier;<a name="line.42"></a>
 <span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>  //TODO refactor this class<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  //we need to refacting this into three classes (Global, Table, Namespace)<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  private String namespace;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>  /** Nullary constructor for Writable, do not use */<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  public TablePermission() {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    super();<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  }<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  /**<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * Create a new permission for the given table and (optionally) column family,<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * allowing the given actions.<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * @param table the table<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * @param family the family, can be null if a global permission on the table<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   * @param assigned the list of allowed actions<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   */<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  public TablePermission(TableName table, byte[] family, Action... assigned) {<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    this(table, family, null, assigned);<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  }<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  /**<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   * Creates a new permission for the given table, restricted to the given<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * column family and qualifier, allowing the assigned actions to be performed.<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * @param table the table<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * @param family the family, can be null if a global permission on the table<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   * @param assigned the list of allowed actions<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   */<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public TablePermission(TableName table, byte[] family, byte[] qualifier,<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      Action... assigned) {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    super(assigned);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    this.table = table;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    this.family = family;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    this.qualifier = qualifier;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * Creates a new permission for the given table, family and column qualifier,<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * allowing the actions matching the provided byte codes to be performed.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param table the table<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @param family the family, can be null if a global permission on the table<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * @param actionCodes the list of allowed action codes<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  public TablePermission(TableName table, byte[] family, byte[] qualifier,<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      byte[] actionCodes) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    super(actionCodes);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    this.table = table;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    this.family = family;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    this.qualifier = qualifier;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  /**<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * Creates a new permission for the given namespace or table, restricted to the given<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * column family and qualifier, allowing the assigned actions to be performed.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param namespace<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @param table the table<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @param family the family, can be null if a global permission on the table<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * @param assigned the list of allowed actions<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public TablePermission(String namespace, TableName table, byte[] family, byte[] qualifier,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      Action... assigned) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    super(assigned);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    this.namespace = namespace;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    this.table = table;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    this.family = family;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    this.qualifier = qualifier;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Creates a new permission for the given namespace or table, family and column qualifier,<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * allowing the actions matching the provided byte codes to be performed.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * @param namespace<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * @param table the table<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param family the family, can be null if a global permission on the table<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @param actionCodes the list of allowed action codes<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public TablePermission(String namespace, TableName table, byte[] family, byte[] qualifier,<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      byte[] actionCodes) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    super(actionCodes);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    this.namespace = namespace;<a name="line.122"></a>
+<span class="sourceLineNo">044</span>  /** Nullary constructor for Writable, do not use */<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  public TablePermission() {<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    super();<a name="line.46"></a>
+<span class="sourceLineNo">047</span>    this.scope = Scope.EMPTY;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  }<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  /**<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * Construct a table permission.<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * @param table table name<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   * @param assigned assigned actions<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   */<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public TablePermission(TableName table, Action... assigned) {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    this(table, null, null, assigned);<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  }<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  /**<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   * Construct a table:family permission.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * @param table table name<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * @param family family name<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * @param assigned assigned actions<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   */<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  public TablePermission(TableName table, byte[] family, Action... assigned) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    this(table, family, null, assigned);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  /**<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * Construct a table:family:qualifier permission.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * @param table table name<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * @param family family name<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * @param qualifier qualifier name<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * @param assigned assigned actions<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public TablePermission(TableName table, byte[] family, byte[] qualifier, Action... assigned) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    super(assigned);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    this.table = table;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    this.family = family;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    this.qualifier = qualifier;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.scope = Scope.TABLE;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * Construct a table permission.<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * @param table table name<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * @param actionCodes assigned actions<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   */<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  public TablePermission(TableName table, byte[] actionCodes) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    this(table, null, null, actionCodes);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * Construct a table:family permission.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param table table name<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param family family name<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @param actionCodes assigned actions<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public TablePermission(TableName table, byte[] family, byte[] actionCodes) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    this(table, family, null, actionCodes);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  /**<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * Construct a table:family:qualifier permission.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @param table table name<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * @param family family name<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @param qualifier qualifier name<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @param actionCodes assigned actions<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public TablePermission(TableName table, byte[] family, byte[] qualifier, byte[] actionCodes) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    super(actionCodes);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    this.table = table;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    this.family = family;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    this.qualifier = qualifier;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    this.scope = Scope.TABLE;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  public TableName getTableName() {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    return table;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  public void setTableName(TableName table) {<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    this.table = table;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    this.family = family;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.qualifier = qualifier;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  /**<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * Creates a new permission for the given namespace,<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   * allowing the actions matching the provided byte codes to be performed.<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * @param namespace<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   * @param actionCodes the list of allowed action codes<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   */<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  public TablePermission(String namespace, byte[] actionCodes) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    super(actionCodes);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    this.namespace = namespace;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  /**<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   * Create a new permission for the given namespace,<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * allowing the given actions.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * @param namespace<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * @param assigned the list of allowed actions<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  public TablePermission(String namespace, Action... assigned) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    super(assigned);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    this.namespace = namespace;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  public boolean hasTable() {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    return table != null;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public TableName getTableName() {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    return table;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  }<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  public void setTableName(TableName table) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    this.table = table;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public boolean hasFamily() {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    return family != null;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public byte[] getFamily() {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return family;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public boolean hasQualifier() {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return qualifier != null;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  public byte[] getQualifier() {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    return qualifier;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  public boolean hasNamespace() {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    return namespace != null;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public String getNamespace() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    return namespace;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  /**<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * Checks that a given table operation is authorized by this permission<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * instance.<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   *<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param namespace the namespace where the operation is being performed<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param action the action being requested<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @return &lt;code&gt;true&lt;/code&gt; if the action within the given scope is allowed<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   *   by this permission, &lt;code&gt;false&lt;/code&gt;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  public boolean implies(String namespace, Action action) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    if (this.namespace == null || !this.namespace.equals(namespace)) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      return false;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // check actions<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    return super.implies(action);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /**<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * Checks that a given table operation is authorized by this permission<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * instance.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   *<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * @param table the table where the operation is being performed<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * @param family the column family to which the operation is restricted,<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   *   if &lt;code&gt;null&lt;/code&gt; implies "all"<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * @param qualifier the column qualifier to which the action is restricted,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   *   if &lt;code&gt;null&lt;/code&gt; implies "all"<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * @param action the action being requested<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @return &lt;code&gt;true&lt;/code&gt; if the action within the given scope is allowed<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   *   by this permission, &lt;code&gt;false&lt;/code&gt;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  public boolean implies(TableName table, byte[] family, byte[] qualifier,<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      Action action) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    if (this.table == null || !this.table.equals(table)) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return false;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>    if (this.family != null &amp;&amp;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        (family == null ||<a name="line.224"></a>
-<span class="sourceLineNo">225</span>         !Bytes.equals(this.family, family))) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      return false;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>    if (this.qualifier != null &amp;&amp;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        (qualifier == null ||<a name="line.230"></a>
-<span class="sourceLineNo">231</span>         !Bytes.equals(this.qualifier, qualifier))) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      return false;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>    // check actions<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    return super.implies(action);<a name="line.236"></a>
+<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public boolean hasFamily() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    return family != null;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  public byte[] getFamily() {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    return family;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public boolean hasQualifier() {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    return qualifier != null;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  public byte[] getQualifier() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return qualifier;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  public String getNamespace() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    return table.getNamespaceAsString();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  /**<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * Check if given action can performs on given table:family:qualifier.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * @param table table name<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @param family family name<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * @param qualifier qualifier name<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @param action one of [Read, Write, Create, Exec, Admin]<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @return true if can, false otherwise<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public boolean implies(TableName table, byte[] family, byte[] qualifier, Action action) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    if (failCheckTable(table)) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      return false;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    if (failCheckFamily(family)) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      return false;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    if (failCheckQualifier(qualifier)) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      return false;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    return implies(action);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * Check if given action can performs on given table:family.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @param table table name<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * @param family family name<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * @param action one of [Read, Write, Create, Exec, Admin]<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @return true if can, false otherwise<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public boolean implies(TableName table, byte[] family, Action action) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    if (failCheckTable(table)) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      return false;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    if (failCheckFamily(family)) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      return false;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    return implies(action);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  private boolean failCheckTable(TableName table) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    return this.table == null || !this.table.equals(table);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>  private boolean failCheckFamily(byte[] family) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    return this.family != null &amp;&amp; (family == null || !Bytes.equals(this.family, family));<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>  private boolean failCheckQualifier(byte[] qual) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    return this.qualifier != null &amp;&amp; (qual == null || !Bytes.equals(this.qualifier, qual));<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>  /**<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * Checks if this permission grants access to perform the given action on<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * the given table and key value.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * @param table the table on which the operation is being performed<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * @param kv the KeyValue on which the operation is being requested<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * @param action the action requested<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * @return &lt;code&gt;true&lt;/code&gt; if the action is allowed over the given scope<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   *   by this permission, otherwise &lt;code&gt;false&lt;/code&gt;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  public boolean implies(TableName table, KeyValue kv, Action action) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    if (failCheckTable(table)) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      return false;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>    if (family != null &amp;&amp; !(CellUtil.matchingFamily(kv, family))) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>    if (qualifier != null &amp;&amp; !(CellUtil.matchingQualifier(kv, qualifier))) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      return false;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>    // check actions<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    return super.implies(action);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  /**<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * Check if fields of table in table permission equals.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @param tp to be checked table permission<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @return true if equals, false otherwise<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   */<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public boolean tableFieldsEqual(TablePermission tp) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    if (tp == null) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      return false;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>    boolean tEq = (table == null &amp;&amp; tp.table == null) || (table != null &amp;&amp; table.equals(tp.table));<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    boolean fEq = (family == null &amp;&amp; tp.family == null) || Bytes.equals(family, tp.family);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    boolean qEq = (qualifier == null &amp;&amp; tp.qualifier == null) ||<a name="line.234"></a>
+<span class="sourceLineNo">235</span>                   Bytes.equals(qualifier, tp.qualifier);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return tEq &amp;&amp; fEq &amp;&amp; qEq;<a name="line.236"></a>
 <span class="sourceLineNo">237</span>  }<a name="line.237"></a>
 <span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>  /**<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * Checks if this permission grants access to perform the given action on<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * the given table and key value.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * @param table the table on which the operation is being performed<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * @param kv the KeyValue on which the operation is being requested<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * @param action the action requested<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * @return &lt;code&gt;true&lt;/code&gt; if the action is allowed over the given scope<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   *   by this permission, otherwise &lt;code&gt;false&lt;/code&gt;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public boolean implies(TableName table, KeyValue kv, Action action) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    if (this.table == null || !this.table.equals(table)) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      return false;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
+<span class="sourceLineNo">239</span>  @Override<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public boolean equalsExceptActions(Object obj) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    if (!(obj instanceof TablePermission)) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      return false;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    TablePermission other = (TablePermission) obj;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return tableFieldsEqual(other);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  public boolean equals(Object obj) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    return equalsExceptActions(obj) &amp;&amp; super.equals(obj);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
 <span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    if (family != null &amp;&amp; !(CellUtil.matchingFamily(kv, family))) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      return false;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>    if (qualifier != null &amp;&amp; !(CellUtil.matchingQualifier(kv, qualifier))) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      return false;<a name="line.258"></a>
+<span class="sourceLineNo">253</span>  @Override<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  public int hashCode() {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    final int prime = 37;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    int result = super.hashCode();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    if (table != null) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      result = prime * result + table.hashCode();<a name="line.258"></a>
 <span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // check actions<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    return super.implies(action);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>  /**<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * Returns &lt;code&gt;true&lt;/code&gt; if this permission matches the given column<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * family at least.  This only indicates a partial match against the table<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * and column family, however, and does not guarantee that implies() for the<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * column same family would return &lt;code&gt;true&lt;/code&gt;.  In the case of a<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * column-qualifier specific permission, for example, implies() would still<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * return false.<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   */<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  public boolean matchesFamily(TableName table, byte[] family, Action action) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    if (this.table == null || !this.table.equals(table)) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      return false;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (this.family != null &amp;&amp;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        (family == null ||<a name="line.279"></a>
-<span class="sourceLineNo">280</span>         !Bytes.equals(this.family, family))) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      return false;<a name="line.281"></a>
+<span class="sourceLineNo">260</span>    if (family != null) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      result = prime * result + Bytes.hashCode(family);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    if (qualifier != null) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      result = prime * result + Bytes.hashCode(qualifier);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return result;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  public String toString() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return "[TablePermission: " + rawExpression() + "]";<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @Override<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  protected String rawExpression() {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    StringBuilder raw = new StringBuilder();<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    if (table != null) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      raw.append("table=").append(table)<a name="line.278"></a>
+<span class="sourceLineNo">279</span>         .append(", family=").append(family == null ? null : Bytes.toString(family))<a name="line.279"></a>
+<span class="sourceLineNo">280</span>         .append(", qualifier=").append(qualifier == null ? null : Bytes.toString(qualifier))<a name="line.280"></a>
+<span class="sourceLineNo">281</span>         .append(", ");<a name="line.281"></a>
 <span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    // ignore qualifier<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // check actions<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return super.implies(action);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  }<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>  /**<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * Returns if the given permission matches the given qualifier.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @param table the table name to match<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * @param family the column family to match<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * @param qualifier the qualifier name to match<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @param action the action requested<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * @return &lt;code&gt;true&lt;/code&gt; if the table, family and qualifier match,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   *   otherwise &lt;code&gt;false&lt;/code&gt;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  public boolean matchesFamilyQualifier(TableName table, byte[] family, byte[] qualifier,<a name="line.298"></a>
-<span class="sourceLineNo">299</span>                                Action action) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (!matchesFamily(table, family, action)) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      return false;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      if (this.qualifier != null &amp;&amp;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          (qualifier == null ||<a name="line.304"></a>
-<span class="sourceLineNo">305</span>           !Bytes.equals(this.qualifier, qualifier))) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return false;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    return super.implies(action);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  public boolean tableFieldsEqual(TablePermission other){<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    if (!(((table == null &amp;&amp; other.getTableName() == null) ||<a name="line.313"></a>
-<span class="sourceLineNo">314</span>           (table != null &amp;&amp; table.equals(other.getTableName()))) &amp;&amp;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>         ((family == null &amp;&amp; other.getFamily() == null) ||<a name="line.315"></a>
-<span class="sourceLineNo">316</span>           Bytes.equals(family, other.getFamily())) &amp;&amp;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>         ((qualifier == null &amp;&amp; other.getQualifier() == null) ||<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          Bytes.equals(qualifier, other.getQualifier())) &amp;&amp;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>         ((namespace == null &amp;&amp; other.getNamespace() == null) ||<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          (namespace != null &amp;&amp; namespace.equals(other.getNamespace())))<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    )) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      return false;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    return true;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  @Override<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    justification="Passed on construction except on constructor not to be used")<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  public boolean equals(Object obj) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    if (!(obj instanceof TablePermission)) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      return false;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    TablePermission other = (TablePermission)obj;<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>    if(!this.tableFieldsEqual(other)){<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      return false;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    // check actions<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    return super.equals(other);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public int hashCode() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    final int prime = 37;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    int result = super.hashCode();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    if (table != null) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      result = prime * result + table.hashCode();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    if (family != null) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      result = prime * result + Bytes.hashCode(family);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    if (qualifier != null) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      result = prime * result + Bytes.hashCode(qualifier);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    if (namespace != null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      result = prime * result + namespace.hashCode();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return result;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @Override<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  public String toString() {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    StringBuilder str = new StringBuilder("[TablePermission: ");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    if(namespace != null) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      str.append("namespace=").append(namespace)<a name="line.367"></a>
-<span class="sourceLineNo">368</span>         .append(", ");<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    if(table != null) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>       str.append("table=").append(table)<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          .append(", family=")<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          .append(family == null ? null : Bytes.toString(family))<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          .append(", qualifier=")<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          .append(qualifier == null ? null : Bytes.toString(qualifier))<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          .append(", ");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    if (actions != null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      str.append("actions=");<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      for (int i=0; i&lt;actions.length; i++) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        if (i &gt; 0)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>          str.append(",");<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        if (actions[i] != null)<a name="line.383"></a>
-<span class="sourceLineNo">384</span>          str.append(actions[i].toString());<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        else<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          str.append("NULL");<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    str.append("]");<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>    return str.toString();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>  @Override<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public void readFields(DataInput in) throws IOException {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    super.readFields(in);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    byte[] tableBytes = Bytes.readByteArray(in);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    if(tableBytes.length &gt; 0) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      table = TableName.valueOf(tableBytes);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    if (in.readBoolean()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      family = Bytes.readByteArray(in);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (in.readBoolean()) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      qualifier = Bytes.readByteArray(in);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    if(in.readBoolean()) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      namespace = Bytes.toString(Bytes.readByteArray(in));<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  public void write(DataOutput out) throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    super.write(out);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    // Explicitly writing null to maintain se/deserialize backward compatibility.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    Bytes.writeByteArray(out, (table == null) ? null : table.getName());<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    out.writeBoolean(family != null);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    if (family != null) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      Bytes.writeByteArray(out, family);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    out.writeBoolean(qualifier != null);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    if (qualifier != null) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      Bytes.writeByteArray(out, qualifier);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    out.writeBoolean(namespace != null);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    if(namespace != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      Bytes.writeByteArray(out, Bytes.toBytes(namespace));<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>}<a name="line.430"></a>
+<span class="sourceLineNo">283</span>    return raw.toString() + super.rawExpression();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  public void readFields(DataInput in) throws IOException {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    super.readFields(in);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    byte[] tableBytes = Bytes.readByteArray(in);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    if(tableBytes.length &gt; 0) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      table = TableName.valueOf(tableBytes);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    if (in.readBoolean()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      family = Bytes.readByteArray(in);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    if (in.readBoolean()) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      qualifier = Bytes.readByteArray(in);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>  @Override<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  public void write(DataOutput out) throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    super.write(out);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    // Explicitly writing null to maintain se/deserialize backward compatibility.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    Bytes.writeByteArray(out, table == null ? null : table.getName());<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    out.writeBoolean(family != null);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    if (family != null) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      Bytes.writeByteArray(out, family);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    out.writeBoolean(qualifier != null);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    if (qualifier != null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      Bytes.writeByteArray(out, qualifier);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>}<a name="line.315"></a>
 
 
 


[41/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/AccessController.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/AccessController.html b/devapidocs/org/apache/hadoop/hbase/security/access/AccessController.html
index 0bb9839..5d7328c 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/AccessController.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/AccessController.html
@@ -382,7 +382,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 </td>
 </tr>
 <tr id="i8" class="altColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.html#getAuthManager--">getAuthManager</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i9" class="rowColor">
@@ -1639,7 +1639,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>getAuthManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.240">getAuthManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.240">getAuthManager</a>()</pre>
 </li>
 </ul>
 <a name="initialize-org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment-">
@@ -1911,7 +1911,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCoveringPermission</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.538">checkCoveringPermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.537">checkCoveringPermission</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                                         <a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access">AccessController.OpType</a>&nbsp;request,
                                         <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionCoprocessorEnvironment</a>&nbsp;e,
                                         byte[]&nbsp;row,
@@ -1934,7 +1934,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>addCellPermissions</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.707">addCellPermissions</a>(byte[]&nbsp;perms,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.706">addCellPermissions</a>(byte[]&nbsp;perms,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;familyMap)</pre>
 </li>
 </ul>
@@ -1944,7 +1944,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>checkForReservedTagPresence</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.729">checkForReservedTagPresence</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.728">checkForReservedTagPresence</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                                          <a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;m)
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -1959,7 +1959,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.757">start</a>(<a href="../../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase">CoprocessorEnvironment</a>&nbsp;env)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.756">start</a>(<a href="../../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase">CoprocessorEnvironment</a>&nbsp;env)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Coprocessor.html#start-org.apache.hadoop.hbase.CoprocessorEnvironment-">Coprocessor</a></code></span></div>
 <div class="block">Called by the <a href="../../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase"><code>CoprocessorEnvironment</code></a> during it's own startup to initialize the
@@ -1978,7 +1978,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.807">stop</a>(<a href="../../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase">CoprocessorEnvironment</a>&nbsp;env)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.806">stop</a>(<a href="../../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase">CoprocessorEnvironment</a>&nbsp;env)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Coprocessor.html#stop-org.apache.hadoop.hbase.CoprocessorEnvironment-">Coprocessor</a></code></span></div>
 <div class="block">Called by the <a href="../../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase"><code>CoprocessorEnvironment</code></a> during it's own shutdown to stop the
  coprocessor.</div>
@@ -1994,7 +1994,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionObserver</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionObserver</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.813">getRegionObserver</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionObserver</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.812">getRegionObserver</a>()</pre>
 <div class="block">Observer/Service Getters</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2008,7 +2008,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterObserver</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterObserver</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.818">getMasterObserver</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterObserver</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.817">getMasterObserver</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.html#getMasterObserver--">getMasterObserver</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessor</a></code></dd>
@@ -2021,7 +2021,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>getEndpointObserver</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/EndpointObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">EndpointObserver</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.823">getEndpointObserver</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/EndpointObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">EndpointObserver</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.822">getEndpointObserver</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionCoprocessor.html#getEndpointObserver--">getEndpointObserver</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionCoprocessor</a></code></dd>
@@ -2034,7 +2034,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>getBulkLoadObserver</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/BulkLoadObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">BulkLoadObserver</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.828">getBulkLoadObserver</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/BulkLoadObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">BulkLoadObserver</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.827">getBulkLoadObserver</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionCoprocessor.html#getBulkLoadObserver--">getBulkLoadObserver</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionCoprocessor</a></code></dd>
@@ -2047,7 +2047,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerObserver</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionServerObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionServerObserver</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.833">getRegionServerObserver</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionServerObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionServerObserver</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.832">getRegionServerObserver</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessor.html#getRegionServerObserver--">getRegionServerObserver</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionServerCoprocessor</a></code></dd>
@@ -2060,7 +2060,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>getServices</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;com.google.protobuf.Service&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.838">getServices</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;com.google.protobuf.Service&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.837">getServices</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Coprocessor.html#getServices--">Coprocessor</a></code></span></div>
 <div class="block">Coprocessor endpoints providing protobuf services should override this method.</div>
 <dl>
@@ -2078,7 +2078,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preCreateTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.846">preCreateTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.845">preCreateTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                            <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
                            <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regions)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -2101,7 +2101,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>postCompletedCreateTableAction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.858">postCompletedCreateTableAction</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.857">postCompletedCreateTableAction</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                                            <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
                                            <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regions)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -2127,7 +2127,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preDeleteTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.908">preDeleteTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.907">preDeleteTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preDeleteTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">MasterObserver</a></code></span></div>
@@ -2150,7 +2150,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>postDeleteTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.915">postDeleteTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.914">postDeleteTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#postDeleteTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">MasterObserver</a></code></span></div>
@@ -2173,7 +2173,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preTruncateTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.932">preTruncateTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.931">preTruncateTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preTruncateTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">MasterObserver</a></code></span></div>
@@ -2196,7 +2196,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>postTruncateTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.952">postTruncateTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.951">postTruncateTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                               <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#postTruncateTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">MasterObserver</a></code></span></div>
@@ -2221,7 +2221,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preModifyTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.974">preModifyTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.973">preModifyTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                            <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;currentDesc,
                            <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;newDesc)
@@ -2248,7 +2248,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>postModifyTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.982">postModifyTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.981">postModifyTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                             <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;oldDesc,
                             <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;currentDesc)
@@ -2275,7 +2275,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preEnableTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1003">preEnableTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1002">preEnableTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preEnableTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">MasterObserver</a></code></span></div>
@@ -2297,7 +2297,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preDisableTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1010">preDisableTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1009">preDisableTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preDisableTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">MasterObserver</a></code></span></div>
@@ -2320,7 +2320,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preAbortProcedure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1025">preAbortProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1024">preAbortProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                               long&nbsp;procId)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preAbortProcedure-org.apache.hadoop.hbase.coprocessor.ObserverContext-long-">MasterObserver</a></code></span></div>
@@ -2342,7 +2342,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>postAbortProcedure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1031">postAbortProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1030">postAbortProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#postAbortProcedure-org.apache.hadoop.hbase.coprocessor.ObserverContext-">MasterObserver</a></code></span></div>
 <div class="block">Called after a abortProcedure request has been processed.</div>
@@ -2362,7 +2362,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preGetProcedures</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1037">preGetProcedures</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1036">preGetProcedures</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preGetProcedures-org.apache.hadoop.hbase.coprocessor.ObserverContext-">MasterObserver</a></code></span></div>
 <div class="block">Called before a getProcedures request has been processed.</div>
@@ -2382,7 +2382,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preGetLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1043">preGetLocks</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1042">preGetLocks</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preGetLocks-org.apache.hadoop.hbase.coprocessor.ObserverContext-">MasterObserver</a></code></span></div>
 <div class="block">Called before a getLocks request has been processed.</div>
@@ -2402,7 +2402,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preMove</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1050">preMove</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1049">preMove</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                     <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                     <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;srcServer,
                     <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destServer)
@@ -2428,7 +2428,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preAssign</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1057">preAssign</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1056">preAssign</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                       <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preAssign-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.RegionInfo-">MasterObserver</a></code></span></div>
@@ -2450,7 +2450,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preUnassign</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1064">preUnassign</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1063">preUnassign</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                         <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                         boolean&nbsp;force)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -2473,7 +2473,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preRegionOffline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1071">preRegionOffline</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1070">preRegionOffline</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                              <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preRegionOffline-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.RegionInfo-">MasterObserver</a></code></span></div>
@@ -2494,7 +2494,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preSetSplitOrMergeEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1078">preSetSplitOrMergeEnabled</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1077">preSetSplitOrMergeEnabled</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                       boolean&nbsp;newValue,
                                       <a href="../../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a>&nbsp;switchType)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -2519,7 +2519,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preBalance</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1085">preBalance</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1084">preBalance</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preBalance-org.apache.hadoop.hbase.coprocessor.ObserverContext-">MasterObserver</a></code></span></div>
 <div class="block">Called prior to requesting rebalancing of the cluster regions, though after
@@ -2540,7 +2540,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preBalanceSwitch</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1091">preBalanceSwitch</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1090">preBalanceSwitch</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c,
                              boolean&nbsp;newValue)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preBalanceSwitch-org.apache.hadoop.hbase.coprocessor.ObserverContext-boolean-">MasterObserver</a></code></span></div>
@@ -2561,7 +2561,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preShutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1097">preShutdown</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1096">preShutdown</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preShutdown-org.apache.hadoop.hbase.coprocessor.ObserverContext-">MasterObserver</a></code></span></div>
 <div class="block">Called prior to shutting down the full HBase cluster, including this
@@ -2580,7 +2580,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preStopMaster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1103">preStopMaster</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1102">preStopMaster</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;c)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preStopMaster-org.apache.hadoop.hbase.coprocessor.ObserverContext-">MasterObserver</a></code></span></div>
 <div class="block">Called immediately prior to stopping this
@@ -2599,7 +2599,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>postStartMaster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1109">postStartMaster</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1108">postStartMaster</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#postStartMaster-org.apache.hadoop.hbase.coprocessor.ObserverContext-">MasterObserver</a></code></span></div>
 <div class="block">Called immediately after an active master instance has completed
@@ -2619,7 +2619,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>createACLTable</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1123">createACLTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin)
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1122">createACLTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create the ACL table</div>
 <dl>
@@ -2634,7 +2634,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1140">preSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1139">preSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                         <a href="../../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot,
                         <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;hTableDescriptor)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -2659,7 +2659,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preListSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1149">preListSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1148">preListSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                             <a href="../../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preListSnapshot-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.SnapshotDescription-">MasterObserver</a></code></span></div>
@@ -2681,7 +2681,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preCloneSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1164">preCloneSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1163">preCloneSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                              <a href="../../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot,
                              <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;hTableDescriptor)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -2706,7 +2706,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preRestoreSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1181">preRestoreSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1180">preRestoreSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                <a href="../../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot,
                                <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;hTableDescriptor)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -2731,7 +2731,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preDeleteSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1195">preDeleteSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1194">preDeleteSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                               <a href="../../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preDeleteSnapshot-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.SnapshotDescription-">MasterObserver</a></code></span></div>
@@ -2754,7 +2754,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preCreateNamespace</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1210">preCreateNamespace</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1209">preCreateNamespace</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                <a href="../../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;ns)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preCreateNamespace-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.NamespaceDescriptor-">MasterObserver</a></code></span></div>
@@ -2777,7 +2777,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preDeleteNamespace</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1217">preDeleteNamespace</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1216">preDeleteNamespace</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preDeleteNamespace-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">MasterObserver</a></code></span></div>
@@ -2800,7 +2800,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>postDeleteNamespace</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1224">postDeleteNamespace</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1223">postDeleteNamespace</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#postDeleteNamespace-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">MasterObserver</a></code></span></div>
@@ -2822,7 +2822,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preModifyNamespace</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1242">preModifyNamespace</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1241">preModifyNamespace</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                <a href="../../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;currentNsDesc,
                                <a href="../../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;newNsDesc)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -2846,7 +2846,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preGetNamespaceDescriptor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1250">preGetNamespaceDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1249">preGetNamespaceDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preGetNamespaceDescriptor-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">MasterObserver</a></code></span></div>
@@ -2868,7 +2868,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>postListNamespaceDescriptors</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1256">postListNamespaceDescriptors</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1255">postListNamespaceDescriptors</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&gt;&nbsp;descriptors)
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#postListNamespaceDescriptors-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.List-">MasterObserver</a></code></span></div>
@@ -2890,7 +2890,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preTableFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1274">preTableFlush</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1273">preTableFlush</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                           <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preTableFlush-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">MasterObserver</a></code></span></div>
@@ -2912,7 +2912,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preSplitRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1283">preSplitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1282">preSplitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                            byte[]&nbsp;splitRow)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -2936,7 +2936,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preClearDeadServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1292">preClearDeadServers</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1291">preClearDeadServers</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preClearDeadServers-org.apache.hadoop.hbase.coprocessor.ObserverContext-">MasterObserver</a></code></span></div>
 <div class="block">Called before clear dead region servers.</div>
@@ -2954,7 +2954,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Master
 <ul class="blockList">
 <li class="blockList">
 <h4>preDecommissionRegionServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1298">preDecommissionRegionServers</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessController.html#line.1297">preDecommissionRegionServers</a>(<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apac

<TRUNCATED>

[18/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.html
index 042bf4a..cb2cfdc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/Permission.html
@@ -30,194 +30,226 @@
 <span class="sourceLineNo">022</span>import java.io.DataOutput;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.util.Arrays;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.Map;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.slf4j.Logger;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.slf4j.LoggerFactory;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.io.VersionedWritable;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>/**<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * Base permissions instance representing the ability to perform a given set<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * of actions.<a name="line.37"></a>
-<span class="sourceLineNo">038</span> *<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * @see TablePermission<a name="line.39"></a>
-<span class="sourceLineNo">040</span> */<a name="line.40"></a>
-<span class="sourceLineNo">041</span>@InterfaceAudience.Public<a name="line.41"></a>
-<span class="sourceLineNo">042</span>public class Permission extends VersionedWritable {<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  protected static final byte VERSION = 0;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>  @InterfaceAudience.Public<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  public enum Action {<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A');<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>    private final byte code;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    Action(char code) {<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      this.code = (byte)code;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    }<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>    public byte code() { return code; }<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  }<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private static final Logger LOG = LoggerFactory.getLogger(Permission.class);<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  protected static final Map&lt;Byte,Action&gt; ACTION_BY_CODE = Maps.newHashMap();<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  protected Action[] actions;<a name="line.60"></a>
+<span class="sourceLineNo">025</span>import java.util.EnumSet;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Map;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.slf4j.Logger;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.slf4j.LoggerFactory;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.io.VersionedWritable;<a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * Base permissions instance representing the ability to perform a given set<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * of actions.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * @see TablePermission<a name="line.40"></a>
+<span class="sourceLineNo">041</span> */<a name="line.41"></a>
+<span class="sourceLineNo">042</span>@InterfaceAudience.Public<a name="line.42"></a>
+<span class="sourceLineNo">043</span>public class Permission extends VersionedWritable {<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  protected static final byte VERSION = 0;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>  @InterfaceAudience.Public<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  public enum Action {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A');<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>    private final byte code;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    Action(char code) {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      this.code = (byte) code;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    }<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>    public byte code() { return code; }<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  }<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  @InterfaceAudience.Private<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  protected enum Scope {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    GLOBAL('G'), NAMESPACE('N'), TABLE('T'), EMPTY('E');<a name="line.60"></a>
 <span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  static {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    for (Action a : Action.values()) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      ACTION_BY_CODE.put(a.code(), a);<a name="line.64"></a>
+<span class="sourceLineNo">062</span>    private final byte code;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    Scope(char code) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      this.code = (byte) code;<a name="line.64"></a>
 <span class="sourceLineNo">065</span>    }<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  }<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  /** Empty constructor for Writable implementation.  &lt;b&gt;Do not use.&lt;/b&gt; */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public Permission() {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    super();<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public Permission(Action... assigned) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    if (assigned != null &amp;&amp; assigned.length &gt; 0) {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      actions = Arrays.copyOf(assigned, assigned.length);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public Permission(byte[] actionCodes) {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    if (actionCodes != null) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      Action acts[] = new Action[actionCodes.length];<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      int j = 0;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      for (int i=0; i&lt;actionCodes.length; i++) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>        byte b = actionCodes[i];<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        Action a = ACTION_BY_CODE.get(b);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        if (a == null) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>          LOG.error("Ignoring unknown action code '"+<a name="line.87"></a>
-<span class="sourceLineNo">088</span>              Bytes.toStringBinary(new byte[]{b})+"'");<a name="line.88"></a>
-<span class="sourceLineNo">089</span>          continue;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        }<a name="line.90"></a>
-<span class="sourceLineNo">091</span>        acts[j++] = a;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      this.actions = Arrays.copyOf(acts, j);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    }<a name="line.94"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>    public byte code() {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      return code;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private static final Logger LOG = LoggerFactory.getLogger(Permission.class);<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  protected static final Map&lt;Byte, Action&gt; ACTION_BY_CODE;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  protected static final Map&lt;Byte, Scope&gt; SCOPE_BY_CODE;<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  protected EnumSet&lt;Action&gt; actions = EnumSet.noneOf(Action.class);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  protected Scope scope = Scope.EMPTY;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  static {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    ACTION_BY_CODE = ImmutableMap.of(<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      Action.READ.code, Action.READ,<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      Action.WRITE.code, Action.WRITE,<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      Action.EXEC.code, Action.EXEC,<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      Action.CREATE.code, Action.CREATE,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      Action.ADMIN.code, Action.ADMIN<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    );<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>    SCOPE_BY_CODE = ImmutableMap.of(<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      Scope.GLOBAL.code, Scope.GLOBAL,<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      Scope.NAMESPACE.code, Scope.NAMESPACE,<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      Scope.TABLE.code, Scope.TABLE,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      Scope.EMPTY.code, Scope.EMPTY<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    );<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  }<a name="line.95"></a>
 <span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public Action[] getActions() {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    return actions;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public boolean implies(Action action) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    if (this.actions != null) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      for (Action a : this.actions) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        if (a == action) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>          return true;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    }<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>    return false;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public void setActions(Action[] assigned) {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    if (assigned != null &amp;&amp; assigned.length &gt; 0) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      actions = Arrays.copyOf(assigned, assigned.length);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public boolean equals(Object obj) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    if (!(obj instanceof Permission)) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      return false;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    Permission other = (Permission)obj;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    // check actions<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    if (actions == null &amp;&amp; other.getActions() == null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      return true;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    } else if (actions != null &amp;&amp; other.getActions() != null) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      Action[] otherActions = other.getActions();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      if (actions.length != otherActions.length) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        return false;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>      outer:<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      for (Action a : actions) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        for (Action oa : otherActions) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>          if (a == oa) continue outer;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        return false;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      return true;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">097</span>  /** Empty constructor for Writable implementation.  &lt;b&gt;Do not use.&lt;/b&gt; */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public Permission() {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    super();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public Permission(Action... assigned) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (assigned != null &amp;&amp; assigned.length &gt; 0) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      actions.addAll(Arrays.asList(assigned));<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public Permission(byte[] actionCodes) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    if (actionCodes != null) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      for (byte code : actionCodes) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        Action action = ACTION_BY_CODE.get(code);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        if (action == null) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          LOG.error("Ignoring unknown action code '" +<a name="line.113"></a>
+<span class="sourceLineNo">114</span>            Bytes.toStringBinary(new byte[] { code }) + "'");<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          continue;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        actions.add(action);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  public Action[] getActions() {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    return actions.toArray(new Action[actions.size()]);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>  /**<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * check if given action is granted<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param action action to be checked<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @return true if granted, false otherwise<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public boolean implies(Action action) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    return actions.contains(action);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  public void setActions(Action[] assigned) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    if (assigned != null &amp;&amp; assigned.length &gt; 0) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      // setActions should cover the previous actions,<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      // so we call clear here.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      actions.clear();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      actions.addAll(Arrays.asList(assigned));<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
 <span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return false;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @Override<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public int hashCode() {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    final int prime = 37;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    int result = 23;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    for (Action a : actions) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      result = prime * result + a.code();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    return result;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  }<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>  @Override<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  public String toString() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    StringBuilder str = new StringBuilder("[Permission: ")<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        .append("actions=");<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    if (actions != null) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      for (int i=0; i&lt;actions.length; i++) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        if (i &gt; 0)<a name="line.163"></a>
-<span class="sourceLineNo">164</span>          str.append(",");<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        if (actions[i] != null)<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          str.append(actions[i].toString());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        else<a name="line.167"></a>
-<span class="sourceLineNo">168</span>          str.append("NULL");<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    str.append("]");<a name="line.171"></a>
+<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * Check if two permission equals regardless of actions. It is useful when<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * merging a new permission with an existed permission which needs to check two permissions's<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * fields.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * @param obj instance<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @return true if equals, false otherwise<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public boolean equalsExceptActions(Object obj) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    return obj instanceof Permission;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  @Override<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public boolean equals(Object obj) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    if (!(obj instanceof Permission)) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return false;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span><a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Permission other = (Permission) obj;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    if (actions.isEmpty() &amp;&amp; other.actions.isEmpty()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      return true;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    } else if (!actions.isEmpty() &amp;&amp; !other.actions.isEmpty()) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      if (actions.size() != other.actions.size()) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        return false;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return actions.containsAll(other.actions);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    return false;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
 <span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    return str.toString();<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  /** @return the object version number */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  @Override<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  public byte getVersion() {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    return VERSION;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>  @Override<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public void readFields(DataInput in) throws IOException {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    super.readFields(in);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    int length = (int)in.readByte();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    if (length &gt; 0) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      actions = new Action[length];<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      for (int i = 0; i &lt; length; i++) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        byte b = in.readByte();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        Action a = ACTION_BY_CODE.get(b);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (a == null) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          throw new IOException("Unknown action code '"+<a name="line.192"></a>
-<span class="sourceLineNo">193</span>              Bytes.toStringBinary(new byte[]{b})+"' in input");<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        this.actions[i] = a;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    } else {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      actions = new Action[0];<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  @Override<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  public void write(DataOutput out) throws IOException {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    super.write(out);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    out.writeByte(actions != null ? actions.length : 0);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (actions != null) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      for (Action a: actions) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        out.writeByte(a.code());<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>}<a name="line.212"></a>
+<span class="sourceLineNo">173</span>  @Override<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public int hashCode() {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    final int prime = 37;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    int result = 23;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    for (Action a : actions) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      result = prime * result + a.code();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    result = prime * result + scope.code();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    return result;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Override<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public String toString() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    return "[Permission: " + rawExpression() + "]";<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  protected String rawExpression() {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    StringBuilder raw = new StringBuilder("actions=");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    if (actions != null) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      int i = 0;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      for (Action action : actions) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        if (i &gt; 0) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          raw.append(",");<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        raw.append(action != null ? action.toString() : "NULL");<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        i++;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    return raw.toString();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /** @return the object version number */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  @Override<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  public byte getVersion() {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    return VERSION;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  @Override<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  public void readFields(DataInput in) throws IOException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    super.readFields(in);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    int length = (int) in.readByte();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    actions = EnumSet.noneOf(Action.class);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    if (length &gt; 0) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      for (int i = 0; i &lt; length; i++) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        byte b = in.readByte();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        Action action = ACTION_BY_CODE.get(b);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        if (action == null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>          throw new IOException("Unknown action code '" +<a name="line.220"></a>
+<span class="sourceLineNo">221</span>            Bytes.toStringBinary(new byte[] { b }) + "' in input");<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        }<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        actions.add(action);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    scope = SCOPE_BY_CODE.get(in.readByte());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>  @Override<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  public void write(DataOutput out) throws IOException {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    super.write(out);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    out.writeByte(actions != null ? actions.size() : 0);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    if (actions != null) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      for (Action a: actions) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        out.writeByte(a.code());<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    out.writeByte(scope.code());<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  public Scope getAccessScope() {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return scope;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>}<a name="line.244"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html
index b413e1d..0300d2b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html
@@ -127,173 +127,155 @@
 <span class="sourceLineNo">119</span>   * @param proto the protobuf Permission<a name="line.119"></a>
 <span class="sourceLineNo">120</span>   * @return the converted TablePermission<a name="line.120"></a>
 <span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static TablePermission toTablePermission(AccessControlProtos.Permission proto) {<a name="line.122"></a>
+<span class="sourceLineNo">122</span>  public static Permission toPermission(AccessControlProtos.Permission proto) {<a name="line.122"></a>
 <span class="sourceLineNo">123</span><a name="line.123"></a>
 <span class="sourceLineNo">124</span>    if (proto.getType() == AccessControlProtos.Permission.Type.Global) {<a name="line.124"></a>
 <span class="sourceLineNo">125</span>      AccessControlProtos.GlobalPermission perm = proto.getGlobalPermission();<a name="line.125"></a>
 <span class="sourceLineNo">126</span>      List&lt;Action&gt; actions = toPermissionActions(perm.getActionList());<a name="line.126"></a>
 <span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>      return new TablePermission(null, null, null,<a name="line.128"></a>
-<span class="sourceLineNo">129</span>          actions.toArray(new Permission.Action[actions.size()]));<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    if (proto.getType() == AccessControlProtos.Permission.Type.Namespace) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      AccessControlProtos.NamespacePermission perm = proto.getNamespacePermission();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      List&lt;Permission.Action&gt; actions = toPermissionActions(perm.getActionList());<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>      if (!proto.hasNamespacePermission()) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        throw new IllegalStateException("Namespace must not be empty in NamespacePermission");<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      String namespace = perm.getNamespaceName().toStringUtf8();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return new TablePermission(namespace, actions.toArray(new Permission.Action[actions.size()]));<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    if (proto.getType() == AccessControlProtos.Permission.Type.Table) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      AccessControlProtos.TablePermission perm = proto.getTablePermission();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      List&lt;Permission.Action&gt; actions = toPermissionActions(perm.getActionList());<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>      byte[] qualifier = null;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      byte[] family = null;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      TableName table = null;<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span>      if (!perm.hasTableName()) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        throw new IllegalStateException("TableName cannot be empty");<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      table = toTableName(perm.getTableName());<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>      if (perm.hasFamily()) family = perm.getFamily().toByteArray();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      if (perm.hasQualifier()) qualifier = perm.getQualifier().toByteArray();<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>      return new TablePermission(table, family, qualifier,<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          actions.toArray(new Permission.Action[actions.size()]));<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    throw new IllegalStateException("Unrecognize Perm Type: " + proto.getType());<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * Convert a client Permission to a Permission shaded proto<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * @param perm the client Permission<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * @return the protobuf Permission<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  public static org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      toPermission(Permission perm) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Builder ret =<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission<a name="line.171"></a>
-<span class="sourceLineNo">172</span>            .newBuilder();<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    if (perm instanceof TablePermission) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      TablePermission tablePerm = (TablePermission) perm;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      if (tablePerm.hasNamespace()) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        ret.setType(<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Type.Namespace);<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.NamespacePermission.Builder builder =<a name="line.179"></a>
-<span class="sourceLineNo">180</span>            org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.NamespacePermission<a name="line.180"></a>
-<span class="sourceLineNo">181</span>                .newBuilder();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        builder.setNamespaceName(org.apache.hbase.thirdparty.com.google.protobuf.ByteString<a name="line.182"></a>
-<span class="sourceLineNo">183</span>            .copyFromUtf8(tablePerm.getNamespace()));<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        Permission.Action[] actions = perm.getActions();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        if (actions != null) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>          for (Permission.Action a : actions) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>            builder.addAction(toPermissionAction(a));<a name="line.187"></a>
-<span class="sourceLineNo">188</span>          }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        ret.setNamespacePermission(builder);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return ret.build();<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      } else if (tablePerm.hasTable()) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        ret.setType(<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Type.Table);<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.TablePermission.Builder builder =<a name="line.196"></a>
-<span class="sourceLineNo">197</span>            org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.TablePermission<a name="line.197"></a>
-<span class="sourceLineNo">198</span>                .newBuilder();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        builder.setTableName(toProtoTableName(tablePerm.getTableName()));<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        if (tablePerm.hasFamily()) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>          builder.setFamily(ByteString.copyFrom(tablePerm.getFamily()));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        if (tablePerm.hasQualifier()) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          builder.setQualifier(ByteString.copyFrom(tablePerm.getQualifier()));<a name="line.204"></a>
+<span class="sourceLineNo">128</span>      return new GlobalPermission(actions.toArray(new Permission.Action[actions.size()]));<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    if (proto.getType() == AccessControlProtos.Permission.Type.Namespace) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      AccessControlProtos.NamespacePermission perm = proto.getNamespacePermission();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      List&lt;Permission.Action&gt; actions = toPermissionActions(perm.getActionList());<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>      if (!proto.hasNamespacePermission()) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        throw new IllegalStateException("Namespace must not be empty in NamespacePermission");<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      }<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      String ns = perm.getNamespaceName().toStringUtf8();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      return new NamespacePermission(ns, actions.toArray(new Permission.Action[actions.size()]));<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    }<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    if (proto.getType() == AccessControlProtos.Permission.Type.Table) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      AccessControlProtos.TablePermission perm = proto.getTablePermission();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      List&lt;Permission.Action&gt; actions = toPermissionActions(perm.getActionList());<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>      byte[] qualifier = null;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      byte[] family = null;<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>      if (!perm.hasTableName()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        throw new IllegalStateException("TableName cannot be empty");<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      TableName table = toTableName(perm.getTableName());<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>      if (perm.hasFamily()) family = perm.getFamily().toByteArray();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      if (perm.hasQualifier()) qualifier = perm.getQualifier().toByteArray();<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>      return new TablePermission(table, family, qualifier,<a name="line.155"></a>
+<span class="sourceLineNo">156</span>          actions.toArray(new Permission.Action[actions.size()]));<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    throw new IllegalStateException("Unrecognize Perm Type: " + proto.getType());<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  }<a name="line.159"></a>
+<span class="sourceLineNo">160</span><a name="line.160"></a>
+<span class="sourceLineNo">161</span>  /**<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * Convert a client Permission to a Permission shaded proto<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @param perm the client Permission<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @return the protobuf Permission<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public static org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      toPermission(Permission perm) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Builder ret =<a name="line.168"></a>
+<span class="sourceLineNo">169</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission<a name="line.169"></a>
+<span class="sourceLineNo">170</span>            .newBuilder();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    if (perm instanceof NamespacePermission) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      NamespacePermission nsPerm = (NamespacePermission) perm;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      ret.setType(<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Type.Namespace);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.NamespacePermission.Builder builder =<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.NamespacePermission<a name="line.176"></a>
+<span class="sourceLineNo">177</span>          .newBuilder();<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      builder.setNamespaceName(org.apache.hbase.thirdparty.com.google.protobuf.ByteString<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        .copyFromUtf8(nsPerm.getNamespace()));<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      Permission.Action[] actions = perm.getActions();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      if (actions != null) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        for (Permission.Action a : actions) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>          builder.addAction(toPermissionAction(a));<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      ret.setNamespacePermission(builder);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    } else if (perm instanceof TablePermission) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      TablePermission tablePerm = (TablePermission) perm;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      ret.setType(<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Type.Table);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.TablePermission.Builder builder =<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.TablePermission<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          .newBuilder();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      builder.setTableName(toProtoTableName(tablePerm.getTableName()));<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (tablePerm.hasFamily()) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        builder.setFamily(ByteString.copyFrom(tablePerm.getFamily()));<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      if (tablePerm.hasQualifier()) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        builder.setQualifier(ByteString.copyFrom(tablePerm.getQualifier()));<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      Permission.Action[] actions = perm.getActions();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      if (actions != null) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        for (Permission.Action a : actions) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>          builder.addAction(toPermissionAction(a));<a name="line.204"></a>
 <span class="sourceLineNo">205</span>        }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        Permission.Action actions[] = perm.getActions();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        if (actions != null) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>          for (Permission.Action a : actions) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>            builder.addAction(toPermissionAction(a));<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        ret.setTablePermission(builder);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        return ret.build();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>    ret.setType(<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Type.Global);<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>    org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.GlobalPermission.Builder builder =<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.GlobalPermission<a name="line.221"></a>
-<span class="sourceLineNo">222</span>            .newBuilder();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    Permission.Action actions[] = perm.getActions();<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    if (actions != null) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      for (Permission.Action a : actions) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        builder.addAction(toPermissionAction(a));<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    ret.setGlobalPermission(builder);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    return ret.build();<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * Convert a shaded protobuf UserTablePermissions to a ListMultimap&amp;lt;String, TablePermission&amp;gt;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * where key is username.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * @param proto the protobuf UserPermission<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * @return the converted UserPermission<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  public static ListMultimap&lt;String, TablePermission&gt; toUserTablePermissions(<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions proto) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    ListMultimap&lt;String, TablePermission&gt; perms = ArrayListMultimap.create();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions.UserPermissions userPerm;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    for (int i = 0; i &lt; proto.getUserPermissionsCount(); i++) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      userPerm = proto.getUserPermissions(i);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      for (int j = 0; j &lt; userPerm.getPermissionsCount(); j++) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        TablePermission tablePerm = toTablePermission(userPerm.getPermissions(j));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        perms.put(userPerm.getUser().toStringUtf8(), tablePerm);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    return perms;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * Convert a ListMultimap&amp;lt;String, TablePermission&amp;gt; where key is username to a shaded<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * protobuf UserPermission<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * @param perm the list of user and table permissions<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @return the protobuf UserTablePermissions<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  public static<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      toUserTablePermissions(ListMultimap&lt;String, TablePermission&gt; perm) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions.Builder builder =<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions<a name="line.263"></a>
-<span class="sourceLineNo">264</span>            .newBuilder();<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    for (Map.Entry&lt;String, Collection&lt;TablePermission&gt;&gt; entry : perm.asMap().entrySet()) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions.UserPermissions.Builder userPermBuilder =<a name="line.266"></a>
-<span class="sourceLineNo">267</span>          org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions.UserPermissions<a name="line.267"></a>
-<span class="sourceLineNo">268</span>              .newBuilder();<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      userPermBuilder.setUser(ByteString.copyFromUtf8(entry.getKey()));<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      for (TablePermission tablePerm : entry.getValue()) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        userPermBuilder.addPermissions(toPermission(tablePerm));<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      builder.addUserPermissions(userPermBuilder.build());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    return builder.build();<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * Converts a user permission proto to a client user permission object.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   *<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * @param proto the protobuf UserPermission<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * @return the converted UserPermission<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public static UserPermission toUserPermission(org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UserPermission proto) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    return new UserPermission(proto.getUser().toByteArray(),<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        toTablePermission(proto.getPermission()));<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>}<a name="line.288"></a>
+<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      ret.setTablePermission(builder);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    } else {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      // perm.getAccessScope() == Permission.Scope.GLOBAL<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      ret.setType(<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.Permission.Type.Global);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.GlobalPermission.Builder builder =<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.GlobalPermission<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          .newBuilder();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      Permission.Action[] actions = perm.getActions();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      if (actions != null) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        for (Permission.Action a : actions) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          builder.addAction(toPermissionAction(a));<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      ret.setGlobalPermission(builder);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    return ret.build();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>  /**<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * Convert a shaded protobuf UserTablePermissions to a ListMultimap&amp;lt;String, TablePermission&amp;gt;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * where key is username.<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param proto the protobuf UserPermission<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @return the converted UserPermission<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  public static ListMultimap&lt;String, Permission&gt; toUserTablePermissions(<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions proto) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    ListMultimap&lt;String, Permission&gt; perms = ArrayListMultimap.create();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions.UserPermissions userPerm;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    for (int i = 0; i &lt; proto.getUserPermissionsCount(); i++) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      userPerm = proto.getUserPermissions(i);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      for (int j = 0; j &lt; userPerm.getPermissionsCount(); j++) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        Permission perm = toPermission(userPerm.getPermissions(j));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        perms.put(userPerm.getUser().toStringUtf8(), perm);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return perms;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  /**<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * Convert a ListMultimap&amp;lt;String, TablePermission&amp;gt; where key is username to a shaded<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * protobuf UserPermission<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @param perm the list of user and table permissions<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @return the protobuf UserTablePermissions<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  public static<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      toUserTablePermissions(ListMultimap&lt;String, UserPermission&gt; perm) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions.Builder builder =<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions<a name="line.256"></a>
+<span class="sourceLineNo">257</span>            .newBuilder();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    for (Map.Entry&lt;String, Collection&lt;UserPermission&gt;&gt; entry : perm.asMap().entrySet()) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions.UserPermissions.Builder userPermBuilder =<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.UsersAndPermissions.UserPermissions<a name="line.260"></a>
+<span class="sourceLineNo">261</span>              .newBuilder();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      userPermBuilder.setUser(ByteString.copyFromUtf8(entry.getKey()));<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      for (UserPermission userPerm : entry.getValue()) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        userPermBuilder.addPermissions(toPermission(userPerm.getPermission()));<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      builder.addUserPermissions(userPermBuilder.build());<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    return builder.build();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>}<a name="line.270"></a>
 
 
 


[44/51] [partial] hbase-site git commit: Published site at 130057f13774f6b213cdb06952c805a29d59396e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
index 8989ba1..e6df984 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":6};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":6,"i11":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -303,13 +303,21 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <div class="block">Check whether we still need to make the call to RS.</div>
 </td>
 </tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#waitInitialized-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">waitInitialized</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
+<div class="block">The <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>Procedure.doAcquireLock(Object, ProcedureStore)</code></a> will be split into two steps, first, it will
+ call us to determine whether we need to wait for initialization, second, it will call
+ <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-"><code>Procedure.acquireLock(Object)</code></a> to actually handle the lock for this procedure.</div>
+</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex-int-">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#afterReplay-TEnvironment-">afterReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay-TEnvironment-">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#bypass-TEnvironment-">bypass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo-org.apache.hadoop.hbase.procedure2.Procedure-">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup-TEnvironment-">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute-TEnvironment-">doExecute</a>, 
 <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback-TEnvironment-">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime--">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getChildrenLatch--">getChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException--">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate--">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey--">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner--">getOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId--">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-
 TEnvironment-">getProcedureMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId--">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode-long-">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcName--">getProcName</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult--">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId-java.util.Map-org.apache.hadoop.hbase.procedure2.Procedure-">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcId--">getRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes--">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState--">getState</a>,
  <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getSubmittedTime--">getSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout--">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeoutTimestamp--">getTimeoutTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasChildren--">hasChildren</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException--">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock--">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner--">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent--">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout--">hasTimeout</a>, <a href="
 ../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#haveSameParent-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure-">haveSameParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch--">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isBypass--">isBypass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed--">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished--">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isInitializing--">isInitializing</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isLockedWhenLoading--">isLockedWhenLoading</a>, <a href="../../
 ../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isRunnable--">isRunnable</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess--">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting--">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex--">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure-java.lang.String-java.lang.String-">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch-int-">setChildrenLatch</a>, <a href="../../../../../../org/apa
 che/hadoop/hbase/procedure2/Procedure.html#setFailure-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure-java.lang.String-java.lang.Throwable-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setLastUpdate-long-">setLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey-org.apache.hadoop.hbase.util.NonceKey-">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-java.lang.String-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId-long-">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#se
 tProcId-long-">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult-byte:A-">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setRootProcId-long-">setRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes-java.util.List-">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState-">setState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setSubmittedTime-long-">setSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout-int-">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure-TEnvironment-">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedur
 e2/Procedure.html#shouldWaitClientAck-TEnvironment-">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#skipPersistence--">skipPersistence</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString--">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass--">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">toStringClassDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringDetails--">toStringDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringSimpleSB--">toStringSimpleSB</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState-java.lang.StringBuilder-">toStringState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Pr
 ocedure.html#updateMetricsOnFinish-TEnvironment-long-boolean-">updateMetricsOnFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateMetricsOnSubmit-TEnvironment-">updateMetricsOnSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp--">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-">waitInitialized</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted--">wasExecuted</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex-int-">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#afterReplay-TEnvironment-">afterReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay-TEnvironment-">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#bypass-TEnvironment-">bypass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo-org.apache.hadoop.hbase.procedure2.Procedure-">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup-TEnvironment-">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute-TEnvironment-">doExecute</a>, 
 <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback-TEnvironment-">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime--">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getChildrenLatch--">getChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException--">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate--">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey--">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner--">getOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId--">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-
 TEnvironment-">getProcedureMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId--">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode-long-">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcName--">getProcName</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult--">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId-java.util.Map-org.apache.hadoop.hbase.procedure2.Procedure-">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcId--">getRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes--">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState--">getState</a>,
  <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getSubmittedTime--">getSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout--">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeoutTimestamp--">getTimeoutTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasChildren--">hasChildren</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException--">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock--">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner--">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent--">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout--">hasTimeout</a>, <a href="
 ../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#haveSameParent-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure-">haveSameParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch--">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isBypass--">isBypass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed--">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished--">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isInitializing--">isInitializing</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isLockedWhenLoading--">isLockedWhenLoading</a>, <a href="../../
 ../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isRunnable--">isRunnable</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess--">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting--">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex--">removeStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure-java.lang.String-java.lang.String-">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch-int-">setChildrenLatch</a>, <a href="../../../../../../org/apa
 che/hadoop/hbase/procedure2/Procedure.html#setFailure-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure-java.lang.String-java.lang.Throwable-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setLastUpdate-long-">setLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey-org.apache.hadoop.hbase.util.NonceKey-">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-java.lang.String-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId-long-">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#se
 tProcId-long-">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult-byte:A-">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setRootProcId-long-">setRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes-java.util.List-">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState-">setState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setSubmittedTime-long-">setSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout-int-">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure-TEnvironment-">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedur
 e2/Procedure.html#shouldWaitClientAck-TEnvironment-">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#skipPersistence--">skipPersistence</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString--">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass--">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">toStringClassDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringDetails--">toStringDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringSimpleSB--">toStringSimpleSB</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState-java.lang.StringBuilder-">toStringState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Pr
 ocedure.html#updateMetricsOnFinish-TEnvironment-long-boolean-">updateMetricsOnFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateMetricsOnSubmit-TEnvironment-">updateMetricsOnSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp--">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted--">wasExecuted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -491,13 +499,38 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 </dl>
 </li>
 </ul>
+<a name="waitInitialized-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>waitInitialized</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.111">waitInitialized</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-">Procedure</a></code></span></div>
+<div class="block">The <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>Procedure.doAcquireLock(Object, ProcedureStore)</code></a> will be split into two steps, first, it will
+ call us to determine whether we need to wait for initialization, second, it will call
+ <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-"><code>Procedure.acquireLock(Object)</code></a> to actually handle the lock for this procedure.
+ <p/>
+ This is because that when master restarts, we need to restore the lock state for all the
+ procedures to not break the semantic if <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a> is true. But the
+ <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2"><code>ProcedureExecutor</code></a> will be started before the master finish initialization(as it is part
+ of the initialization!), so we need to split the code into two steps, and when restore, we just
+ restore the lock part and ignore the waitInitialized part. Otherwise there will be dead lock.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-">waitInitialized</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true means we need to wait until the environment has been initialized, otherwise true.</dd>
+</dl>
+</li>
+</ul>
 <a name="rollback-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>rollback</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.111">rollback</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.122">rollback</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback-TEnvironment-">Procedure</a></code></span></div>
@@ -524,7 +557,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.116">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.127">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort-TEnvironment-">Procedure</a></code></span></div>
 <div class="block">The abort() call is asynchronous and each procedure must decide how to deal
  with it, if they want to be abortable. The simplest implementation
@@ -547,14 +580,16 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldDispatch</h4>
-<pre>protected abstract&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.129">shouldDispatch</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</pre>
+<pre>protected abstract&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.142">shouldDispatch</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</pre>
 <div class="block">Check whether we still need to make the call to RS.
  <p/>
- Usually this will not happen if we do not allow assigning a already onlined region. But if we
- have something wrong in the RSProcedureDispatcher, where we have already sent the request to
- RS, but then we tell the upper layer the remote call is failed due to rpc timeout or connection
- closed or anything else, then this issue can still happen. So here we add a check to make it
- more robust.</div>
+ This could happen when master restarts. Since we do not know whether a request has already been
+ sent to the region server after we add a remote operation to the dispatcher, so the safe way is
+ to not persist the dispatched field and try to add the remote operation again. But it is
+ possible that we do have already sent the request to region server and it has also sent back
+ the response, so here we need to check the region state, if it is not in the expecting state,
+ we should give up, otherwise we may hang for ever, as the region server will just ignore
+ redundant calls.</div>
 </li>
 </ul>
 <a name="execute-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -563,7 +598,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>execute</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.132">execute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.145">execute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                                            throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
                                                   <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -593,7 +628,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockList">
 <li class="blockList">
 <h4>serializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.165">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.178">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
 <div class="block">The user-level code of the procedure may have some state to
@@ -615,7 +650,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
 <ul class="blockListLast">
 <li class="blockList">
 <h4>deserializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.172">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.185">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
 <div class="block">Called on store load to allow the user to decode the previously serialized

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index 1799704..abd92a9 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -198,8 +198,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index fbc9ab9..faac8b0 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -348,10 +348,10 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
index 852c03a..883e8b2 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
@@ -922,13 +922,17 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#waitInitialized-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">waitInitialized</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">RegionRemoteProcedureBase.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#waitInitialized-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">waitInitialized</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#waitInitialized-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">waitInitialized</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">SplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#writeMaxSequenceIdFile-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">writeMaxSequenceIdFile</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#writeMaxSequenceIdFile-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">writeMaxSequenceIdFile</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 8079e92..818dbcb 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -215,10 +215,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index de5d419..3b03fb4 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -437,19 +437,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 1c10e27..4f8749a 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,11 +216,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index efe3c3d..46b4d02 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -229,13 +229,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.html
index 0ed483a..19bef67 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.html
@@ -529,7 +529,7 @@
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/TablePermission.html" title="class in org.apache.hadoop.hbase.security.access">TablePermission</a>&gt;&gt;</code></td>
+<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">UserPermission</a>&gt;&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AccessControlLists.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlLists.html#loadAll-org.apache.hadoop.hbase.regionserver.Region-">loadAll</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;aclRegion)</code>
 <div class="block">Loads all of the permission grants stored in a region of the <code>_acl_</code>
  table.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 3c3ea5f..f932458 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -716,20 +716,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 6851ee1..23060c2 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index 034077c..c20ff47 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/AccessChecker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/AccessChecker.html b/devapidocs/org/apache/hadoop/hbase/security/access/AccessChecker.html
index ac0967d..5437682 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/AccessChecker.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/AccessChecker.html
@@ -156,7 +156,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#AUDITLOG">AUDITLOG</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#authManager">authManager</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
@@ -220,7 +220,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason)</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#getAuthManager--">getAuthManager</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
@@ -328,7 +328,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html#stop--">stop</a></span>()</code>
-<div class="block">Releases <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><code>TableAuthManager</code></a>'s reference.</div>
+<div class="block">Releases <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><code>AuthManager</code></a>'s reference.</div>
 </td>
 </tr>
 <tr id="i15" class="rowColor">
@@ -383,7 +383,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>authManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessChecker.html#line.53">authManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessChecker.html#line.53">authManager</a></pre>
 </li>
 </ul>
 <a name="groupService">
@@ -458,7 +458,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>stop</h4>
 <pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessChecker.html#line.92">stop</a>()</pre>
-<div class="block">Releases <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><code>TableAuthManager</code></a>'s reference.</div>
+<div class="block">Releases <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access"><code>AuthManager</code></a>'s reference.</div>
 </li>
 </ul>
 <a name="getAuthManager--">
@@ -467,7 +467,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getAuthManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessChecker.html#line.96">getAuthManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessChecker.html#line.96">getAuthManager</a>()</pre>
 </li>
 </ul>
 <a name="requireAccess-org.apache.hadoop.hbase.security.User-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.Permission.Action...-">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/68eae623/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlFilter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlFilter.html b/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlFilter.html
index 4e28610..d568438 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/AccessControlFilter.html
@@ -126,7 +126,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/filter/FilterBase.htm
 
  <p>
  TODO: There is room for further performance optimization here.
- Calling TableAuthManager.authorize() per KeyValue imposes a fair amount of
+ Calling AuthManager.authorize() per KeyValue imposes a fair amount of
  overhead.  A more optimized solution might look at the qualifiers where
  permissions are actually granted and explicitly limit the scan to those.
  </p>
@@ -180,7 +180,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/filter/FilterBase.htm
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#authManager">authManager</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -246,7 +246,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/filter/FilterBase.htm
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#AccessControlFilter-org.apache.hadoop.hbase.security.access.TableAuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">AccessControlFilter</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;mgr,
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.html#AccessControlFilter-org.apache.hadoop.hbase.security.access.AuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">AccessControlFilter</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;mgr,
                    <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;ugi,
                    <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                    <a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access">AccessControlFilter.Strategy</a>&nbsp;strategy,
@@ -346,7 +346,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/filter/FilterBase.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>authManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.html#line.61">authManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.html#line.61">authManager</a></pre>
 </li>
 </ul>
 <a name="table">
@@ -448,13 +448,13 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/filter/FilterBase.htm
 <div class="block">For Writable</div>
 </li>
 </ul>
-<a name="AccessControlFilter-org.apache.hadoop.hbase.security.access.TableAuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">
+<a name="AccessControlFilter-org.apache.hadoop.hbase.security.access.AuthManager-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.access.AccessControlFilter.Strategy-java.util.Map-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AccessControlFilter</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.html#line.78">AccessControlFilter</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TableAuthManager.html" title="class in org.apache.hadoop.hbase.security.access">TableAuthManager</a>&nbsp;mgr,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/AccessControlFilter.html#line.78">AccessControlFilter</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/AuthManager.html" title="class in org.apache.hadoop.hbase.security.access">AuthManager</a>&nbsp;mgr,
                     <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;ugi,
                     <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                     <a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access">AccessControlFilter.Strategy</a>&nbsp;strategy,