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/07/31 14:49:40 UTC

[01/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 55f2f138d -> 5fd895c68


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/testdevapidocs/src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html
index f0e0faf..3e37614 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html
@@ -27,93 +27,112 @@
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import org.apache.hadoop.conf.Configuration;<a name="line.20"></a>
 <span class="sourceLineNo">021</span>import org.apache.hadoop.fs.CommonConfigurationKeys;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.slf4j.Logger;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.slf4j.LoggerFactory;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hbase.thirdparty.com.google.common.base.Strings;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.27"></a>
-<span class="sourceLineNo">028</span><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.net.InetAddress;<a name="line.30"></a>
-<span class="sourceLineNo">031</span><a name="line.31"></a>
-<span class="sourceLineNo">032</span>@InterfaceAudience.Private<a name="line.32"></a>
-<span class="sourceLineNo">033</span>public class HBaseKerberosUtils {<a name="line.33"></a>
-<span class="sourceLineNo">034</span>  private static final Logger LOG = LoggerFactory.getLogger(HBaseKerberosUtils.class);<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>  public static final String KRB_PRINCIPAL = "hbase.regionserver.kerberos.principal";<a name="line.36"></a>
-<span class="sourceLineNo">037</span>  public static final String MASTER_KRB_PRINCIPAL = "hbase.master.kerberos.principal";<a name="line.37"></a>
-<span class="sourceLineNo">038</span>  public static final String KRB_KEYTAB_FILE = "hbase.regionserver.keytab.file";<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>  public static boolean isKerberosPropertySetted() {<a name="line.40"></a>
-<span class="sourceLineNo">041</span>    String krbPrincipal = System.getProperty(KRB_PRINCIPAL);<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    String krbKeytab = System.getProperty(KRB_KEYTAB_FILE);<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    if (Strings.isNullOrEmpty(krbPrincipal) || Strings.isNullOrEmpty(krbKeytab)) {<a name="line.43"></a>
-<span class="sourceLineNo">044</span>      return false;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>    }<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    return true;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  public static void setPrincipalForTesting(String principal) {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    setSystemProperty(KRB_PRINCIPAL, principal);<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>  public static void setKeytabFileForTesting(String keytabFile) {<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    setSystemProperty(KRB_KEYTAB_FILE, keytabFile);<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>  public static void setSystemProperty(String propertyName, String propertyValue) {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    System.setProperty(propertyName, propertyValue);<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>  public static String getKeytabFileForTesting() {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    return System.getProperty(KRB_KEYTAB_FILE);<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>  public static String getPrincipalForTesting() {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    return System.getProperty(KRB_PRINCIPAL);<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>  public static Configuration getConfigurationWoPrincipal() {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    Configuration conf = HBaseConfiguration.create();<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    conf.set(CommonConfigurationKeys.HADOOP_SECURITY_AUTHENTICATION, "kerberos");<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    conf.set(User.HBASE_SECURITY_CONF_KEY, "kerberos");<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    conf.setBoolean(User.HBASE_SECURITY_AUTHORIZATION_CONF_KEY, true);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    return conf;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  public static Configuration getSecuredConfiguration() {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    Configuration conf = HBaseConfiguration.create();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    setSecuredConfiguration(conf);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    return conf;<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 static void setSecuredConfiguration(Configuration conf) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    conf.set(CommonConfigurationKeys.HADOOP_SECURITY_AUTHENTICATION, "kerberos");<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    conf.set(User.HBASE_SECURITY_CONF_KEY, "kerberos");<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    conf.setBoolean(User.HBASE_SECURITY_AUTHORIZATION_CONF_KEY, true);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    conf.set(KRB_KEYTAB_FILE, System.getProperty(KRB_KEYTAB_FILE));<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    conf.set(KRB_PRINCIPAL, System.getProperty(KRB_PRINCIPAL));<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    conf.set(MASTER_KRB_PRINCIPAL, System.getProperty(KRB_PRINCIPAL));<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>  public static UserGroupInformation loginAndReturnUGI(Configuration conf, String username)<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      throws IOException {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    String hostname = InetAddress.getLocalHost().getHostName();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    String keyTabFileConfKey = "hbase." + username + ".keytab.file";<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    String keyTabFileLocation = conf.get(keyTabFileConfKey);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    String principalConfKey = "hbase." + username + ".kerberos.principal";<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    String principal = org.apache.hadoop.security.SecurityUtil<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        .getServerPrincipal(conf.get(principalConfKey), hostname);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    if (keyTabFileLocation == null || principal == null) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      LOG.warn("Principal or key tab file null for : " + principalConfKey + ", "<a name="line.101"></a>
-<span class="sourceLineNo">102</span>          + keyTabFileConfKey);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    UserGroupInformation ugi =<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        UserGroupInformation.loginUserFromKeytabAndReturnUGI(principal, keyTabFileLocation);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    return ugi;<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">022</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HBaseConfiguration;<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>import org.slf4j.Logger;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.slf4j.LoggerFactory;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hbase.thirdparty.com.google.common.base.Strings;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.28"></a>
+<span class="sourceLineNo">029</span><a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.io.IOException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.net.InetAddress;<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 HBaseKerberosUtils {<a name="line.34"></a>
+<span class="sourceLineNo">035</span>  private static final Logger LOG = LoggerFactory.getLogger(HBaseKerberosUtils.class);<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>  public static final String KRB_PRINCIPAL = "hbase.regionserver.kerberos.principal";<a name="line.37"></a>
+<span class="sourceLineNo">038</span>  public static final String MASTER_KRB_PRINCIPAL = "hbase.master.kerberos.principal";<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  public static final String KRB_KEYTAB_FILE = "hbase.regionserver.keytab.file";<a name="line.39"></a>
+<span class="sourceLineNo">040</span>  public static final String CLIENT_PRINCIPAL = AuthUtil.HBASE_CLIENT_KERBEROS_PRINCIPAL;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  public static final String CLIENT_KEYTAB = AuthUtil.HBASE_CLIENT_KEYTAB_FILE;<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  public static boolean isKerberosPropertySetted() {<a name="line.43"></a>
+<span class="sourceLineNo">044</span>    String krbPrincipal = System.getProperty(KRB_PRINCIPAL);<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    String krbKeytab = System.getProperty(KRB_KEYTAB_FILE);<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    if (Strings.isNullOrEmpty(krbPrincipal) || Strings.isNullOrEmpty(krbKeytab)) {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>      return false;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    }<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    return true;<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>  public static void setPrincipalForTesting(String principal) {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    setSystemProperty(KRB_PRINCIPAL, principal);<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>  public static void setKeytabFileForTesting(String keytabFile) {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    setSystemProperty(KRB_KEYTAB_FILE, keytabFile);<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>  public static void setClientPrincipalForTesting(String clientPrincipal) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    setSystemProperty(CLIENT_PRINCIPAL, clientPrincipal);<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>  public static void setClientKeytabForTesting(String clientKeytab) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    setSystemProperty(CLIENT_KEYTAB, clientKeytab);<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>  public static void setSystemProperty(String propertyName, String propertyValue) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    System.setProperty(propertyName, propertyValue);<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>  public static String getKeytabFileForTesting() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    return System.getProperty(KRB_KEYTAB_FILE);<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>  public static String getPrincipalForTesting() {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    return System.getProperty(KRB_PRINCIPAL);<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>  public static String getClientPrincipalForTesting() {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    return System.getProperty(CLIENT_PRINCIPAL);<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>  public static String getClientKeytabForTesting() {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return System.getProperty(CLIENT_KEYTAB);<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>  public static Configuration getConfigurationWoPrincipal() {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    Configuration conf = HBaseConfiguration.create();<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    conf.set(CommonConfigurationKeys.HADOOP_SECURITY_AUTHENTICATION, "kerberos");<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    conf.set(User.HBASE_SECURITY_CONF_KEY, "kerberos");<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    conf.setBoolean(User.HBASE_SECURITY_AUTHORIZATION_CONF_KEY, true);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    return conf;<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 static Configuration getSecuredConfiguration() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    Configuration conf = HBaseConfiguration.create();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    setSecuredConfiguration(conf);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    return conf;<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 static void setSecuredConfiguration(Configuration conf) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    conf.set(CommonConfigurationKeys.HADOOP_SECURITY_AUTHENTICATION, "kerberos");<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    conf.set(User.HBASE_SECURITY_CONF_KEY, "kerberos");<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    conf.setBoolean(User.HBASE_SECURITY_AUTHORIZATION_CONF_KEY, true);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    conf.set(KRB_KEYTAB_FILE, System.getProperty(KRB_KEYTAB_FILE));<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    conf.set(KRB_PRINCIPAL, System.getProperty(KRB_PRINCIPAL));<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    conf.set(MASTER_KRB_PRINCIPAL, System.getProperty(KRB_PRINCIPAL));<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 UserGroupInformation loginAndReturnUGI(Configuration conf, String username)<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      throws IOException {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    String hostname = InetAddress.getLocalHost().getHostName();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    String keyTabFileConfKey = "hbase." + username + ".keytab.file";<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    String keyTabFileLocation = conf.get(keyTabFileConfKey);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    String principalConfKey = "hbase." + username + ".kerberos.principal";<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    String principal = org.apache.hadoop.security.SecurityUtil<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        .getServerPrincipal(conf.get(principalConfKey), hostname);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    if (keyTabFileLocation == null || principal == null) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      LOG.warn("Principal or key tab file null for : " + principalConfKey + ", "<a name="line.120"></a>
+<span class="sourceLineNo">121</span>          + keyTabFileConfKey);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    }<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    UserGroupInformation ugi =<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        UserGroupInformation.loginUserFromKeytabAndReturnUGI(principal, keyTabFileLocation);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    return ugi;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/testdevapidocs/src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html
index 969f244..cf5821c 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html
@@ -25,97 +25,138 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.security;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.security.HBaseKerberosUtils.getConfigurationWoPrincipal;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.security.HBaseKerberosUtils.getKeytabFileForTesting;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.security.HBaseKerberosUtils.getPrincipalForTesting;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.security.HBaseKerberosUtils.getSecuredConfiguration;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.junit.Assert.assertFalse;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.junit.Assert.assertNotNull;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.junit.Assert.assertTrue;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.io.File;<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 org.apache.hadoop.conf.Configuration;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.SecurityTests;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.minikdc.MiniKdc;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.junit.AfterClass;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.BeforeClass;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.junit.ClassRule;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.junit.Test;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.junit.experimental.categories.Category;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>@Category({ SecurityTests.class, SmallTests.class })<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public class TestUsersOperationsWithSecureHadoop {<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>  @ClassRule<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.47"></a>
-<span class="sourceLineNo">048</span>      HBaseClassTestRule.forClass(TestUsersOperationsWithSecureHadoop.class);<a name="line.48"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.security.HBaseKerberosUtils.getClientKeytabForTesting;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.security.HBaseKerberosUtils.getClientPrincipalForTesting;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.security.HBaseKerberosUtils.getKeytabFileForTesting;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.security.HBaseKerberosUtils.getPrincipalForTesting;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.security.HBaseKerberosUtils.getSecuredConfiguration;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.junit.Assert.assertEquals;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.junit.Assert.assertFalse;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.junit.Assert.assertNotNull;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.junit.Assert.assertTrue;<a name="line.28"></a>
+<span class="sourceLineNo">029</span><a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.io.File;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.io.IOException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.testclassification.SecurityTests;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.minikdc.MiniKdc;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.AfterClass;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.junit.BeforeClass;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.junit.ClassRule;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.junit.Test;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.junit.experimental.categories.Category;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>@Category({ SecurityTests.class, SmallTests.class })<a name="line.47"></a>
+<span class="sourceLineNo">048</span>public class TestUsersOperationsWithSecureHadoop {<a name="line.48"></a>
 <span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private static final File KEYTAB_FILE = new File(TEST_UTIL.getDataTestDir("keytab").toUri()<a name="line.51"></a>
-<span class="sourceLineNo">052</span>      .getPath());<a name="line.52"></a>
+<span class="sourceLineNo">050</span>  @ClassRule<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      HBaseClassTestRule.forClass(TestUsersOperationsWithSecureHadoop.class);<a name="line.52"></a>
 <span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private static MiniKdc KDC;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private static String HOST = "localhost";<a name="line.56"></a>
+<span class="sourceLineNo">054</span>  private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private static final File KEYTAB_FILE = new File(TEST_UTIL.getDataTestDir("keytab").toUri()<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      .getPath());<a name="line.56"></a>
 <span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private static String PRINCIPAL;<a name="line.58"></a>
+<span class="sourceLineNo">058</span>  private static MiniKdc KDC;<a name="line.58"></a>
 <span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  @BeforeClass<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  public static void setUp() throws Exception {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    KDC = TEST_UTIL.setupMiniKdc(KEYTAB_FILE);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    PRINCIPAL = "hbase/" + HOST;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    KDC.createPrincipal(KEYTAB_FILE, PRINCIPAL);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    HBaseKerberosUtils.setPrincipalForTesting(PRINCIPAL + "@" + KDC.getRealm());<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>  @AfterClass<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public static void tearDown() throws IOException {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    if (KDC != null) {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      KDC.stop();<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    }<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    TEST_UTIL.cleanupTestDir();<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>  /**<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * test login with security enabled configuration To run this test, we must specify the following<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * system properties:<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * &lt;p&gt;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * &lt;b&gt; hbase.regionserver.kerberos.principal &lt;/b&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * &lt;p&gt;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * &lt;b&gt; hbase.regionserver.keytab.file &lt;/b&gt;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @throws IOException<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   */<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  @Test<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  public void testUserLoginInSecureHadoop() throws Exception {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    UserGroupInformation defaultLogin = UserGroupInformation.getLoginUser();<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    Configuration conf = getConfigurationWoPrincipal();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    User.login(conf, HBaseKerberosUtils.KRB_KEYTAB_FILE, HBaseKerberosUtils.KRB_PRINCIPAL,<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      "localhost");<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>    UserGroupInformation failLogin = UserGroupInformation.getLoginUser();<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    assertTrue("ugi should be the same in case fail login", defaultLogin.equals(failLogin));<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>    String nnKeyTab = getKeytabFileForTesting();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    String dnPrincipal = getPrincipalForTesting();<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>    assertNotNull("KerberosKeytab was not specified", nnKeyTab);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    assertNotNull("KerberosPrincipal was not specified", dnPrincipal);<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>    conf = getSecuredConfiguration();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    UserGroupInformation.setConfiguration(conf);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    User.login(conf, HBaseKerberosUtils.KRB_KEYTAB_FILE, HBaseKerberosUtils.KRB_PRINCIPAL,<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      "localhost");<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    UserGroupInformation successLogin = UserGroupInformation.getLoginUser();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    assertFalse("ugi should be different in in case success login",<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      defaultLogin.equals(successLogin));<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">060</span>  private static String HOST = "localhost";<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private static String PRINCIPAL;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static String CLIENT_NAME;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  @BeforeClass<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public static void setUp() throws Exception {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    KDC = TEST_UTIL.setupMiniKdc(KEYTAB_FILE);<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    PRINCIPAL = "hbase/" + HOST;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    CLIENT_NAME = "foo";<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    KDC.createPrincipal(KEYTAB_FILE, PRINCIPAL, CLIENT_NAME);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    HBaseKerberosUtils.setPrincipalForTesting(PRINCIPAL + "@" + KDC.getRealm());<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    HBaseKerberosUtils.setKeytabFileForTesting(KEYTAB_FILE.getAbsolutePath());<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    HBaseKerberosUtils.setClientPrincipalForTesting(CLIENT_NAME + "@" + KDC.getRealm());<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    HBaseKerberosUtils.setClientKeytabForTesting(KEYTAB_FILE.getAbsolutePath());<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>  @AfterClass<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  public static void tearDown() throws IOException {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    if (KDC != null) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      KDC.stop();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    }<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    TEST_UTIL.cleanupTestDir();<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>  /**<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * test login with security enabled configuration To run this test, we must specify the following<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * system properties:<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * &lt;p&gt;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * &lt;b&gt; hbase.regionserver.kerberos.principal &lt;/b&gt;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * &lt;p&gt;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * &lt;b&gt; hbase.regionserver.keytab.file &lt;/b&gt;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @throws IOException<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  @Test<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public void testUserLoginInSecureHadoop() throws Exception {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    // Default login is system user.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    UserGroupInformation defaultLogin = UserGroupInformation.getCurrentUser();<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    String nnKeyTab = getKeytabFileForTesting();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    String dnPrincipal = getPrincipalForTesting();<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    assertNotNull("KerberosKeytab was not specified", nnKeyTab);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    assertNotNull("KerberosPrincipal was not specified", dnPrincipal);<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>    Configuration conf = getSecuredConfiguration();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    UserGroupInformation.setConfiguration(conf);<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    User.login(conf, HBaseKerberosUtils.KRB_KEYTAB_FILE, HBaseKerberosUtils.KRB_PRINCIPAL,<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      "localhost");<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    UserGroupInformation successLogin = UserGroupInformation.getLoginUser();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    assertFalse("ugi should be different in in case success login",<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      defaultLogin.equals(successLogin));<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>  @Test<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  public void testLoginWithUserKeytabAndPrincipal() throws Exception {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    String clientKeytab = getClientKeytabForTesting();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    String clientPrincipal = getClientPrincipalForTesting();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    assertNotNull("Path for client keytab is not specified.", clientKeytab);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    assertNotNull("Client principal is not specified.", clientPrincipal);<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>    Configuration conf = getSecuredConfiguration();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.set(AuthUtil.HBASE_CLIENT_KEYTAB_FILE, clientKeytab);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.set(AuthUtil.HBASE_CLIENT_KERBEROS_PRINCIPAL, clientPrincipal);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    UserGroupInformation.setConfiguration(conf);<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    UserProvider provider = UserProvider.instantiate(conf);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    assertTrue("Client principal or keytab is empty", provider.shouldLoginFromKeytab());<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    provider.login(AuthUtil.HBASE_CLIENT_KEYTAB_FILE, AuthUtil.HBASE_CLIENT_KERBEROS_PRINCIPAL);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    User loginUser = provider.getCurrent();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    assertEquals(CLIENT_NAME, loginUser.getShortName());<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    assertEquals(getClientPrincipalForTesting(), loginUser.getName());<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>  @Test<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  public void testAuthUtilLogin() throws Exception {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    String clientKeytab = getClientKeytabForTesting();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    String clientPrincipal = getClientPrincipalForTesting();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    Configuration conf = getSecuredConfiguration();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    conf.set(AuthUtil.HBASE_CLIENT_KEYTAB_FILE, clientKeytab);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    conf.set(AuthUtil.HBASE_CLIENT_KERBEROS_PRINCIPAL, clientPrincipal);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    UserGroupInformation.setConfiguration(conf);<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>    User user = AuthUtil.loginClient(conf);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    assertTrue(user.isLoginFromKeytab());<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    assertEquals(CLIENT_NAME, user.getShortName());<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    assertEquals(getClientPrincipalForTesting(), user.getName());<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>
 
 
 


[03/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/src-html/org/apache/hadoop/hbase/security/User.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/User.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/User.html
index ec5ba00..997f52f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/User.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/User.html
@@ -35,357 +35,404 @@
 <span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.ExecutionException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span><a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.util.Methods;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.security.Groups;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.security.SecurityUtil;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.security.token.Token;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.security.token.TokenIdentifier;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache;<a name="line.41"></a>
+<span class="sourceLineNo">030</span>import java.util.Optional;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.ExecutionException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Methods;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.security.Groups;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.security.SecurityUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.security.token.Token;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.security.token.TokenIdentifier;<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><a name="line.42"></a>
-<span class="sourceLineNo">043</span>/**<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * Wrapper to abstract out usage of user and group information in HBase.<a name="line.44"></a>
-<span class="sourceLineNo">045</span> *<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * &lt;p&gt;<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * This class provides a common interface for interacting with user and group<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * information across changing APIs in different versions of Hadoop.  It only<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * provides access to the common set of functionality in<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link org.apache.hadoop.security.UserGroupInformation} currently needed by<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * HBase, but can be extended as needs change.<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * &lt;/p&gt;<a name="line.52"></a>
-<span class="sourceLineNo">053</span> */<a name="line.53"></a>
-<span class="sourceLineNo">054</span>@InterfaceAudience.Public<a name="line.54"></a>
-<span class="sourceLineNo">055</span>public abstract class User {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  public static final String HBASE_SECURITY_CONF_KEY =<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      "hbase.security.authentication";<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public static final String HBASE_SECURITY_AUTHORIZATION_CONF_KEY =<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      "hbase.security.authorization";<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  protected UserGroupInformation ugi;<a name="line.61"></a>
+<span class="sourceLineNo">043</span>import org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache;<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> * Wrapper to abstract out usage of user and group information in HBase.<a name="line.46"></a>
+<span class="sourceLineNo">047</span> *<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * This class provides a common interface for interacting with user and group<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * information across changing APIs in different versions of Hadoop.  It only<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * provides access to the common set of functionality in<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * {@link org.apache.hadoop.security.UserGroupInformation} currently needed by<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * HBase, but can be extended as needs change.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * &lt;/p&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> */<a name="line.55"></a>
+<span class="sourceLineNo">056</span>@InterfaceAudience.Public<a name="line.56"></a>
+<span class="sourceLineNo">057</span>public abstract class User {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  public static final String HBASE_SECURITY_CONF_KEY =<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      "hbase.security.authentication";<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public static final String HBASE_SECURITY_AUTHORIZATION_CONF_KEY =<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      "hbase.security.authorization";<a name="line.61"></a>
 <span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public UserGroupInformation getUGI() {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    return ugi;<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>   * Returns the full user name.  For Kerberos principals this will include<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   * the host and realm portions of the principal name.<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   *<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * @return User full name.<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public String getName() {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    return ugi.getUserName();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<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>   * Returns the list of groups of which this user is a member.  On secure<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * Hadoop this returns the group information for the user as resolved on the<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * server.  For 0.20 based Hadoop, the group names are passed from the client.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   */<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public String[] getGroupNames() {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    return ugi.getGroupNames();<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>  /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * Returns the shortened version of the user name -- the portion that maps<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * to an operating system user name.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   *<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * @return Short name<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public abstract String getShortName();<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>   * Executes the given action within the context of this user.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public abstract &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action);<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>   * Executes the given action within the context of this user.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public abstract &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      throws IOException, InterruptedException;<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>   * Returns the Token of the specified kind associated with this user,<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * or null if the Token is not present.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   *<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * @param kind the kind of token<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param service service on which the token is supposed to be used<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @return the token of the specified kind.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public Token&lt;?&gt; getToken(String kind, String service) throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    for (Token&lt;?&gt; token : ugi.getTokens()) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      if (token.getKind().toString().equals(kind) &amp;&amp;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>          (service != null &amp;&amp; token.getService().toString().equals(service))) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        return token;<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>    return null;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * Returns all the tokens stored in the user's credentials.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public Collection&lt;Token&lt;? extends TokenIdentifier&gt;&gt; getTokens() {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    return ugi.getTokens();<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>   * Adds the given Token to the user's credentials.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   *<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * @param token the token to add<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  public void addToken(Token&lt;? extends TokenIdentifier&gt; token) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    ugi.addToken(token);<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>  @Override<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public boolean equals(Object o) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    if (this == o) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return true;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    if (o == null || getClass() != o.getClass()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return false;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return ugi.equals(((User) o).ugi);<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>  @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public int hashCode() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return ugi.hashCode();<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 String toString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    return ugi.toString();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  }<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>   * Returns the {@code User} instance within current execution context.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  public static User getCurrent() throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    User user = new SecureHadoopUser();<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    if (user.getUGI() == null) {<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>    return user;<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>   * Executes the given action as the login user<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * @param action<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @return the result of the action<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @throws IOException<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  public static &lt;T&gt; T runAsLoginUser(PrivilegedExceptionAction&lt;T&gt; action) throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    try {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      Class c = Class.forName("org.apache.hadoop.security.SecurityUtil");<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      Class [] types = new Class[]{PrivilegedExceptionAction.class};<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      Object[] args = new Object[]{action};<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      return (T) Methods.call(c, null, "doAsLoginUser", types, args);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    } catch (Throwable e) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      throw new IOException(e);<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><a name="line.188"></a>
-<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * Wraps an underlying {@code UserGroupInformation} instance.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param ugi The base Hadoop user<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @return User<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public static User create(UserGroupInformation ugi) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    if (ugi == null) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    return new SecureHadoopUser(ugi);<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>   * Generates a new {@code User} instance specifically for use in test code.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * @param name the full username<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param groups the group names to which the test user will belong<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @return a new &lt;code&gt;User&lt;/code&gt; instance<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public static User createUserForTesting(Configuration conf,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      String name, String[] groups) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    User userForTesting = SecureHadoopUser.createUserForTesting(conf, name, groups);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    return userForTesting;<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>  /**<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * Log in the current process using the given configuration keys for the<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * credential file and login principal.<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   *<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * &lt;p&gt;&lt;strong&gt;This is only applicable when<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * running on secure Hadoop&lt;/strong&gt; -- see<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * org.apache.hadoop.security.SecurityUtil#login(Configuration,String,String,String).<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * On regular Hadoop (without security features), this will safely be ignored.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * &lt;/p&gt;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   *<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param conf The configuration data to use<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param fileConfKey Property key used to configure path to the credential file<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param principalConfKey Property key used to configure login principal<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param localhost Current hostname to use in any credentials<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @throws IOException underlying exception from SecurityUtil.login() call<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  public static void login(Configuration conf, String fileConfKey,<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      String principalConfKey, String localhost) throws IOException {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    SecureHadoopUser.login(conf, fileConfKey, principalConfKey, localhost);<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>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * Returns whether or not Kerberos authentication is configured for Hadoop.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * For non-secure Hadoop, this always returns &lt;code&gt;false&lt;/code&gt;.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * For secure Hadoop, it will return the value from<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  public static boolean isSecurityEnabled() {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    return SecureHadoopUser.isSecurityEnabled();<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>   * Returns whether or not secure authentication is enabled for HBase. Note that<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * HBase security requires HDFS security to provide any guarantees, so it is<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * recommended that secure HBase should run on secure HDFS.<a name="line.247"></a>
+<span class="sourceLineNo">063</span>  protected UserGroupInformation ugi;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  public UserGroupInformation getUGI() {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    return ugi;<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>   * Returns the full user name.  For Kerberos principals this will include<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * the host and realm portions of the principal name.<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   *<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * @return User full name.<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   */<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public String getName() {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    return ugi.getUserName();<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>   * Returns the list of groups of which this user is a member.  On secure<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * Hadoop this returns the group information for the user as resolved on the<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * server.  For 0.20 based Hadoop, the group names are passed from the client.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public String[] getGroupNames() {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return ugi.getGroupNames();<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Returns the shortened version of the user name -- the portion that maps<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * to an operating system user name.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   *<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * @return Short name<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   */<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public abstract String getShortName();<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>   * Executes the given action within the context of this user.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public abstract &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action);<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>   * Executes the given action within the context of this user.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   */<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public abstract &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      throws IOException, InterruptedException;<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>   * Returns the Token of the specified kind associated with this user,<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * or null if the Token is not present.<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @param kind the kind of token<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * @param service service on which the token is supposed to be used<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * @return the token of the specified kind.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public Token&lt;?&gt; getToken(String kind, String service) throws IOException {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    for (Token&lt;?&gt; token : ugi.getTokens()) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      if (token.getKind().toString().equals(kind) &amp;&amp;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          (service != null &amp;&amp; token.getService().toString().equals(service))) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        return token;<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>    return null;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<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>   * Returns all the tokens stored in the user's credentials.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public Collection&lt;Token&lt;? extends TokenIdentifier&gt;&gt; getTokens() {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    return ugi.getTokens();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  /**<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   * Adds the given Token to the user's credentials.<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   *<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * @param token the token to add<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   */<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public void addToken(Token&lt;? extends TokenIdentifier&gt; token) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    ugi.addToken(token);<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>   * @return true if user credentials are obtained from keytab.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public boolean isLoginFromKeytab() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return ugi.isFromKeytab();<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>  @Override<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  public boolean equals(Object o) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (this == o) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return true;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    if (o == null || getClass() != o.getClass()) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      return false;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return ugi.equals(((User) o).ugi);<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>  @Override<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public int hashCode() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    return ugi.hashCode();<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>  public String toString() {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return ugi.toString();<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>   * Returns the {@code User} instance within current execution context.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  public static User getCurrent() throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    User user = new SecureHadoopUser();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    if (user.getUGI() == null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      return null;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    return user;<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>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Executes the given action as the login user<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @param action<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @return the result of the action<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @throws IOException<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public static &lt;T&gt; T runAsLoginUser(PrivilegedExceptionAction&lt;T&gt; action) throws IOException {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      Class c = Class.forName("org.apache.hadoop.security.SecurityUtil");<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      Class [] types = new Class[]{PrivilegedExceptionAction.class};<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      Object[] args = new Object[]{action};<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return (T) Methods.call(c, null, "doAsLoginUser", types, args);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (Throwable e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      throw new IOException(e);<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><a name="line.197"></a>
+<span class="sourceLineNo">198</span>  /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * Wraps an underlying {@code UserGroupInformation} instance.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * @param ugi The base Hadoop user<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * @return User<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   */<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  public static User create(UserGroupInformation ugi) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (ugi == null) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      return null;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    return new SecureHadoopUser(ugi);<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>  /**<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * Generates a new {@code User} instance specifically for use in test code.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @param name the full username<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * @param groups the group names to which the test user will belong<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * @return a new &lt;code&gt;User&lt;/code&gt; instance<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  public static User createUserForTesting(Configuration conf,<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      String name, String[] groups) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    User userForTesting = SecureHadoopUser.createUserForTesting(conf, name, groups);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    return userForTesting;<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>   * Log in the current process using the given configuration keys for the<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * credential file and login principal.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   *<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * &lt;p&gt;&lt;strong&gt;This is only applicable when<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * running on secure Hadoop&lt;/strong&gt; -- see<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * org.apache.hadoop.security.SecurityUtil#login(Configuration,String,String,String).<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * On regular Hadoop (without security features), this will safely be ignored.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * &lt;/p&gt;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   *<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @param conf The configuration data to use<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @param fileConfKey Property key used to configure path to the credential file<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @param principalConfKey Property key used to configure login principal<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * @param localhost Current hostname to use in any credentials<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * @throws IOException underlying exception from SecurityUtil.login() call<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  public static void login(Configuration conf, String fileConfKey,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      String principalConfKey, String localhost) throws IOException {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SecureHadoopUser.login(conf, fileConfKey, principalConfKey, localhost);<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>   * Login with the given keytab and principal.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * @param keytabLocation path of keytab<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @param pricipalName login principal<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * @throws IOException underlying exception from UserGroupInformation.loginUserFromKeytab<a name="line.247"></a>
 <span class="sourceLineNo">248</span>   */<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  public static boolean isHBaseSecurityEnabled(Configuration conf) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    return "kerberos".equalsIgnoreCase(conf.get(HBASE_SECURITY_CONF_KEY));<a name="line.250"></a>
+<span class="sourceLineNo">249</span>  public static void login(String keytabLocation, String pricipalName) throws IOException {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    SecureHadoopUser.login(keytabLocation, pricipalName);<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>  /* Concrete implementations */<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>   * Bridges {@code User} invocations to underlying calls to<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * {@link org.apache.hadoop.security.UserGroupInformation} for secure Hadoop<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * 0.20 and versions 0.21 and above.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  @InterfaceAudience.Private<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   public static final class SecureHadoopUser extends User {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    private String shortName;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private LoadingCache&lt;String, String[]&gt; cache;<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    public SecureHadoopUser() throws IOException {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      ugi = UserGroupInformation.getCurrentUser();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      this.cache = null;<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>    public SecureHadoopUser(UserGroupInformation ugi) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.ugi = ugi;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      this.cache = null;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    public SecureHadoopUser(UserGroupInformation ugi,<a name="line.275"></a>
-<span class="sourceLineNo">276</span>                            LoadingCache&lt;String, String[]&gt; cache) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.ugi = ugi;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      this.cache = cache;<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>    @Override<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    public String getShortName() {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      if (shortName != null) return shortName;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        shortName = ugi.getShortUserName();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        return shortName;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      } catch (Exception e) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        throw new RuntimeException("Unexpected error getting user short name",<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          e);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>    @Override<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    public String[] getGroupNames() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      if (cache != null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        try {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          return this.cache.get(getShortName());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        } catch (ExecutionException e) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          return new String[0];<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>      return ugi.getGroupNames();<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>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    public &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      return ugi.doAs(action);<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>    @Override<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    public &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        throws IOException, InterruptedException {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      return ugi.doAs(action);<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>
-<span class="sourceLineNo">316</span>    /** @see User#createUserForTesting(org.apache.hadoop.conf.Configuration, String, String[]) */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    public static User createUserForTesting(Configuration conf,<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        String name, String[] groups) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      synchronized (UserProvider.class) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        if (!(UserProvider.groups instanceof TestingGroups)) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          UserProvider.groups = new TestingGroups(UserProvider.groups);<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>      ((TestingGroups)UserProvider.groups).setUserGroups(name, groups);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      return new SecureHadoopUser(UserGroupInformation.createUserForTesting(name, groups));<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>     * Obtain credentials for the current process using the configured<a name="line.330"></a>
-<span class="sourceLineNo">331</span>     * Kerberos keytab file and principal.<a name="line.331"></a>
-<span class="sourceLineNo">332</span>     * @see User#login(org.apache.hadoop.conf.Configuration, String, String, String)<a name="line.332"></a>
-<span class="sourceLineNo">333</span>     *<a name="line.333"></a>
-<span class="sourceLineNo">334</span>     * @param conf the Configuration to use<a name="line.334"></a>
-<span class="sourceLineNo">335</span>     * @param fileConfKey Configuration property key used to store the path<a name="line.335"></a>
-<span class="sourceLineNo">336</span>     * to the keytab file<a name="line.336"></a>
-<span class="sourceLineNo">337</span>     * @param principalConfKey Configuration property key used to store the<a name="line.337"></a>
-<span class="sourceLineNo">338</span>     * principal name to login as<a name="line.338"></a>
-<span class="sourceLineNo">339</span>     * @param localhost the local hostname<a name="line.339"></a>
-<span class="sourceLineNo">340</span>     */<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public static void login(Configuration conf, String fileConfKey,<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        String principalConfKey, String localhost) throws IOException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      if (isSecurityEnabled()) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        SecurityUtil.login(conf, fileConfKey, principalConfKey, localhost);<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><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     * Returns the result of {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>     */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    public static boolean isSecurityEnabled() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      return UserGroupInformation.isSecurityEnabled();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    }<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>  static class TestingGroups extends Groups {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    private final Map&lt;String, List&lt;String&gt;&gt; userToGroupsMapping = new HashMap&lt;&gt;();<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    private Groups underlyingImplementation;<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    TestingGroups(Groups underlyingImplementation) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      super(new Configuration());<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      this.underlyingImplementation = underlyingImplementation;<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>    @Override<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    public List&lt;String&gt; getGroups(String user) throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      List&lt;String&gt; result = userToGroupsMapping.get(user);<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>      if (result == null) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        result = underlyingImplementation.getGroups(user);<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 result;<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 void setUserGroups(String user, String[] groups) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      userToGroupsMapping.put(user, Arrays.asList(groups));<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">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Returns whether or not Kerberos authentication is configured for Hadoop.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * For non-secure Hadoop, this always returns &lt;code&gt;false&lt;/code&gt;.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * For secure Hadoop, it will return the value from<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  public static boolean isSecurityEnabled() {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    return SecureHadoopUser.isSecurityEnabled();<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>  /**<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * Returns whether or not secure authentication is enabled for HBase. Note that<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * HBase security requires HDFS security to provide any guarantees, so it is<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * recommended that secure HBase should run on secure HDFS.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public static boolean isHBaseSecurityEnabled(Configuration conf) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    return "kerberos".equalsIgnoreCase(conf.get(HBASE_SECURITY_CONF_KEY));<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>   * In secure environment, if a user specified his keytab and principal,<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * a hbase client will try to login with them. Otherwise, hbase client will try to obtain<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * ticket(through kinit) from system.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @param conf configuration file<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @return true if keytab and principal are configured<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public static boolean shouldLoginFromKeytab(Configuration conf) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    Optional&lt;String&gt; keytab =<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      Optional.ofNullable(conf.get(AuthUtil.HBASE_CLIENT_KEYTAB_FILE));<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    Optional&lt;String&gt; principal =<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      Optional.ofNullable(conf.get(AuthUtil.HBASE_CLIENT_KERBEROS_PRINCIPAL));<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    return keytab.isPresent() &amp;&amp; principal.isPresent();<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>  /* Concrete implementations */<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>   * Bridges {@code User} invocations to underlying calls to<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * {@link org.apache.hadoop.security.UserGroupInformation} for secure Hadoop<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * 0.20 and versions 0.21 and above.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  @InterfaceAudience.Private<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   public static final class SecureHadoopUser extends User {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    private String shortName;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    private LoadingCache&lt;String, String[]&gt; cache;<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    public SecureHadoopUser() throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      ugi = UserGroupInformation.getCurrentUser();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      this.cache = null;<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>    public SecureHadoopUser(UserGroupInformation ugi) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      this.ugi = ugi;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      this.cache = null;<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>    public SecureHadoopUser(UserGroupInformation ugi,<a name="line.309"></a>
+<span class="sourceLineNo">310</span>                            LoadingCache&lt;String, String[]&gt; cache) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      this.ugi = ugi;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      this.cache = cache;<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>    @Override<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    public String getShortName() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      if (shortName != null) return shortName;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      try {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        shortName = ugi.getShortUserName();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        return shortName;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      } catch (Exception e) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        throw new RuntimeException("Unexpected error getting user short name",<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          e);<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>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public String[] getGroupNames() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      if (cache != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          return this.cache.get(getShortName());<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        } catch (ExecutionException e) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          return new String[0];<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>      return ugi.getGroupNames();<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>    @Override<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    public &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return ugi.doAs(action);<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 &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        throws IOException, InterruptedException {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      return ugi.doAs(action);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    /** @see User#createUserForTesting(org.apache.hadoop.conf.Configuration, String, String[]) */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public static User createUserForTesting(Configuration conf,<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        String name, String[] groups) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      synchronized (UserProvider.class) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        if (!(UserProvider.groups instanceof TestingGroups)) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          UserProvider.groups = new TestingGroups(UserProvider.groups);<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">359</span>      ((TestingGroups)UserProvider.groups).setUserGroups(name, groups);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      return new SecureHadoopUser(UserGroupInformation.createUserForTesting(name, groups));<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>     * Obtain credentials for the current process using the configured<a name="line.364"></a>
+<span class="sourceLineNo">365</span>     * Kerberos keytab file and principal.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>     * @see User#login(org.apache.hadoop.conf.Configuration, String, String, String)<a name="line.366"></a>
+<span class="sourceLineNo">367</span>     *<a name="line.367"></a>
+<span class="sourceLineNo">368</span>     * @param conf the Configuration to use<a name="line.368"></a>
+<span class="sourceLineNo">369</span>     * @param fileConfKey Configuration property key used to store the path<a name="line.369"></a>
+<span class="sourceLineNo">370</span>     * to the keytab file<a name="line.370"></a>
+<span class="sourceLineNo">371</span>     * @param principalConfKey Configuration property key used to store the<a name="line.371"></a>
+<span class="sourceLineNo">372</span>     * principal name to login as<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * @param localhost the local hostname<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    public static void login(Configuration conf, String fileConfKey,<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        String principalConfKey, String localhost) throws IOException {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      if (isSecurityEnabled()) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        SecurityUtil.login(conf, fileConfKey, principalConfKey, localhost);<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>    /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span>     * Login through configured keytab and pricipal.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>     * @param keytabLocation location of keytab<a name="line.384"></a>
+<span class="sourceLineNo">385</span>     * @param principalName principal in keytab<a name="line.385"></a>
+<span class="sourceLineNo">386</span>     * @throws IOException exception from UserGroupInformation.loginUserFromKeytab<a name="line.386"></a>
+<span class="sourceLineNo">387</span>     */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    public static void login(String keytabLocation, String principalName)<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        throws IOException {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      if (isSecurityEnabled()) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        UserGroupInformation.loginUserFromKeytab(principalName, keytabLocation);<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>    /**<a name="line.395"></a>
+<span class="sourceLineNo">396</span>     * Returns the result of {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>     */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    public static boolean isSecurityEnabled() {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      return UserGroupInformation.isSecurityEnabled();<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>  static class TestingGroups extends Groups {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    private final Map&lt;String, List&lt;String&gt;&gt; userToGroupsMapping = new HashMap&lt;&gt;();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    private Groups underlyingImplementation;<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>    TestingGroups(Groups underlyingImplementation) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      super(new Configuration());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      this.underlyingImplementation = underlyingImplementation;<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 List&lt;String&gt; getGroups(String user) throws IOException {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      List&lt;String&gt; result = userToGroupsMapping.get(user);<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>      if (result == null) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        result = underlyingImplementation.getGroups(user);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>      return result;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    private void setUserGroups(String user, String[] groups) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      userToGroupsMapping.put(user, Arrays.asList(groups));<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>}<a name="line.427"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/src-html/org/apache/hadoop/hbase/security/UserProvider.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/UserProvider.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/UserProvider.html
index 60ad3cb..6aacac3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/UserProvider.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/UserProvider.html
@@ -169,43 +169,64 @@
 <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>   * @return the current user within the current execution context<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * @throws IOException if the user cannot be loaded<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public User getCurrent() throws IOException {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    return User.getCurrent();<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>   * Wraps an underlying {@code UserGroupInformation} instance.<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * @param ugi The base Hadoop user<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @return User<a name="line.174"></a>
+<span class="sourceLineNo">164</span>   * In secure environment, if a user specified his keytab and principal,<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * a hbase client will try to login with them. Otherwise, hbase client will try to obtain<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * ticket(through kinit) from system.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public boolean shouldLoginFromKeytab() {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    return User.shouldLoginFromKeytab(this.getConf());<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>   * @return the current user within the current execution context<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * @throws IOException if the user cannot be loaded<a name="line.174"></a>
 <span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  public User create(UserGroupInformation ugi) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    if (ugi == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      return null;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    return new User.SecureHadoopUser(ugi, groupCache);<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>   * Log in the current process using the given configuration keys for the credential file and login<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * principal.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * &lt;p&gt;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * &lt;strong&gt;This is only applicable when running on secure Hadoop&lt;/strong&gt; -- see<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * org.apache.hadoop.security.SecurityUtil#login(Configuration,String,String,String). On regular<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * Hadoop (without security features), this will safely be ignored.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * &lt;/p&gt;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param fileConfKey Property key used to configure path to the credential file<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @param principalConfKey Property key used to configure login principal<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * @param localhost Current hostname to use in any credentials<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * @throws IOException underlying exception from SecurityUtil.login() call<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   */<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public void login(String fileConfKey, String principalConfKey, String localhost)<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      throws IOException {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    User.login(getConf(), fileConfKey, principalConfKey, localhost);<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">176</span>  public User getCurrent() throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    return User.getCurrent();<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>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Wraps an underlying {@code UserGroupInformation} instance.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @param ugi The base Hadoop user<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @return User<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public User create(UserGroupInformation ugi) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    if (ugi == null) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      return null;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    return new User.SecureHadoopUser(ugi, groupCache);<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>  /**<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * Log in the current process using the given configuration keys for the credential file and login<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   * principal. It is for SPN(Service Principal Name) login. SPN should be this format,<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * servicename/fully.qualified.domain.name@REALM.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * &lt;p&gt;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * &lt;strong&gt;This is only applicable when running on secure Hadoop&lt;/strong&gt; -- see<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * org.apache.hadoop.security.SecurityUtil#login(Configuration,String,String,String). On regular<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * Hadoop (without security features), this will safely be ignored.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * &lt;/p&gt;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * @param fileConfKey Property key used to configure path to the credential file<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * @param principalConfKey Property key used to configure login principal<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * @param localhost Current hostname to use in any credentials<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * @throws IOException underlying exception from SecurityUtil.login() call<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  public void login(String fileConfKey, String principalConfKey, String localhost)<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      throws IOException {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    User.login(getConf(), fileConfKey, principalConfKey, localhost);<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>   * Login with given keytab and principal. This can be used for both SPN(Service Principal Name)<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * and UPN(User Principal Name) which format should be clientname@REALM.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * @param fileConfKey config name for client keytab<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * @param principalConfKey config name for client principal<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * @throws IOException underlying exception from UserGroupInformation.loginUserFromKeytab<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  public void login(String fileConfKey, String principalConfKey) throws IOException {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    User.login(getConf().get(fileConfKey), getConf().get(principalConfKey));<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index fb46c50..d84ee59 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -423,7 +423,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 7ff0059..7461e7d 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -331,7 +331,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 1ed9459..00eaa36 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -411,7 +411,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 574758b..148dd15 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -291,7 +291,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index d6d063b..06e9f10 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -288,7 +288,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 68fba1c..a82cc1c 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -491,7 +491,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 4c01561..e48ed5d 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index eb10c8f..776d355 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -459,7 +459,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 


[29/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index cd1a06a..3ac56ca 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:20180730142951+00'00')
-/CreationDate (D:20180730144559+00'00')
+/ModDate (D:20180731142956+00'00')
+/CreationDate (D:20180731144604+00'00')
 >>
 endobj
 2 0 obj
@@ -24,7 +24,7 @@ endobj
 3 0 obj
 << /Type /Pages
 /Count 783
-/Kids [7 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R 24 0 R 26 0 R 46 0 R 49 0 R 52 0 R 56 0 R 63 0 R 65 0 R 69 0 R 71 0 R 73 0 R 80 0 R 83 0 R 85 0 R 91 0 R 94 0 R 96 0 R 98 0 R 105 0 R 112 0 R 117 0 R 119 0 R 135 0 R 140 0 R 148 0 R 157 0 R 165 0 R 169 0 R 178 0 R 189 0 R 193 0 R 195 0 R 199 0 R 208 0 R 217 0 R 225 0 R 234 0 R 239 0 R 248 0 R 256 0 R 265 0 R 278 0 R 285 0 R 295 0 R 303 0 R 311 0 R 318 0 R 327 0 R 333 0 R 339 0 R 346 0 R 354 0 R 362 0 R 373 0 R 386 0 R 394 0 R 401 0 R 409 0 R 417 0 R 426 0 R 436 0 R 444 0 R 450 0 R 459 0 R 471 0 R 481 0 R 488 0 R 496 0 R 503 0 R 512 0 R 520 0 R 524 0 R 530 0 R 535 0 R 539 0 R 555 0 R 566 0 R 570 0 R 585 0 R 590 0 R 595 0 R 597 0 R 599 0 R 602 0 R 604 0 R 606 0 R 614 0 R 620 0 R 623 0 R 627 0 R 636 0 R 647 0 R 655 0 R 659 0 R 663 0 R 665 0 R 675 0 R 690 0 R 697 0 R 708 0 R 718 0 R 729 0 R 741 0 R 761 0 R 771 0 R 778 0 R 782 0 R 788 0 R 791 0 R 795 0 R 799 0 R 802 0 R 805 0 R 807 0 R 810 0 R 814 0 R 816 0 R 820 0 R 826 0 R 831 0 R 
 835 0 R 838 0 R 844 0 R 846 0 R 850 0 R 858 0 R 860 0 R 863 0 R 866 0 R 869 0 R 872 0 R 886 0 R 894 0 R 905 0 R 916 0 R 922 0 R 932 0 R 943 0 R 946 0 R 950 0 R 953 0 R 958 0 R 967 0 R 975 0 R 979 0 R 983 0 R 988 0 R 992 0 R 994 0 R 1010 0 R 1021 0 R 1026 0 R 1033 0 R 1036 0 R 1044 0 R 1052 0 R 1057 0 R 1062 0 R 1067 0 R 1069 0 R 1071 0 R 1073 0 R 1083 0 R 1091 0 R 1095 0 R 1102 0 R 1109 0 R 1117 0 R 1121 0 R 1127 0 R 1132 0 R 1140 0 R 1144 0 R 1149 0 R 1151 0 R 1157 0 R 1165 0 R 1171 0 R 1178 0 R 1189 0 R 1193 0 R 1195 0 R 1197 0 R 1201 0 R 1204 0 R 1209 0 R 1212 0 R 1224 0 R 1228 0 R 1234 0 R 1242 0 R 1247 0 R 1251 0 R 1255 0 R 1257 0 R 1260 0 R 1263 0 R 1266 0 R 1270 0 R 1274 0 R 1278 0 R 1283 0 R 1287 0 R 1290 0 R 1292 0 R 1302 0 R 1305 0 R 1313 0 R 1322 0 R 1328 0 R 1332 0 R 1334 0 R 1345 0 R 1348 0 R 1354 0 R 1362 0 R 1365 0 R 1372 0 R 1379 0 R 1382 0 R 1384 0 R 1393 0 R 1395 0 R 1397 0 R 1400 0 R 1402 0 R 1404 0 R 1406 0 R 1408 0 R 1411 0 R 1415 0 R 1420 0 R 1422 0 R 1424 0 R 
 1426 0 R 1431 0 R 1438 0 R 1444 0 R 1447 0 R 1449 0 R 1452 0 R 1456 0 R 1460 0 R 1463 0 R 1465 0 R 1467 0 R 1470 0 R 1475 0 R 1481 0 R 1489 0 R 1503 0 R 1517 0 R 1520 0 R 1525 0 R 1538 0 R 1543 0 R 1558 0 R 1566 0 R 1570 0 R 1579 0 R 1594 0 R 1608 0 R 1616 0 R 1621 0 R 1632 0 R 1637 0 R 1643 0 R 1649 0 R 1661 0 R 1664 0 R 1673 0 R 1676 0 R 1685 0 R 1691 0 R 1695 0 R 1700 0 R 1712 0 R 1714 0 R 1720 0 R 1726 0 R 1729 0 R 1737 0 R 1745 0 R 1749 0 R 1751 0 R 1753 0 R 1765 0 R 1771 0 R 1780 0 R 1786 0 R 1799 0 R 1805 0 R 1811 0 R 1822 0 R 1828 0 R 1833 0 R 1837 0 R 1841 0 R 1844 0 R 1849 0 R 1854 0 R 1860 0 R 1865 0 R 1869 0 R 1878 0 R 1884 0 R 1887 0 R 1891 0 R 1900 0 R 1907 0 R 1913 0 R 1919 0 R 1923 0 R 1927 0 R 1932 0 R 1937 0 R 1943 0 R 1945 0 R 1947 0 R 1950 0 R 1961 0 R 1964 0 R 1971 0 R 1979 0 R 1984 0 R 1988 0 R 1993 0 R 1995 0 R 1998 0 R 2003 0 R 2006 0 R 2008 0 R 2011 0 R 2014 0 R 2017 0 R 2027 0 R 2032 0 R 2037 0 R 2039 0 R 2047 0 R 2054 0 R 2061 0 R 2067 0 R 2072 0 R 2074 0 
 R 2083 0 R 2093 0 R 2103 0 R 2109 0 R 2116 0 R 2118 0 R 2123 0 R 2125 0 R 2127 0 R 2131 0 R 2134 0 R 2137 0 R 2142 0 R 2146 0 R 2157 0 R 2160 0 R 2163 0 R 2167 0 R 2171 0 R 2174 0 R 2176 0 R 2181 0 R 2184 0 R 2186 0 R 2191 0 R 2201 0 R 2203 0 R 2205 0 R 2207 0 R 2209 0 R 2212 0 R 2214 0 R 2216 0 R 2219 0 R 2221 0 R 2223 0 R 2227 0 R 2232 0 R 2241 0 R 2243 0 R 2245 0 R 2251 0 R 2253 0 R 2258 0 R 2260 0 R 2262 0 R 2269 0 R 2274 0 R 2278 0 R 2283 0 R 2287 0 R 2289 0 R 2291 0 R 2295 0 R 2298 0 R 2300 0 R 2302 0 R 2306 0 R 2308 0 R 2311 0 R 2313 0 R 2315 0 R 2317 0 R 2324 0 R 2327 0 R 2332 0 R 2334 0 R 2336 0 R 2338 0 R 2340 0 R 2348 0 R 2359 0 R 2373 0 R 2384 0 R 2388 0 R 2393 0 R 2397 0 R 2400 0 R 2405 0 R 2411 0 R 2413 0 R 2416 0 R 2418 0 R 2420 0 R 2422 0 R 2427 0 R 2429 0 R 2442 0 R 2445 0 R 2453 0 R 2459 0 R 2471 0 R 2485 0 R 2498 0 R 2517 0 R 2519 0 R 2521 0 R 2525 0 R 2543 0 R 2549 0 R 2561 0 R 2565 0 R 2569 0 R 2578 0 R 2590 0 R 2595 0 R 2605 0 R 2618 0 R 2637 0 R 2646 0 R 2649 
 0 R 2658 0 R 2675 0 R 2682 0 R 2685 0 R 2690 0 R 2694 0 R 2697 0 R 2706 0 R 2715 0 R 2718 0 R 2720 0 R 2724 0 R 2738 0 R 2747 0 R 2752 0 R 2756 0 R 2759 0 R 2761 0 R 2763 0 R 2765 0 R 2770 0 R 2783 0 R 2793 0 R 2801 0 R 2807 0 R 2812 0 R 2823 0 R 2830 0 R 2836 0 R 2838 0 R 2847 0 R 2855 0 R 2857 0 R 2861 0 R 2863 0 R 2874 0 R 2880 0 R 2882 0 R 2891 0 R 2894 0 R 2904 0 R 2908 0 R 2917 0 R 2925 0 R 2930 0 R 2934 0 R 2938 0 R 2940 0 R 2946 0 R 2950 0 R 2954 0 R 2960 0 R 2966 0 R 2969 0 R 2975 0 R 2979 0 R 2988 0 R 2993 0 R 2999 0 R 3009 0 R 3016 0 R 3023 0 R 3026 0 R 3029 0 R 3036 0 R 3041 0 R 3044 0 R 3049 0 R 3059 0 R 3064 0 R 3066 0 R 3070 0 R 3075 0 R 3080 0 R 3087 0 R 3094 0 R 3101 0 R 3109 0 R 3115 0 R 3120 0 R 3124 0 R 3127 0 R 3136 0 R 3141 0 R 3145 0 R 3153 0 R 3158 0 R 3162 0 R 3164 0 R 3175 0 R 3180 0 R 3183 0 R 3185 0 R 3187 0 R 3197 0 R 3204 0 R 3208 0 R 3211 0 R 3218 0 R 3222 0 R 3225 0 R 3229 0 R 3234 0 R 3242 0 R 3247 0 R 3252 0 R 3257 0 R 3259 0 R 3262 0 R 3264 0 R 326
 8 0 R 3279 0 R 3281 0 R 3285 0 R 3288 0 R 3292 0 R 3295 0 R 3299 0 R 3301 0 R 3314 0 R 3319 0 R 3324 0 R 3330 0 R 3338 0 R 3340 0 R 3348 0 R 3366 0 R 3378 0 R 3384 0 R 3400 0 R 3404 0 R 3409 0 R 3411 0 R 3418 0 R 3421 0 R 3426 0 R 3429 0 R 3431 0 R 3433 0 R 3435 0 R 3438 0 R 3456 0 R 3459 0 R 3464 0 R 3470 0 R 3480 0 R 3485 0 R 3495 0 R 3505 0 R 3513 0 R 3518 0 R 3524 0 R 3529 0 R 3532 0 R 3540 0 R 3544 0 R 3549 0 R 3554 0 R 3567 0 R 3570 0 R 3576 0 R 3582 0 R 3587 0 R 3596 0 R 3605 0 R 3611 0 R 3620 0 R 3629 0 R 3634 0 R 3640 0 R 3646 0 R 3650 0 R 3652 0 R 3658 0 R 3665 0 R 3667 0 R 3674 0 R 3676 0 R 3683 0 R 3691 0 R 3697 0 R 3706 0 R 3712 0 R 3723 0 R 3732 0 R 3744 0 R 3757 0 R 3760 0 R 3762 0 R 3766 0 R 3779 0 R 3785 0 R 3790 0 R 3796 0 R 3800 0 R 3803 0 R 3808 0 R 3810 0 R 3814 0 R 3816 0 R 3820 0 R 3823 0 R 3826 0 R 3834 0 R 3836 0 R 3842 0 R 3845 0 R 3851 0 R 3855 0 R 3858 0 R 3861 0 R 3864 0 R 3868 0 R 3871 0 R 3876 0 R 3881 0 R 3884 0 R 3892 0 R 3896 0 R 3900 0 R 3902 0 R 3
 905 0 R 3908 0 R 3913 0 R 3920 0 R 3926 0 R 3930 0 R 3933 0 R 3940 0 R 3948 0 R 3952 0 R 3955 0 R 3957 0 R 3961 0 R 3966 0 R 3971 0 R 3974 0 R 3983 0 R 3988 0 R 3992 0 R 3995 0 R 4003 0 R 4008 0 R 4016 0 R 4021 0 R 4023 0 R 4029 0 R 4031 0 R 4036 0 R 4040 0 R 4045 0 R 4049 0 R 4061 0 R 4077 0 R 4092 0 R 4097 0 R 4100 0 R 4103 0 R 4109 0 R 4114 0 R 4116 0 R 4118 0 R 4120 0 R 4122 0 R 4124 0 R 4133 0 R 4137 0 R 4141 0 R 4145 0 R 4147 0 R 4154 0 R 4164 0 R 4173 0 R 4176 0 R 4179 0 R 4181 0 R 4188 0 R 4195 0 R 4206 0 R 4210 0 R 4213 0 R 4217 0 R 4220 0 R 4226 0 R 4229 0 R 4244 0 R 4249 0 R 4272 0 R 4276 0 R 4283 0 R 4294 0 R 4303 0 R 4306 0 R 4309 0 R 4312 0 R 4328 0 R 4333 0 R 4340 0 R 4343 0 R 4346 0 R 4353 0 R 4358 0 R 4362 0 R 4364 0 R 4371 0 R 4378 0 R 4386 0 R 4390 0 R 4395 0 R 4400 0 R 4406 0 R 4413 0 R 4420 0 R 4426 0 R 4434 0 R 4442 0 R 4446 0 R 4455 0 R 4463 0 R 4469 0 R]
+/Kids [7 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R 24 0 R 26 0 R 46 0 R 49 0 R 52 0 R 56 0 R 63 0 R 65 0 R 69 0 R 71 0 R 73 0 R 80 0 R 83 0 R 85 0 R 91 0 R 94 0 R 96 0 R 98 0 R 105 0 R 112 0 R 117 0 R 119 0 R 135 0 R 140 0 R 148 0 R 157 0 R 165 0 R 169 0 R 178 0 R 189 0 R 193 0 R 195 0 R 199 0 R 208 0 R 217 0 R 225 0 R 234 0 R 239 0 R 248 0 R 256 0 R 265 0 R 278 0 R 285 0 R 295 0 R 303 0 R 311 0 R 318 0 R 327 0 R 333 0 R 339 0 R 346 0 R 354 0 R 362 0 R 373 0 R 386 0 R 394 0 R 401 0 R 409 0 R 417 0 R 426 0 R 436 0 R 444 0 R 450 0 R 459 0 R 471 0 R 481 0 R 488 0 R 496 0 R 503 0 R 512 0 R 520 0 R 524 0 R 530 0 R 535 0 R 539 0 R 555 0 R 566 0 R 570 0 R 585 0 R 590 0 R 595 0 R 597 0 R 599 0 R 602 0 R 604 0 R 606 0 R 614 0 R 620 0 R 623 0 R 627 0 R 636 0 R 647 0 R 655 0 R 659 0 R 663 0 R 665 0 R 675 0 R 690 0 R 697 0 R 708 0 R 718 0 R 729 0 R 741 0 R 761 0 R 771 0 R 778 0 R 782 0 R 788 0 R 791 0 R 795 0 R 799 0 R 802 0 R 805 0 R 807 0 R 810 0 R 814 0 R 816 0 R 820 0 R 826 0 R 831 0 R 
 835 0 R 838 0 R 844 0 R 846 0 R 850 0 R 858 0 R 860 0 R 863 0 R 866 0 R 869 0 R 872 0 R 886 0 R 894 0 R 905 0 R 916 0 R 922 0 R 932 0 R 943 0 R 946 0 R 950 0 R 953 0 R 958 0 R 967 0 R 975 0 R 979 0 R 983 0 R 988 0 R 992 0 R 994 0 R 1010 0 R 1021 0 R 1026 0 R 1033 0 R 1036 0 R 1044 0 R 1052 0 R 1057 0 R 1062 0 R 1067 0 R 1069 0 R 1071 0 R 1073 0 R 1083 0 R 1091 0 R 1095 0 R 1102 0 R 1109 0 R 1117 0 R 1121 0 R 1127 0 R 1132 0 R 1140 0 R 1144 0 R 1149 0 R 1151 0 R 1157 0 R 1165 0 R 1171 0 R 1178 0 R 1189 0 R 1193 0 R 1195 0 R 1197 0 R 1201 0 R 1204 0 R 1209 0 R 1212 0 R 1224 0 R 1228 0 R 1234 0 R 1242 0 R 1247 0 R 1251 0 R 1255 0 R 1257 0 R 1260 0 R 1263 0 R 1266 0 R 1270 0 R 1274 0 R 1278 0 R 1283 0 R 1287 0 R 1290 0 R 1292 0 R 1302 0 R 1304 0 R 1309 0 R 1322 0 R 1326 0 R 1332 0 R 1334 0 R 1345 0 R 1348 0 R 1354 0 R 1362 0 R 1365 0 R 1372 0 R 1379 0 R 1382 0 R 1384 0 R 1393 0 R 1395 0 R 1397 0 R 1400 0 R 1402 0 R 1404 0 R 1406 0 R 1408 0 R 1411 0 R 1415 0 R 1420 0 R 1422 0 R 1424 0 R 
 1426 0 R 1431 0 R 1438 0 R 1444 0 R 1447 0 R 1449 0 R 1452 0 R 1456 0 R 1460 0 R 1463 0 R 1465 0 R 1467 0 R 1470 0 R 1475 0 R 1481 0 R 1489 0 R 1503 0 R 1517 0 R 1520 0 R 1525 0 R 1538 0 R 1543 0 R 1558 0 R 1566 0 R 1570 0 R 1579 0 R 1594 0 R 1608 0 R 1616 0 R 1621 0 R 1632 0 R 1637 0 R 1643 0 R 1649 0 R 1661 0 R 1664 0 R 1673 0 R 1676 0 R 1685 0 R 1691 0 R 1695 0 R 1700 0 R 1712 0 R 1714 0 R 1720 0 R 1726 0 R 1729 0 R 1737 0 R 1745 0 R 1749 0 R 1751 0 R 1753 0 R 1765 0 R 1771 0 R 1780 0 R 1786 0 R 1799 0 R 1805 0 R 1811 0 R 1822 0 R 1828 0 R 1833 0 R 1837 0 R 1841 0 R 1844 0 R 1849 0 R 1854 0 R 1860 0 R 1865 0 R 1869 0 R 1878 0 R 1884 0 R 1887 0 R 1891 0 R 1900 0 R 1907 0 R 1913 0 R 1919 0 R 1923 0 R 1927 0 R 1932 0 R 1937 0 R 1943 0 R 1945 0 R 1947 0 R 1950 0 R 1961 0 R 1964 0 R 1971 0 R 1979 0 R 1984 0 R 1988 0 R 1993 0 R 1995 0 R 1998 0 R 2003 0 R 2006 0 R 2008 0 R 2011 0 R 2014 0 R 2017 0 R 2027 0 R 2032 0 R 2037 0 R 2039 0 R 2047 0 R 2054 0 R 2061 0 R 2067 0 R 2072 0 R 2074 0 
 R 2083 0 R 2093 0 R 2103 0 R 2109 0 R 2116 0 R 2118 0 R 2123 0 R 2125 0 R 2127 0 R 2131 0 R 2134 0 R 2137 0 R 2142 0 R 2146 0 R 2157 0 R 2160 0 R 2163 0 R 2167 0 R 2171 0 R 2174 0 R 2176 0 R 2181 0 R 2184 0 R 2186 0 R 2191 0 R 2201 0 R 2203 0 R 2205 0 R 2207 0 R 2209 0 R 2212 0 R 2214 0 R 2216 0 R 2219 0 R 2221 0 R 2223 0 R 2227 0 R 2232 0 R 2241 0 R 2243 0 R 2245 0 R 2251 0 R 2253 0 R 2258 0 R 2260 0 R 2262 0 R 2269 0 R 2274 0 R 2278 0 R 2283 0 R 2287 0 R 2289 0 R 2291 0 R 2295 0 R 2298 0 R 2300 0 R 2302 0 R 2306 0 R 2308 0 R 2311 0 R 2313 0 R 2315 0 R 2317 0 R 2324 0 R 2327 0 R 2332 0 R 2334 0 R 2336 0 R 2338 0 R 2340 0 R 2348 0 R 2359 0 R 2373 0 R 2384 0 R 2388 0 R 2393 0 R 2397 0 R 2400 0 R 2405 0 R 2411 0 R 2413 0 R 2416 0 R 2418 0 R 2420 0 R 2422 0 R 2427 0 R 2429 0 R 2442 0 R 2445 0 R 2453 0 R 2459 0 R 2471 0 R 2485 0 R 2498 0 R 2517 0 R 2519 0 R 2521 0 R 2525 0 R 2543 0 R 2549 0 R 2561 0 R 2565 0 R 2569 0 R 2578 0 R 2590 0 R 2595 0 R 2605 0 R 2618 0 R 2637 0 R 2646 0 R 2649 
 0 R 2658 0 R 2675 0 R 2682 0 R 2685 0 R 2690 0 R 2694 0 R 2697 0 R 2706 0 R 2715 0 R 2718 0 R 2720 0 R 2724 0 R 2738 0 R 2747 0 R 2752 0 R 2756 0 R 2759 0 R 2761 0 R 2763 0 R 2765 0 R 2770 0 R 2783 0 R 2793 0 R 2801 0 R 2807 0 R 2812 0 R 2823 0 R 2830 0 R 2836 0 R 2838 0 R 2847 0 R 2855 0 R 2857 0 R 2861 0 R 2863 0 R 2874 0 R 2880 0 R 2882 0 R 2891 0 R 2894 0 R 2904 0 R 2908 0 R 2917 0 R 2925 0 R 2930 0 R 2934 0 R 2938 0 R 2940 0 R 2946 0 R 2950 0 R 2954 0 R 2960 0 R 2966 0 R 2969 0 R 2975 0 R 2979 0 R 2988 0 R 2993 0 R 2999 0 R 3009 0 R 3016 0 R 3023 0 R 3026 0 R 3029 0 R 3036 0 R 3041 0 R 3044 0 R 3049 0 R 3059 0 R 3064 0 R 3066 0 R 3070 0 R 3075 0 R 3080 0 R 3087 0 R 3094 0 R 3101 0 R 3109 0 R 3115 0 R 3120 0 R 3124 0 R 3127 0 R 3136 0 R 3141 0 R 3145 0 R 3153 0 R 3158 0 R 3162 0 R 3164 0 R 3175 0 R 3180 0 R 3183 0 R 3185 0 R 3187 0 R 3197 0 R 3204 0 R 3208 0 R 3211 0 R 3218 0 R 3222 0 R 3225 0 R 3229 0 R 3234 0 R 3242 0 R 3247 0 R 3252 0 R 3257 0 R 3259 0 R 3262 0 R 3264 0 R 326
 8 0 R 3279 0 R 3281 0 R 3285 0 R 3288 0 R 3292 0 R 3295 0 R 3299 0 R 3301 0 R 3314 0 R 3319 0 R 3324 0 R 3330 0 R 3338 0 R 3340 0 R 3348 0 R 3366 0 R 3378 0 R 3384 0 R 3400 0 R 3404 0 R 3409 0 R 3411 0 R 3418 0 R 3421 0 R 3426 0 R 3429 0 R 3431 0 R 3433 0 R 3435 0 R 3438 0 R 3456 0 R 3459 0 R 3464 0 R 3470 0 R 3480 0 R 3485 0 R 3495 0 R 3505 0 R 3513 0 R 3518 0 R 3524 0 R 3529 0 R 3532 0 R 3540 0 R 3544 0 R 3549 0 R 3554 0 R 3567 0 R 3570 0 R 3576 0 R 3582 0 R 3587 0 R 3596 0 R 3605 0 R 3611 0 R 3620 0 R 3629 0 R 3634 0 R 3640 0 R 3646 0 R 3650 0 R 3652 0 R 3658 0 R 3665 0 R 3667 0 R 3674 0 R 3676 0 R 3683 0 R 3691 0 R 3697 0 R 3706 0 R 3712 0 R 3723 0 R 3732 0 R 3744 0 R 3757 0 R 3760 0 R 3762 0 R 3766 0 R 3779 0 R 3785 0 R 3790 0 R 3796 0 R 3800 0 R 3803 0 R 3808 0 R 3810 0 R 3814 0 R 3816 0 R 3820 0 R 3823 0 R 3826 0 R 3834 0 R 3836 0 R 3842 0 R 3845 0 R 3851 0 R 3855 0 R 3858 0 R 3861 0 R 3864 0 R 3868 0 R 3871 0 R 3876 0 R 3881 0 R 3884 0 R 3892 0 R 3896 0 R 3900 0 R 3902 0 R 3
 905 0 R 3908 0 R 3913 0 R 3920 0 R 3926 0 R 3930 0 R 3933 0 R 3940 0 R 3948 0 R 3952 0 R 3955 0 R 3957 0 R 3961 0 R 3966 0 R 3971 0 R 3974 0 R 3983 0 R 3988 0 R 3992 0 R 3995 0 R 4003 0 R 4008 0 R 4016 0 R 4021 0 R 4023 0 R 4029 0 R 4031 0 R 4036 0 R 4040 0 R 4045 0 R 4049 0 R 4061 0 R 4077 0 R 4092 0 R 4097 0 R 4100 0 R 4103 0 R 4109 0 R 4114 0 R 4116 0 R 4118 0 R 4120 0 R 4122 0 R 4124 0 R 4133 0 R 4137 0 R 4141 0 R 4145 0 R 4147 0 R 4154 0 R 4164 0 R 4173 0 R 4176 0 R 4179 0 R 4181 0 R 4188 0 R 4195 0 R 4206 0 R 4210 0 R 4213 0 R 4217 0 R 4220 0 R 4226 0 R 4229 0 R 4244 0 R 4249 0 R 4272 0 R 4276 0 R 4283 0 R 4294 0 R 4303 0 R 4306 0 R 4309 0 R 4312 0 R 4328 0 R 4333 0 R 4340 0 R 4343 0 R 4346 0 R 4353 0 R 4358 0 R 4362 0 R 4364 0 R 4371 0 R 4378 0 R 4386 0 R 4390 0 R 4395 0 R 4400 0 R 4406 0 R 4413 0 R 4420 0 R 4426 0 R 4434 0 R 4442 0 R 4446 0 R 4455 0 R 4463 0 R 4469 0 R]
 >>
 endobj
 4 0 obj
@@ -172993,7 +172993,7 @@ endobj
 endobj
 1237 0 obj
 << /Limits [(secure-a-full-backup-image-first) (security.gateway.thrift.doas)]
-/Names [(secure-a-full-backup-image-first) 2112 0 R (securing-access-to-hdfs-and-zookeeper) 1355 0 R (securing-access-to-your-data) 1366 0 R (securing-file-system-hdfs-data) 1360 0 R (securing-zookeeper-data) 1356 0 R (security) 1279 0 R (security.client.thrift) 1303 0 R (security.data.basic.server.side) 1368 0 R (security.example.config) 1461 0 R (security.gateway.thrift) 1308 0 R (security.gateway.thrift.doas) 1318 0 R]
+/Names [(secure-a-full-backup-image-first) 2112 0 R (securing-access-to-hdfs-and-zookeeper) 1355 0 R (securing-access-to-your-data) 1366 0 R (securing-file-system-hdfs-data) 1360 0 R (securing-zookeeper-data) 1356 0 R (security) 1279 0 R (security.client.thrift) 1305 0 R (security.data.basic.server.side) 1368 0 R (security.example.config) 1461 0 R (security.gateway.thrift) 1310 0 R (security.gateway.thrift.doas) 1318 0 R]
 >>
 endobj
 1238 0 obj
@@ -199114,7 +199114,7 @@ endobj
 >>
 endobj
 1301 0 obj
-<< /Length 19953
+<< /Length 13652
 >>
 stream
 q
@@ -199293,29 +199293,342 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.6017 Tw
+0.5452 Tw
 
 BT
 48.24 673.936 Td
 /F1.0 10.5 Tf
-[<54686520636c69656e7420656e7669726f6e6d656e74206d757374206265206c6f6767656420696e20746f204b> 20.0195 <65726265726f732066726f6d204b4443206f72206b> 20.0195 <6579746162207669612074686520>] TJ
+[<4265666f726520322e322e302076657273696f6e2c2074686520636c69656e7420656e7669726f6e6d656e74206d757374206265206c6f6767656420696e20746f204b> 20.0195 <65726265726f732066726f6d204b4443206f72206b> 20.0195 <657974616220766961>] TJ
 ET
 
 
 0.0 Tw
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+48.24 658.156 Td
+/F1.0 10.5 Tf
+<74686520> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
 0.6941 0.1294 0.2745 scn
 0.6941 0.1294 0.2745 SCN
 
-0.6017 Tw
-
 BT
-467.3103 673.936 Td
+66.93 658.156 Td
 /F4.0 10.5 Tf
 <6b696e6974> Tj
 ET
 
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+93.18 658.156 Td
+/F1.0 10.5 Tf
+<20636f6d6d616e64206265666f726520636f6d6d756e69636174696f6e20776974682074686520484261736520636c75737465722077696c6c20626520706f737369626c652e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+48.24 630.376 Td
+/F1.0 10.5 Tf
+[<53696e636520322e322e302c20636c69656e742063616e20737065636966792074686520666f6c6c6f77696e6720636f6e6669677572> 20.0195 <6174696f6e7320696e20>] TJ
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.6941 0.1294 0.2745 scn
+0.6941 0.1294 0.2745 SCN
+
+BT
+351.7843 630.376 Td
+/F4.0 10.5 Tf
+<68626173652d736974652e786d6c> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+425.2843 630.376 Td
+/F1.0 10.5 Tf
+<3a> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+q
+0.9608 0.9608 0.9608 scn
+52.24 614.56 m
+543.04 614.56 l
+545.2491 614.56 547.04 612.7691 547.04 610.56 c
+547.04 463.9 l
+547.04 461.6909 545.2491 459.9 543.04 459.9 c
+52.24 459.9 l
+50.0309 459.9 48.24 461.6909 48.24 463.9 c
+48.24 610.56 l
+48.24 612.7691 50.0309 614.56 52.24 614.56 c
+h
+f
+0.8 0.8 0.8 SCN
+0.75 w
+52.24 614.56 m
+543.04 614.56 l
+545.2491 614.56 547.04 612.7691 547.04 610.56 c
+547.04 463.9 l
+547.04 461.6909 545.2491 459.9 543.04 459.9 c
+52.24 459.9 l
+50.0309 459.9 48.24 461.6909 48.24 463.9 c
+48.24 610.56 l
+48.24 612.7691 50.0309 614.56 52.24 614.56 c
+h
+S
+Q
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
+
+BT
+59.24 591.735 Td
+/F4.0 11 Tf
+<3c70726f70657274793e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+59.24 576.995 Td
+/F4.0 11 Tf
+<ca20> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
+
+BT
+70.24 576.995 Td
+/F4.0 11 Tf
+<3c6e616d653e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+103.24 576.995 Td
+/F4.0 11 Tf
+<68626173652e636c69656e742e6b65797461622e66696c65> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
+
+BT
+235.24 576.995 Td
+/F4.0 11 Tf
+<3c2f6e616d653e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+59.24 562.255 Td
+/F4.0 11 Tf
+<ca20> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
+
+BT
+70.24 562.255 Td
+/F4.0 11 Tf
+<3c76616c75653e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+108.74 562.255 Td
+/F4.0 11 Tf
+<2f6c6f63616c2f706174682f746f2f636c69656e742f6b6579746162> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
+
+BT
+262.74 562.255 Td
+/F4.0 11 Tf
+<3c2f76616c75653e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
+
+BT
+59.24 547.515 Td
+/F4.0 11 Tf
+<3c2f70726f70657274793e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
+
+BT
+59.24 518.035 Td
+/F4.0 11 Tf
+<3c70726f70657274793e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+59.24 503.295 Td
+/F4.0 11 Tf
+<ca20> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
+
+BT
+70.24 503.295 Td
+/F4.0 11 Tf
+<3c6e616d653e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+103.24 503.295 Td
+/F4.0 11 Tf
+<68626173652e636c69656e742e6b65797461622e7072696e636970616c> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
+
+BT
+262.74 503.295 Td
+/F4.0 11 Tf
+<3c2f6e616d653e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+59.24 488.555 Td
+/F4.0 11 Tf
+<ca20> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
+
+BT
+70.24 488.555 Td
+/F4.0 11 Tf
+<3c76616c75653e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+108.74 488.555 Td
+/F4.0 11 Tf
+<666f6f404558414d504c452e434f4d> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
+
+BT
+191.24 488.555 Td
+/F4.0 11 Tf
+<3c2f76616c75653e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
+
+BT
+59.24 473.815 Td
+/F4.0 11 Tf
+<3c2f70726f70657274793e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+3.8262 Tw
+
+BT
+48.24 435.936 Td
+/F1.0 10.5 Tf
+<5468656e206170706c69636174696f6e2063616e206175746f6d61746963616c6c7920646f20746865206c6f67696e20616e642063726564656e7469616c2072656e6577616c206a6f627320776974686f757420636c69656e74> Tj
+ET
+
 
 0.0 Tw
 0.0 0.0 0.0 SCN
@@ -199323,12 +199636,23 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.6017 Tw
+BT
+48.24 420.156 Td
+/F1.0 10.5 Tf
+<696e746572666572656e63652e> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+0.5935 Tw
 
 BT
-493.5603 673.936 Td
+48.24 392.376 Td
 /F1.0 10.5 Tf
-<20636f6d6d616e64> Tj
+[<4974d573206f7074696f6e616c20666561747572652c20636c69656e742c2077686f2075706772> 20.0195 <6164657320746f20322e322e302c2063616e207374696c6c206b> 20.0195 <656570207468656972206c6f67696e20616e642063726564656e7469616c2072656e6577616c>] TJ
 ET
 
 
@@ -199338,10 +199662,66 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
+7.9187 Tw
+
 BT
-48.24 658.156 Td
+48.24 376.596 Td
 /F1.0 10.5 Tf
-<6265666f726520636f6d6d756e69636174696f6e20776974682074686520484261736520636c75737465722077696c6c20626520706f737369626c652e> Tj
+[<6c6f67696320616c72656164792064696420696e206f6c6465722076657273696f6e2c206173206c6f6e67206173206b> 20.0195 <656570696e6720>] TJ
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.6941 0.1294 0.2745 scn
+0.6941 0.1294 0.2745 SCN
+
+7.9187 Tw
+
+BT
+391.2918 376.596 Td
+/F4.0 10.5 Tf
+<68626173652e636c69656e742e6b65797461622e66696c65> Tj
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+7.9187 Tw
+
+BT
+517.2918 376.596 Td
+/F1.0 10.5 Tf
+<20616e64> Tj
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.6941 0.1294 0.2745 scn
+0.6941 0.1294 0.2745 SCN
+
+BT
+48.24 360.816 Td
+/F4.0 10.5 Tf
+<68626173652e636c69656e742e6b65797461622e7072696e636970616c> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+200.49 360.816 Td
+/F1.0 10.5 Tf
+<2061726520756e7365742e> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -199352,7 +199732,7 @@ ET
 1.1001 Tw
 
 BT
-48.24 630.376 Td
+48.24 333.036 Td
 /F1.0 10.5 Tf
 <4265206164766973656420746861742069662074686520> Tj
 ET
@@ -199367,7 +199747,7 @@ ET
 1.1001 Tw
 
 BT
-161.5124 630.376 Td
+161.5124 333.036 Td
 /F4.0 10.5 Tf
 <68626173652e73656375726974792e61757468656e7469636174696f6e> Tj
 ET
@@ -199382,7 +199762,7 @@ ET
 1.1001 Tw
 
 BT
-313.7624 630.376 Td
+313.7624 333.036 Td
 /F1.0 10.5 Tf
 <20696e2074686520636c69656e742d20616e64207365727665722d7369646520736974652066696c657320646f206e6f74> Tj
 ET
@@ -199395,7 +199775,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 614.596 Td
+48.24 317.256 Td
 /F1.0 10.5 Tf
 <6d617463682c2074686520636c69656e742077696c6c206e6f742062652061626c6520746f20636f6d6d756e696361746520776974682074686520636c75737465722e> Tj
 ET
@@ -199408,7 +199788,7 @@ ET
 4.7595 Tw
 
 BT
-48.24 586.816 Td
+48.24 289.476 Td
 /F1.0 10.5 Tf
 <4f6e636520484261736520697320636f6e6669677572656420666f72207365637572652052504320697420697320706f737369626c6520746f206f7074696f6e616c6c7920636f6e66696775726520656e63727970746564> Tj
 ET
@@ -199421,7 +199801,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 571.036 Td
+48.24 273.696 Td
 /F1.0 10.5 Tf
 [<636f6d6d756e69636174696f6e2e2054> 29.7852 <6f20646f20736f2c206164642074686520666f6c6c6f77696e6720746f2074686520>] TJ
 ET
@@ -199432,7 +199812,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-299.9798 571.036 Td
+299.9798 273.696 Td
 /F4.0 10.5 Tf
 <68626173652d736974652e786d6c> Tj
 ET
@@ -199443,7 +199823,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-373.4798 571.036 Td
+373.4798 273.696 Td
 /F1.0 10.5 Tf
 <2066696c65206f6e20657665727920636c69656e743a> Tj
 ET
@@ -199452,28 +199832,28 @@ ET
 0.0 0.0 0.0 scn
 q
 0.9608 0.9608 0.9608 scn
-52.24 555.22 m
-543.04 555.22 l
-545.2491 555.22 547.04 553.4291 547.04 551.22 c
-547.04 478.26 l
-547.04 476.0509 545.2491 474.26 543.04 474.26 c
-52.24 474.26 l
-50.0309 474.26 48.24 476.0509 48.24 478.26 c
-48.24 551.22 l
-48.24 553.4291 50.0309 555.22 52.24 555.22 c
+52.24 257.88 m
+543.04 257.88 l
+545.2491 257.88 547.04 256.0891 547.04 253.88 c
+547.04 180.92 l
+547.04 178.7109 545.2491 176.92 543.04 176.92 c
+52.24 176.92 l
+50.0309 176.92 48.24 178.7109 48.24 180.92 c
+48.24 253.88 l
+48.24 256.0891 50.0309 257.88 52.24 257.88 c
 h
 f
 0.8 0.8 0.8 SCN
 0.75 w
-52.24 555.22 m
-543.04 555.22 l
-545.2491 555.22 547.04 553.4291 547.04 551.22 c
-547.04 478.26 l
-547.04 476.0509 545.2491 474.26 543.04 474.26 c
-52.24 474.26 l
-50.0309 474.26 48.24 476.0509 48.24 478.26 c
-48.24 551.22 l
-48.24 553.4291 50.0309 555.22 52.24 555.22 c
+52.24 257.88 m
+543.04 257.88 l
+545.2491 257.88 547.04 256.0891 547.04 253.88 c
+547.04 180.92 l
+547.04 178.7109 545.2491 176.92 543.04 176.92 c
+52.24 176.92 l
+50.0309 176.92 48.24 178.7109 48.24 180.92 c
+48.24 253.88 l
+48.24 256.0891 50.0309 257.88 52.24 257.88 c
 h
 S
 Q
@@ -199481,7 +199861,7 @@ Q
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 532.395 Td
+59.24 235.055 Td
 /F4.0 11 Tf
 <3c70726f70657274793e> Tj
 ET
@@ -199492,7 +199872,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 517.655 Td
+59.24 220.315 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -199503,7 +199883,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 517.655 Td
+70.24 220.315 Td
 /F4.0 11 Tf
 <3c6e616d653e> Tj
 ET
@@ -199514,7 +199894,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-103.24 517.655 Td
+103.24 220.315 Td
 /F4.0 11 Tf
 <68626173652e7270632e70726f74656374696f6e> Tj
 ET
@@ -199525,7 +199905,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-213.24 517.655 Td
+213.24 220.315 Td
 /F4.0 11 Tf
 <3c2f6e616d653e> Tj
 ET
@@ -199536,7 +199916,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 502.915 Td
+59.24 205.575 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -199547,7 +199927,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 502.915 Td
+70.24 205.575 Td
 /F4.0 11 Tf
 <3c76616c75653e> Tj
 ET
@@ -199558,7 +199938,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-108.74 502.915 Td
+108.74 205.575 Td
 /F4.0 11 Tf
 <70726976616379> Tj
 ET
@@ -199569,7 +199949,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-147.24 502.915 Td
+147.24 205.575 Td
 /F4.0 11 Tf
 <3c2f76616c75653e> Tj
 ET
@@ -199580,7 +199960,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 488.175 Td
+59.24 190.835 Td
 /F4.0 11 Tf
 <3c2f70726f70657274793e> Tj
 ET
@@ -199593,7 +199973,7 @@ ET
 1.4831 Tw
 
 BT
-48.24 450.296 Td
+48.24 152.956 Td
 /F1.0 10.5 Tf
 [<5468697320636f6e6669677572> 20.0195 <6174696f6e2070726f70657274792063616e20616c736f20626520736574206f6e2061207065722d636f6e6e656374696f6e2062617369732e2053657420697420696e2074686520>] TJ
 ET
@@ -199608,7 +199988,7 @@ ET
 1.4831 Tw
 
 BT
-478.79 450.296 Td
+478.79 152.956 Td
 /F4.0 10.5 Tf
 <436f6e66696775726174696f6e> Tj
 ET
@@ -199623,7 +200003,7 @@ ET
 1.4831 Tw
 
 BT
-547.04 450.296 Td
+547.04 152.956 Td
 ET
 
 
@@ -199634,7 +200014,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 434.516 Td
+48.24 137.176 Td
 /F1.0 10.5 Tf
 <737570706c69656420746f20> Tj
 ET
@@ -199645,7 +200025,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-106.3575 434.516 Td
+106.3575 137.176 Td
 /F4.0 10.5 Tf
 <5461626c65> Tj
 ET
@@ -199656,7 +200036,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-132.6075 434.516 Td
+132.6075 137.176 Td
 /F1.0 10.5 Tf
 <3a> Tj
 ET
@@ -199664,37 +200044,88 @@ ET
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 q
+0.0 0.0 0.0 scn
+0.0 0.0 0.0 SCN
+1 w
+0 J
+0 j
+[] 0 d
+/Stamp1 Do
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+530.947 14.388 Td
+/F1.0 9 Tf
+<323035> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+Q
+Q
+
+endstream
+endobj
+1302 0 obj
+<< /Type /Page
+/Parent 3 0 R
+/MediaBox [0 0 595.28 841.89]
+/CropBox [0 0 595.28 841.89]
+/BleedBox [0 0 595.28 841.89]
+/TrimBox [0 0 595.28 841.89]
+/ArtBox [0 0 595.28 841.89]
+/Contents 1301 0 R
+/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/Font << /F1.0 10 0 R
+/F4.0 37 0 R
+>>
+/XObject << /Stamp1 4970 0 R
+>>
+>>
+>>
+endobj
+1303 0 obj
+<< /Length 23744
+>>
+stream
+q
+q
+/DeviceRGB cs
 0.9608 0.9608 0.9608 scn
-52.24 418.7 m
-543.04 418.7 l
-545.2491 418.7 547.04 416.9091 547.04 414.7 c
-547.04 297.52 l
-547.04 295.3109 545.2491 293.52 543.04 293.52 c
-52.24 293.52 l
-50.0309 293.52 48.24 295.3109 48.24 297.52 c
-48.24 414.7 l
-48.24 416.9091 50.0309 418.7 52.24 418.7 c
+52.24 805.89 m
+543.04 805.89 l
+545.2491 805.89 547.04 804.0991 547.04 801.89 c
+547.04 684.71 l
+547.04 682.5009 545.2491 680.71 543.04 680.71 c
+52.24 680.71 l
+50.0309 680.71 48.24 682.5009 48.24 684.71 c
+48.24 801.89 l
+48.24 804.0991 50.0309 805.89 52.24 805.89 c
 h
 f
+/DeviceRGB CS
 0.8 0.8 0.8 SCN
 0.75 w
-52.24 418.7 m
-543.04 418.7 l
-545.2491 418.7 547.04 416.9091 547.04 414.7 c
-547.04 297.52 l
-547.04 295.3109 545.2491 293.52 543.04 293.52 c
-52.24 293.52 l
-50.0309 293.52 48.24 295.3109 48.24 297.52 c
-48.24 414.7 l
-48.24 416.9091 50.0309 418.7 52.24 418.7 c
+52.24 805.89 m
+543.04 805.89 l
+545.2491 805.89 547.04 804.0991 547.04 801.89 c
+547.04 684.71 l
+547.04 682.5009 545.2491 680.71 543.04 680.71 c
+52.24 680.71 l
+50.0309 680.71 48.24 682.5009 48.24 684.71 c
+48.24 801.89 l
+48.24 804.0991 50.0309 805.89 52.24 805.89 c
 h
 S
 Q
+/DeviceRGB cs
 0.0 0.4667 0.5333 scn
+/DeviceRGB CS
 0.0 0.4667 0.5333 SCN
 
 BT
-59.24 395.875 Td
+59.24 783.065 Td
 /F4.0 11 Tf
 <436f6e66696775726174696f6e> Tj
 ET
@@ -199705,7 +200136,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-130.74 395.875 Td
+130.74 783.065 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -199716,7 +200147,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-136.24 395.875 Td
+136.24 783.065 Td
 /F4.0 11 Tf
 <636f6e66> Tj
 ET
@@ -199727,7 +200158,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-158.24 395.875 Td
+158.24 783.065 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -199738,7 +200169,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-163.74 395.875 Td
+163.74 783.065 Td
 /F4.0 11 Tf
 <3d> Tj
 ET
@@ -199749,7 +200180,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-169.24 395.875 Td
+169.24 783.065 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -199760,7 +200191,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-174.74 395.875 Td
+174.74 783.065 Td
 /F4.0 11 Tf
 <4842617365436f6e66696775726174696f6e> Tj
 ET
@@ -199771,7 +200202,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-273.74 395.875 Td
+273.74 783.065 Td
 /F4.0 11 Tf
 <2e> Tj
 ET
@@ -199782,7 +200213,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-279.24 395.875 Td
+279.24 783.065 Td
 /F4.0 11 Tf
 <637265617465> Tj
 ET
@@ -199793,7 +200224,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-312.24 395.875 Td
+312.24 783.065 Td
 /F4.0 11 Tf
 <28> Tj
 ET
@@ -199804,7 +200235,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-317.74 395.875 Td
+317.74 783.065 Td
 /F4.0 11 Tf
 <29> Tj
 ET
@@ -199815,7 +200246,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-323.24 395.875 Td
+323.24 783.065 Td
 /F4.0 11 Tf
 <3b> Tj
 ET
@@ -199826,7 +200257,7 @@ ET
 0.0 0.4667 0.5333 SCN
 
 BT
-59.24 381.135 Td
+59.24 768.325 Td
 /F4.0 11 Tf
 <436f6e6e656374696f6e> Tj
 ET
@@ -199837,7 +200268,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-114.24 381.135 Td
+114.24 768.325 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -199848,7 +200279,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-119.74 381.135 Td
+119.74 768.325 Td
 /F4.0 11 Tf
 <636f6e6e656374696f6e> Tj
 ET
@@ -199859,7 +200290,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-174.74 381.135 Td
+174.74 768.325 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -199870,7 +200301,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-180.24 381.135 Td
+180.24 768.325 Td
 /F4.0 11 Tf
 <3d> Tj
 ET
@@ -199881,7 +200312,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-185.74 381.135 Td
+185.74 768.325 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -199892,7 +200323,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-191.24 381.135 Td
+191.24 768.325 Td
 /F4.0 11 Tf
 <436f6e6e656374696f6e466163746f7279> Tj
 ET
@@ -199903,7 +200334,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-284.74 381.135 Td
+284.74 768.325 Td
 /F4.0 11 Tf
 <2e> Tj
 ET
@@ -199914,7 +200345,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-290.24 381.135 Td
+290.24 768.325 Td
 /F4.0 11 Tf
 <637265617465436f6e6e656374696f6e> Tj
 ET
@@ -199925,7 +200356,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-378.24 381.135 Td
+378.24 768.325 Td
 /F4.0 11 Tf
 <28> Tj
 ET
@@ -199936,7 +200367,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-383.74 381.135 Td
+383.74 768.325 Td
 /F4.0 11 Tf
 <636f6e66> Tj
 ET
@@ -199947,7 +200378,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-405.74 381.135 Td
+405.74 768.325 Td
 /F4.0 11 Tf
 <29> Tj
 ET
@@ -199958,7 +200389,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-411.24 381.135 Td
+411.24 768.325 Td
 /F4.0 11 Tf
 <3b> Tj
 ET
@@ -199969,7 +200400,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 366.395 Td
+59.24 753.585 Td
 /F4.0 11 Tf
 <636f6e66> Tj
 ET
@@ -199980,7 +200411,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-81.24 366.395 Td
+81.24 753.585 Td
 /F4.0 11 Tf
 <2e> Tj
 ET
@@ -199991,7 +200422,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-86.74 366.395 Td
+86.74 753.585 Td
 /F4.0 11 Tf
 <736574> Tj
 ET
@@ -200002,7 +200433,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-103.24 366.395 Td
+103.24 753.585 Td
 /F4.0 11 Tf
 <28> Tj
 ET
@@ -200013,7 +200444,7 @@ ET
 0.8 0.2 0.0 SCN
 
 BT
-108.74 366.395 Td
+108.74 753.585 Td
 /F4.0 11 Tf
 <22> Tj
 ET
@@ -200024,7 +200455,7 @@ ET
 0.8 0.2 0.0 SCN
 
 BT
-114.24 366.395 Td
+114.24 753.585 Td
 /F4.0 11 Tf
 <68626173652e7270632e70726f74656374696f6e> Tj
 ET
@@ -200035,7 +200466,7 @@ ET
 0.8 0.2 0.0 SCN
 
 BT
-224.24 366.395 Td
+224.24 753.585 Td
 /F4.0 11 Tf
 <22> Tj
 ET
@@ -200046,7 +200477,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-229.74 366.395 Td
+229.74 753.585 Td
 /F4.0 11 Tf
 <2c> Tj
 ET
@@ -200057,7 +200488,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-235.24 366.395 Td
+235.24 753.585 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -200068,7 +200499,7 @@ ET
 0.8 0.2 0.0 SCN
 
 BT
-240.74 366.395 Td
+240.74 753.585 Td
 /F4.0 11 Tf
 <22> Tj
 ET
@@ -200079,7 +200510,7 @@ ET
 0.8 0.2 0.0 SCN
 
 BT
-246.24 366.395 Td
+246.24 753.585 Td
 /F4.0 11 Tf
 <70726976616379> Tj
 ET
@@ -200090,7 +200521,7 @@ ET
 0.8 0.2 0.0 SCN
 
 BT
-284.74 366.395 Td
+284.74 753.585 Td
 /F4.0 11 Tf
 <22> Tj
 ET
@@ -200101,7 +200532,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-290.24 366.395 Td
+290.24 753.585 Td
 /F4.0 11 Tf
 <29> Tj
 ET
@@ -200112,7 +200543,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-295.74 366.395 Td
+295.74 753.585 Td
 /F4.0 11 Tf
 <3b> Tj
 ET
@@ -200123,7 +200554,7 @@ ET
 0.0 0.4 0.6 SCN
 
 BT
-59.24 351.655 Td
+59.24 738.845 Td
 /F4.0 11 Tf
 <747279> Tj
 ET
@@ -200134,7 +200565,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-75.74 351.655 Td
+75.74 738.845 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -200145,7 +200576,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-81.24 351.655 Td
+81.24 738.845 Td
 /F4.0 11 Tf
 <28> Tj
 ET
@@ -200156,7 +200587,7 @@ ET
 0.0 0.4667 0.5333 SCN
 
 BT
-86.74 351.655 Td
+86.74 738.845 Td
 /F4.0 11 Tf
 <436f6e6e656374696f6e> Tj
 ET
@@ -200167,7 +200598,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-141.74 351.655 Td
+141.74 738.845 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -200178,7 +200609,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-147.24 351.655 Td
+147.24 738.845 Td
 /F4.0 11 Tf
 <636f6e6e656374696f6e> Tj
 ET
@@ -200189,7 +200620,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-202.24 351.655 Td
+202.24 738.845 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -200200,7 +200631,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-207.74 351.655 Td
+207.74 738.845 Td
 /F4.0 11 Tf
 <3d> Tj
 ET
@@ -200211,7 +200642,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-213.24 351.655 Td
+213.24 738.845 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -200222,7 +200653,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-218.74 351.655 Td
+218.74 738.845 Td
 /F4.0 11 Tf
 <436f6e6e656374696f6e466163746f7279> Tj
 ET
@@ -200233,7 +200664,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-312.24 351.655 Td
+312.24 738.845 Td
 /F4.0 11 Tf
 <2e> Tj
 ET
@@ -200244,7 +200675,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-317.74 351.655 Td
+317.74 738.845 Td
 /F4.0 11 Tf
 <637265617465436f6e6e656374696f6e> Tj
 ET
@@ -200255,7 +200686,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-405.74 351.655 Td
+405.74 738.845 Td
 /F4.0 11 Tf
 <28> Tj
 ET
@@ -200266,7 +200697,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-411.24 351.655 Td
+411.24 738.845 Td
 /F4.0 11 Tf
 <636f6e66> Tj
 ET
@@ -200277,7 +200708,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-433.24 351.655 Td
+433.24 738.845 Td
 /F4.0 11 Tf
 <29> Tj
 ET
@@ -200288,7 +200719,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-438.74 351.655 Td
+438.74 738.845 Td
 /F4.0 11 Tf
 <3b> Tj
 ET
@@ -200299,7 +200730,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 336.915 Td
+59.24 724.105 Td
 /F4.0 11 Tf
 <ca20202020> Tj
 ET
@@ -200310,7 +200741,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-86.74 336.915 Td
+86.74 724.105 Td
 /F4.0 11 Tf
 <5461626c65> Tj
 ET
@@ -200321,7 +200752,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-114.24 336.915 Td
+114.24 724.105 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -200332,7 +200763,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-119.74 336.915 Td
+119.74 724.105 Td
 /F4.0 11 Tf
 <7461626c65> Tj
 ET
@@ -200343,7 +200774,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-147.24 336.915 Td
+147.24 724.105 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -200354,7 +200785,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-152.74 336.915 Td
+152.74 724.105 Td
 /F4.0 11 Tf
 <3d> Tj
 ET
@@ -200365,7 +200796,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-158.24 336.915 Td
+158.24 724.105 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -200376,7 +200807,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-163.74 336.915 Td
+163.74 724.105 Td
 /F4.0 11 Tf
 <636f6e6e656374696f6e> Tj
 ET
@@ -200387,7 +200818,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-218.74 336.915 Td
+218.74 724.105 Td
 /F4.0 11 Tf
 <2e> Tj
 ET
@@ -200398,7 +200829,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-224.24 336.915 Td
+224.24 724.105 Td
 /F4.0 11 Tf
 <6765745461626c65> Tj
 ET
@@ -200409,7 +200840,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-268.24 336.915 Td
+268.24 724.105 Td
 /F4.0 11 Tf
 <28> Tj
 ET
@@ -200420,7 +200851,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-273.74 336.915 Td
+273.74 724.105 Td
 /F4.0 11 Tf
 <5461626c654e616d65> Tj
 ET
@@ -200431,7 +200862,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-323.24 336.915 Td
+323.24 724.105 Td
 /F4.0 11 Tf
 <2e> Tj
 ET
@@ -200442,7 +200873,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-328.74 336.915 Td
+328.74 724.105 Td
 /F4.0 11 Tf
 <76616c75654f66> Tj
 ET
@@ -200453,7 +200884,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-367.24 336.915 Td
+367.24 724.105 Td
 /F4.0 11 Tf
 <28> Tj
 ET
@@ -200464,7 +200895,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-372.74 336.915 Td
+372.74 724.105 Td
 /F4.0 11 Tf
 <7461626c656e616d65> Tj
 ET
@@ -200475,7 +200906,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-422.24 336.915 Td
+422.24 724.105 Td
 /F4.0 11 Tf
 <29> Tj
 ET
@@ -200486,7 +200917,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-427.74 336.915 Td
+427.74 724.105 Td
 /F4.0 11 Tf
 <29> Tj
 ET
@@ -200497,7 +200928,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-433.24 336.915 Td
+433.24 724.105 Td
 /F4.0 11 Tf
 <29> Tj
 ET
@@ -200508,7 +200939,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-438.74 336.915 Td
+438.74 724.105 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -200519,7 +200950,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-444.24 336.915 Td
+444.24 724.105 Td
 /F4.0 11 Tf
 <7b> Tj
 ET
@@ -200530,7 +200961,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 322.175 Td
+59.24 709.365 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -200541,7 +200972,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-70.24 322.175 Td
+70.24 709.365 Td
 /F4.0 11 Tf
 <2e> Tj
 ET
@@ -200552,7 +200983,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-75.74 322.175 Td
+75.74 709.365 Td
 /F4.0 11 Tf
 <2e> Tj
 ET
@@ -200563,7 +200994,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-81.24 322.175 Td
+81.24 709.365 Td
 /F4.0 11 Tf
 <2e> Tj
 ET
@@ -200574,7 +201005,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-86.74 322.175 Td
+86.74 709.365 Td
 /F4.0 11 Tf
 <2e> Tj
 ET
@@ -200585,7 +201016,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-92.24 322.175 Td
+92.24 709.365 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -200596,7 +201027,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-97.74 322.175 Td
+97.74 709.365 Td
 /F4.0 11 Tf
 <646f> Tj
 ET
@@ -200607,7 +201038,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-108.74 322.175 Td
+108.74 709.365 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -200618,7 +201049,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-114.24 322.175 Td
+114.24 709.365 Td
 /F4.0 11 Tf
 <796f7572> Tj
 ET
@@ -200629,7 +201060,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-136.24 322.175 Td
+136.24 709.365 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -200640,7 +201071,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-141.74 322.175 Td
+141.74 709.365 Td
 /F4.0 11 Tf
 <7374756666> Tj
 ET
@@ -200651,7 +201082,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 307.435 Td
+59.24 694.625 Td
 /F4.0 11 Tf
 <7d> Tj
 ET
@@ -200662,7 +201093,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 269.556 Td
+48.24 656.746 Td
 /F1.0 10.5 Tf
 <4578706563742061207e31302520706572666f726d616e63652070656e616c747920666f7220656e6372797074656420636f6d6d756e69636174696f6e2e> Tj
 ET
@@ -200673,7 +201104,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 229.716 Td
+48.24 616.906 Td
 /F2.0 18 Tf
 [<36302e342e20436c69656e742d7369646520436f6e6669677572> 20.0195 <6174696f6e20666f7220536563757265204f706572> 20.0195 <6174696f6e202d>] TJ
 ET
@@ -200684,7 +201115,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 205.236 Td
+48.24 592.426 Td
 /F2.0 18 Tf
 [<54687269667420476174657761> 20.0195 <79>] TJ
 ET
@@ -200695,7 +201126,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 177.216 Td
+48.24 564.406 Td
 /F1.0 10.5 Tf
 [<41> 20.0195 <64642074686520666f6c6c6f77696e6720746f2074686520>] TJ
 ET
@@ -200706,7 +201137,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-170.9113 177.216 Td
+170.9113 564.406 Td
 /F4.0 10.5 Tf
 <68626173652d736974652e786d6c> Tj
 ET
@@ -200717,7 +201148,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-244.4113 177.216 Td
+244.4113 564.406 Td
 /F1.0 10.5 Tf
 [<2066696c6520666f722065766572792054687269667420676174657761> 20.0195 <793a>] TJ
 ET
@@ -200725,92 +201156,37 @@ ET
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 q
-0.0 0.0 0.0 scn
-0.0 0.0 0.0 SCN
-1 w
-0 J
-0 j
-[] 0 d
-/Stamp1 Do
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-BT
-530.947 14.388 Td
-/F1.0 9 Tf
-<323035> Tj
-ET
-
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-Q
-Q
-
-endstream
-endobj
-1302 0 obj
-<< /Type /Page
-/Parent 3 0 R
-/MediaBox [0 0 595.28 841.89]
-/CropBox [0 0 595.28 841.89]
-/BleedBox [0 0 595.28 841.89]
-/TrimBox [0 0 595.28 841.89]
-/ArtBox [0 0 595.28 841.89]
-/Contents 1301 0 R
-/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/Font << /F1.0 10 0 R
-/F4.0 37 0 R
-/F2.0 31 0 R
->>
-/XObject << /Stamp1 4970 0 R
->>
->>
->>
-endobj
-1303 0 obj
-[1302 0 R /XYZ 0 253.74 null]
-endobj
-1304 0 obj
-<< /Length 16108
->>
-stream
-q
-q
-/DeviceRGB cs
 0.9608 0.9608 0.9608 scn
-52.24 805.89 m
-543.04 805.89 l
-545.2491 805.89 547.04 804.0991 547.04 801.89 c
-547.04 493.09 l
-547.04 490.8809 545.2491 489.09 543.04 489.09 c
-52.24 489.09 l
-50.0309 489.09 48.24 490.8809 48.24 493.09 c
-48.24 801.89 l
-48.24 804.0991 50.0309 805.89 52.24 805.89 c
+52.24 548.59 m
+543.04 548.59 l
+545.2491 548.59 547.04 546.7991 547.04 544.59 c
+547.04 235.79 l
+547.04 233.5809 545.2491 231.79 543.04 231.79 c
+52.24 231.79 l
+50.0309 231.79 48.24 233.5809 48.24 235.79 c
+48.24 544.59 l
+48.24 546.7991 50.0309 548.59 52.24 548.59 c
 h
 f
-/DeviceRGB CS
 0.8 0.8 0.8 SCN
 0.75 w
-52.24 805.89 m
-543.04 805.89 l
-545.2491 805.89 547.04 804.0991 547.04 801.89 c
-547.04 493.09 l
-547.04 490.8809 545.2491 489.09 543.04 489.09 c
-52.24 489.09 l
-50.0309 489.09 48.24 490.8809 48.24 493.09 c
-48.24 801.89 l
-48.24 804.0991 50.0309 805.89 52.24 805.89 c
+52.24 548.59 m
+543.04 548.59 l
+545.2491 548.59 547.04 546.7991 547.04 544.59 c
+547.04 235.79 l
+547.04 233.5809 545.2491 231.79 543.04 231.79 c
+52.24 231.79 l
+50.0309 231.79 48.24 233.5809 48.24 235.79 c
+48.24 544.59 l
+48.24 546.7991 50.0309 548.59 52.24 548.59 c
 h
 S
 Q
-/DeviceRGB cs
 0.1843 0.4353 0.6235 scn
-/DeviceRGB CS
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 783.065 Td
+59.24 525.765 Td
 /F4.0 11 Tf
 <3c70726f70657274793e> Tj
 ET
@@ -200821,7 +201197,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 768.325 Td
+59.24 511.025 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -200832,7 +201208,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 768.325 Td
+70.24 511.025 Td
 /F4.0 11 Tf
 <3c6e616d653e> Tj
 ET
@@ -200843,7 +201219,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-103.24 768.325 Td
+103.24 511.025 Td
 /F4.0 11 Tf
 <68626173652e7468726966742e6b65797461622e66696c65> Tj
 ET
@@ -200854,7 +201230,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-235.24 768.325 Td
+235.24 511.025 Td
 /F4.0 11 Tf
 <3c2f6e616d653e> Tj
 ET
@@ -200865,7 +201241,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 753.585 Td
+59.24 496.285 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -200876,7 +201252,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 753.585 Td
+70.24 496.285 Td
 /F4.0 11 Tf
 <3c76616c75653e> Tj
 ET
@@ -200887,7 +201263,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-108.74 753.585 Td
+108.74 496.285 Td
 /F4.0 11 Tf
 <2f6574632f68626173652f636f6e662f68626173652e6b6579746162> Tj
 ET
@@ -200898,7 +201274,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-262.74 753.585 Td
+262.74 496.285 Td
 /F4.0 11 Tf
 <3c2f76616c75653e> Tj
 ET
@@ -200909,7 +201285,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 738.845 Td
+59.24 481.545 Td
 /F4.0 11 Tf
 <3c2f70726f70657274793e> Tj
 ET
@@ -200920,7 +201296,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 724.105 Td
+59.24 466.805 Td
 /F4.0 11 Tf
 <3c70726f70657274793e> Tj
 ET
@@ -200931,7 +201307,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 709.365 Td
+59.24 452.065 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -200942,7 +201318,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 709.365 Td
+70.24 452.065 Td
 /F4.0 11 Tf
 <3c6e616d653e> Tj
 ET
@@ -200953,7 +201329,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-103.24 709.365 Td
+103.24 452.065 Td
 /F4.0 11 Tf
 <68626173652e7468726966742e6b65726265726f732e7072696e636970616c> Tj
 ET
@@ -200964,7 +201340,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-273.74 709.365 Td
+273.74 452.065 Td
 /F4.0 11 Tf
 <3c2f6e616d653e> Tj
 ET
@@ -200975,7 +201351,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 694.625 Td
+59.24 437.325 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -200986,7 +201362,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 694.625 Td
+70.24 437.325 Td
 /F4.0 11 Tf
 <3c76616c75653e> Tj
 ET
@@ -200997,7 +201373,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-108.74 694.625 Td
+108.74 437.325 Td
 /F4.0 11 Tf
 <24555345522f5f484f5354404841444f4f502e4c4f43414c444f4d41494e> Tj
 ET
@@ -201008,7 +201384,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-273.74 694.625 Td
+273.74 437.325 Td
 /F4.0 11 Tf
 <3c2f76616c75653e> Tj
 ET
@@ -201019,7 +201395,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 679.885 Td
+59.24 422.585 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -201030,7 +201406,7 @@ ET
 0.6 0.6 0.6 SCN
 
 BT
-70.24 679.885 Td
+70.24 422.585 Td
 /F4.0 11 Tf
 <3c212d2d20544f444f3a2054686973206d6179206e65656420746f2062652020485454502f5f484f5354403c5245414c4d3e20616e64205f484f5354206d6179206e6f7420776f726b2e> Tj
 ET
@@ -201041,7 +201417,7 @@ ET
 0.6 0.6 0.6 SCN
 
 BT
-59.24 665.145 Td
+59.24 407.845 Td
 /F4.0 11 Tf
 <ca2020596f75206d617920686176652020746f207075742074686520636f6e63726574652066756c6c20686f73746e616d652e> Tj
 ET
@@ -201052,7 +201428,7 @@ ET
 0.6 0.6 0.6 SCN
 
 BT
-59.24 650.405 Td
+59.24 393.105 Td
 /F4.0 11 Tf
 <ca20202d2d3e> Tj
 ET
@@ -201063,7 +201439,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 635.665 Td
+59.24 378.365 Td
 /F4.0 11 Tf
 <3c2f70726f70657274793e> Tj
 ET
@@ -201074,7 +201450,7 @@ ET
 0.6 0.6 0.6 SCN
 
 BT
-59.24 620.925 Td
+59.24 363.625 Td
 /F4.0 11 Tf
 <3c212d2d2041646420746865736520696620796f75206e65656420746f20636f6e666967757265206120646966666572656e7420444e5320696e746572666163652066726f6d207468652064656661756c74202d2d3e> Tj
 ET
@@ -201085,7 +201461,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 606.185 Td
+59.24 348.885 Td
 /F4.0 11 Tf
 <3c70726f70657274793e> Tj
 ET
@@ -201096,7 +201472,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 591.445 Td
+59.24 334.145 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -201107,7 +201483,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 591.445 Td
+70.24 334.145 Td
 /F4.0 11 Tf
 <3c6e616d653e> Tj
 ET
@@ -201118,7 +201494,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-103.24 591.445 Td
+103.24 334.145 Td
 /F4.0 11 Tf
 <68626173652e7468726966742e646e732e696e74657266616365> Tj
 ET
@@ -201129,7 +201505,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-246.24 591.445 Td
+246.24 334.145 Td
 /F4.0 11 Tf
 <3c2f6e616d653e> Tj
 ET
@@ -201140,7 +201516,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 576.705 Td
+59.24 319.405 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -201151,7 +201527,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 576.705 Td
+70.24 319.405 Td
 /F4.0 11 Tf
 <3c76616c75653e> Tj
 ET
@@ -201162,7 +201538,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-108.74 576.705 Td
+108.74 319.405 Td
 /F4.0 11 Tf
 <64656661756c74> Tj
 ET
@@ -201173,7 +201549,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-147.24 576.705 Td
+147.24 319.405 Td
 /F4.0 11 Tf
 <3c2f76616c75653e> Tj
 ET
@@ -201184,7 +201560,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 561.965 Td
+59.24 304.665 Td
 /F4.0 11 Tf
 <3c2f70726f70657274793e> Tj
 ET
@@ -201195,7 +201571,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 547.225 Td
+59.24 289.925 Td
 /F4.0 11 Tf
 <3c70726f70657274793e> Tj
 ET
@@ -201206,7 +201582,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 532.485 Td
+59.24 275.185 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -201217,7 +201593,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 532.485 Td
+70.24 275.185 Td
 /F4.0 11 Tf
 <3c6e616d653e> Tj
 ET
@@ -201228,7 +201604,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-103.24 532.485 Td
+103.24 275.185 Td
 /F4.0 11 Tf
 <68626173652e7468726966742e646e732e6e616d65736572766572> Tj
 ET
@@ -201239,7 +201615,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-251.74 532.485 Td
+251.74 275.185 Td
 /F4.0 11 Tf
 <3c2f6e616d653e> Tj
 ET
@@ -201250,7 +201626,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 517.745 Td
+59.24 260.445 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -201261,7 +201637,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 517.745 Td
+70.24 260.445 Td
 /F4.0 11 Tf
 <3c76616c75653e> Tj
 ET
@@ -201272,7 +201648,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-108.74 517.745 Td
+108.74 260.445 Td
 /F4.0 11 Tf
 <64656661756c74> Tj
 ET
@@ -201283,7 +201659,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-147.24 517.745 Td
+147.24 260.445 Td
 /F4.0 11 Tf
 <3c2f76616c75653e> Tj
 ET
@@ -201294,7 +201670,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 503.005 Td
+59.24 245.705 Td
 /F4.0 11 Tf
 <3c2f70726f70657274793e> Tj
 ET
@@ -201305,7 +201681,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 465.126 Td
+48.24 207.826 Td
 /F1.0 10.5 Tf
 [<537562737469747574652074686520617070726f7072696174652063726564656e7469616c20616e64206b> 20.0195 <657974616220666f7220>] TJ
 ET
@@ -201316,7 +201692,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-311.4538 465.126 Td
+311.4538 207.826 Td
 /F3.0 10.5 Tf
 <2455534552> Tj
 ET
@@ -201327,7 +201703,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-344.1928 465.126 Td
+344.1928 207.826 Td
 /F1.0 10.5 Tf
 <20616e6420> Tj
 ET
@@ -201338,7 +201714,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-368.7418 465.126 Td
+368.7418 207.826 Td
 /F3.0 10.5 Tf
 [<244b45> 20.0195 <5954> 60.0586 <4142>] TJ
 ET
@@ -201349,7 +201725,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-414.9095 465.126 Td
+414.9095 207.826 Td
 /F1.0 10.5 Tf
 [<20726573706563746976656c79> 89.8438 <2e>] TJ
 ET
@@ -201362,7 +201738,7 @@ ET
 2.325 Tw
 
 BT
-48.24 437.346 Td
+48.24 180.046 Td
 /F1.0 10.5 Tf
 [<496e206f7264657220746f20757365207468652054687269667420415049207072696e636970616c20746f20696e746572> 20.0195 <61637420776974682048426173652c20697420697320616c736f206e656365737361727920746f2061646420746865>] TJ
 ET
@@ -201377,7 +201753,7 @@ ET
 2.5837 Tw
 
 BT
-48.24 421.566 Td
+48.24 164.266 Td
 /F4.0 10.5 Tf
 <68626173652e7468726966742e6b65726265726f732e7072696e636970616c> Tj
 ET
@@ -201392,7 +201768,7 @@ ET
 2.5837 Tw
 
 BT
-210.99 421.566 Td
+210.99 164.266 Td
 /F1.0 10.5 Tf
 <20746f2074686520> Tj
 ET
@@ -201407,7 +201783,7 @@ ET
 2.5837 Tw
 
 BT
-252.6246 421.566 Td
+252.6246 164.266 Td
 /F8.0 10.5 Tf
 <61636c> Tj
 ET
@@ -201422,7 +201798,7 @@ ET
 2.5837 Tw
 
 BT
-268.3746 421.566 Td
+268.3746 164.266 Td
 /F1.0 10.5 Tf
 [<207461626c652e2046> 40.0391 <6f72206578616d706c652c20746f2067697665207468652054687269667420415049207072696e636970616c2c>] TJ
 ET
@@ -201435,7 +201811,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-48.24 405.786 Td
+48.24 148.486 Td
 /F4.0 10.5 Tf
 <7468726966745f736572766572> Tj
 ET
@@ -201446,7 +201822,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-116.49 405.786 Td
+116.49 148.486 Td
 /F1.0 10.5 Tf
 [<2c2061646d696e69737472> 20.0195 <6174697665206163636573732c206120636f6d6d616e6420737563682061732074686973206f6e652077696c6c20737566666963653a>] TJ
 ET
@@ -201455,28 +201831,28 @@ ET
 0.0 0.0 0.0 scn
 q
 0.9608 0.9608 0.9608 scn
-52.24 389.97 m
-543.04 389.97 l
-545.2491 389.97 547.04 388.1791 547.04 385.97 c
-547.04 357.23 l
-547.04 355.0209 545.2491 353.23 543.04 353.23 c
-52.24 353.23 l
-50.0309 353.23 48.24 355.0209 48.24 357.23 c
-48.24 385.97 l
-48.24 388.1791 50.0309 389.97 52.24 389.97 c
+52.24 132.67 m
+543.04 132.67 l
+545.2491 132.67 547.04 130.8791 547.04 128.67 c
+547.04 99.93 l
+547.04 97.7209 545.2491 95.93 543.04 95.93 c
+52.24 95.93 l
+50.0309 95.93 48.24 97.7209 48.24 99.93 c
+48.24 128.67 l
+48.24 130.8791 50.0309 132.67 52.24 132.67 c
 h
 f
 0.8 0.8 0.8 SCN
 0.75 w
-52.24 389.97 m
-543.04 389.97 l
-545.2491 389.97 547.04 388.1791 547.04 385.97 c
-547.04 357.23 l
-547.04 355.0209 545.2491 353.23 543.04 353.23 c
-52.24 353.23 l
-50.0309 353.23 48.24 355.0209 48.24 357.23 c
-48.24 385.97 l
-48.24 388.1791 50.0309 389.97 52.24 389.97 c
+52.24 132.67 m
+543.04 132.67 l
+545.2491 132.67 547.04 130.8791 547.04 128.67 c
+547.04 99.93 l
+547.04 97.7209 545.2491 95.93 543.04 95.93 c
+52.24 95.93 l
+50.0309 95.93 48.24 97.7209 48.24 99.93 c
+48.24 128.67 l
+48.24 130.8791 50.0309 132.67 52.24 132.67 c
 h
 S
 Q
@@ -201484,7 +201860,7 @@ Q
 0.0 0.6667 0.5333 SCN
 
 BT
-59.24 367.145 Td
+59.24 109.845 Td
 /F4.0 11 Tf
 <6772616e74> Tj
 ET
@@ -201495,7 +201871,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-86.74 367.145 Td
+86.74 109.845 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -201506,7 +201882,7 @@ ET
 0.8 0.2 0.0 SCN
 
 BT
-92.24 367.145 Td
+92.24 109.845 Td
 /F4.0 11 Tf
 <27> Tj
 ET
@@ -201517,7 +201893,7 @@ ET
 0.8 0.2 0.0 SCN
 
 BT
-97.74 367.145 Td
+97.74 109.845 Td
 /F4.0 11 Tf
 <7468726966745f736572766572> Tj
 ET
@@ -201528,7 +201904,7 @@ ET
 0.8 0.2 0.0 SCN
 
 BT
-169.24 367.145 Td
+169.24 109.845 Td
 /F4.0 11 Tf
 <27> Tj
 ET
@@ -201539,7 +201915,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-174.74 367.145 Td
+174.74 109.845 Td
 /F4.0 11 Tf
 <2c> Tj
 ET
@@ -201550,7 +201926,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-180.24 367.145 Td
+180.24 109.845 Td
 /F4.0 11 Tf
 <20> Tj
 ET
@@ -201561,7 +201937,7 @@ ET
 0.8 0.2 0.0 SCN
 
 BT
-185.74 367.145 Td
+185.74 109.845 Td
 /F4.0 11 Tf
 <27> Tj
 ET
@@ -201572,7 +201948,7 @@ ET
 0.8 0.2 0.0 SCN
 
 BT
-191.24 367.145 Td
+191.24 109.845 Td
 /F4.0 11 Tf
 <52574341> Tj
 ET
@@ -201583,7 +201959,7 @@ ET
 0.8 0.2 0.0 SCN
 
 BT
-213.24 367.145 Td
+213.24 109.845 Td
 /F4.0 11 Tf
 <27> Tj
 ET
@@ -201594,7 +201970,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 329.266 Td
+48.24 71.966 Td
 /F1.0 10.5 Tf
 [<46> 40.0391 <6f72206d6f726520696e666f726d6174696f6e2061626f75742041> 20.0195 <434c732c20706c65617365207365652074686520>] TJ
 ET
@@ -201605,7 +201981,7 @@ ET
 0.2588 0.5451 0.7922 SCN
 
 BT
-293.7714 329.266 Td
+293.7714 71.966 Td
 /F1.0 10.5 Tf
 [<41> 20.0195 <636365737320436f6e74726f6c204c6162656c73202841> 20.0195 <434c7329>] TJ
 ET
@@ -201616,20 +201992,95 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-436.424 329.266 Td
+436.424 71.966 Td
 /F1.0 10.5 Tf
 <2073656374696f6e> Tj
 ET
 
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
+q
+0.0 0.0 0.0 scn
+0.0 0.0 0.0 SCN
+1 w
+0 J
+0 j
+[] 0 d
+/Stamp2 Do
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
+BT
+49.24 14.388 Td
+/F1.0 9 Tf
+<323036> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+Q
+Q
+
+endstream
+endobj
+1304 0 obj
+<< /Type /Page
+/Parent 3 0 R
+/MediaBox [0 0 595.28 841.89]
+/CropBox [0 0 595.28 841.89]
+/BleedBox [0 0 595.28 841.89]
+/TrimBox [0 0 595.28 841.89]
+/ArtBox [0 0 595.28 841.89]
+/Contents 1303 0 R
+/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/Font << /F4.0 37 0 R
+/F1.0 10 0 R
+/F2.0 31 0 R
+/F3.0 35 0 R
+/F8.0 1306 0 R
+>>
+/XObject << /Stamp2 4971 0 R
+>>
+>>
+/Annots [1307 0 R]
+>>
+endobj
+1305 0 obj
+[1304 0 R /XYZ 0 640.93 null]
+endobj
+1306 0 obj
+<< /Type /Font
+/BaseFont /294f18+mplus1mn-italic
+/Subtype /TrueType
+/FontDescriptor 5261 0 R
+/FirstChar 32
+/LastChar 255
+/Widths 5263 0 R
+/ToUnicode 5262 0 R
+>>
+endobj
+1307 0 obj
+<< /Border [0 0 0]
+/Dest (hbase.accesscontrol.configuration)
+/Subtype /Link
+/Rect [293.7714 68.9 436.424 83.18]
+/Type /Annot
+>>
+endobj
+1308 0 obj
+<< /Length 15374
+>>
+stream
+q
+/DeviceRGB cs
+0.2 0.2 0.2 scn
+/DeviceRGB CS
+0.2 0.2 0.2 SCN
+
 1.2003 Tw
 
 BT
-48.24 301.486 Td
+48.24 794.676 Td
 /F1.0 10.5 Tf
 [<5468652054687269667420676174657761> 20.0195 <792077696c6c2061757468656e7469636174652077697468204842617365207573696e672074686520737570706c6965642063726564656e7469616c2e204e6f2061757468656e7469636174696f6e>] TJ
 ET
@@ -201644,7 +202095,7 @@ ET
 0.8998 Tw
 
 BT
-48.24 285.706 Td
+48.24 778.896 Td
 /F1.0 10.5 Tf
 [<77696c6c20626520706572666f726d65642062> 20.0195 <79207468652054687269667420676174657761> 20.0195 <7920697473656c662e20416c6c20636c69656e742061636365737320766961207468652054687269667420676174657761> 20.0195 <792077696c6c2075736520746865>] TJ
 ET
@@ -201657,7 +202108,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 269.926 Td
+48.24 763.116 Td
 /F1.0 10.5 Tf
 [<54687269667420676174657761> 20.0195 <79d5732063726564656e7469616c20616e642068617665206974732070726976696c6567652e>] TJ
 ET
@@ -201668,7 +202119,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 230.086 Td
+48.24 723.276 Td
 /F2.0 18 Tf
 [<36302e352e20436f6e666967757265207468652054687269667420476174657761> 20.0195 <7920746f2041> 20.0195 <757468656e746963617465206f6e>] TJ
 ET
@@ -201679,7 +202130,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 205.606 Td
+48.24 698.796 Td
 /F2.0 18 Tf
 <426568616c66206f662074686520436c69656e74> Tj
 ET
@@ -201692,7 +202143,7 @@ ET
 1.8881 Tw
 
 BT
-48.24 177.586 Td
+48.24 670.776 Td
 /F1.0 10.5 Tf
 [<436c69656e742d7369646520436f6e6669677572> 20.0195 <6174696f6e20666f7220536563757265204f706572> 20.0195 <6174696f6e202d2054687269667420476174657761> 20.0195 <79>] TJ
 ET
@@ -201707,7 +202158,7 @@ ET
 1.8881 Tw
 
 BT
-376.8235 177.586 Td
+376.8235 670.776 Td
 /F1.0 10.5 Tf
 <2064657363726962657320686f7720746f2061757468656e7469636174652061> Tj
 ET
@@ -201722,7 +202173,7 @@ ET
 0.5039 Tw
 
 BT
-48.24 161.806 Td
+48.24 654.996 Td
 /F1.0 10.5 Tf
 [<54687269667420636c69656e7420746f204842617365207573696e67206120666978656420757365722e20417320616e20616c7465726e61746976652c20796f752063616e20636f6e666967757265207468652054687269667420676174657761> 20.0195 <7920746f>] TJ
 ET
@@ -201737,7 +202188,7 @@ ET
 2.0913 Tw
 
 BT
-48.24 146.026 Td
+48.24 639.216 Td
 /F1.0 10.5 Tf
 <61757468656e74696361746520746f204842617365206f6e2074686520636c69656e74d57320626568616c662c20616e6420746f20616363657373204842617365207573696e6720612070726f787920757365722e205468697320776173> Tj
 ET
@@ -201750,7 +202201,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 130.246 Td
+48.24 623.436 Td
 /F1.0 10.5 Tf
 <696d706c656d656e74656420696e20> Tj
 ET
@@ -201761,7 +202212,7 @@ ET
 0.2588 0.5451 0.7922 SCN
 
 BT
-130.4235 130.246 Td
+130.4235 623.436 Td
 /F1.0 10.5 Tf
 [<4842> 20.0195 <4153452d3131333439>] TJ
 ET
@@ -201772,7 +202223,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-197.6338 130.246 Td
+197.6338 623.436 Td
 /F1.0 10.5 Tf
 <20666f722054687269667420312c20616e6420> Tj
 ET
@@ -201783,7 +202234,7 @@ ET
 0.2588 0.5451 0.7922 SCN
 
 BT
-282.6628 130.246 Td
+282.6628 623.436 Td
 /F1.0 10.5 Tf
 [<4842> 20.0195 <4153452d3131343734>] TJ
 ET
@@ -201794,7 +202245,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-349.8731 130.246 Td
+349.8731 623.436 Td
 /F1.0 10.5 Tf
 <20666f722054687269667420322e> Tj
 ET
@@ -201804,15 +202255,15 @@ ET
 q
 0.5 w
 0.9333 0.9333 0.9333 SCN
-108.24 114.43 m
-108.24 55.879 l
+108.24 607.62 m
+108.24 549.069 l
 S
 Q
 0.098 0.251 0.4863 scn
 0.098 0.251 0.4863 SCN
 
 BT
-67.956 76.5865 Td
+67.956 569.7765 Td
 /F5.1 24 Tf
 <21> Tj
 ET
@@ -201823,7 +202274,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-120.24 99.0642 Td
+120.24 592.2542 Td
 /F3.0 9.975 Tf
 [<4c696d69746174696f6e73207769746820546872696674204672> 20.0195 <616d6564205472> 20.0195 <616e73706f7274>] TJ
 ET
@@ -201836,7 +202287,7 @@ ET
 0.0944 Tw
 
 BT
-120.24 79.475 Td
+120.24 572.665 Td
 /F1.0 10.5 Tf
 [<496620796f7520757365206672> 20.0195 <616d6564207472> 20.0195 <616e73706f72742c20796f752063616e6e6f74207965742074616b> 20.0195 <6520616476616e74616765206f66207468697320666561747572652c2062656361757365>] TJ
 ET
@@ -201849,124 +202300,18 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-120.24 63.695 Td
+120.24 556.885 Td
 /F1.0 10.5 Tf
 [<53> 20.0195 <41534c20646f6573206e6f7420776f726b207769746820546872696674206672> 20.0195 <616d6564207472> 20.0195 <616e73706f727420617420746869732074696d652e>] TJ
 ET
 
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-q
-0.0 0.0 0.0 scn
-0.0 0.0 0.0 SCN
-1 w
-0 J
-0 j
-[] 0 d
-/Stamp2 Do
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-BT
-49.24 14.388 Td
-/F1.0 9 Tf
-<323036> Tj
-ET
-
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-Q
-Q
-
-endstream
-endobj
-1305 0 obj
-<< /Type /Page
-/Parent 3 0 R
-/MediaBox [0 0 595.28 841.89]
-/CropBox [0 0 595.28 841.89]
-/BleedBox [0 0 595.28 841.89]
-/TrimBox [0 0 595.28 841.89]
-/ArtBox [0 0 595.28 841.89]
-/Contents 1304 0 R
-/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/Font << /F4.0 37 0 R
-/F1.0 10 0 R
-/F3.0 35 0 R
-/F8.0 1306 0 R
-/F2.0 31 0 R
-/F5.1 47 0 R
->>
-/XObject << /Stamp2 4971 0 R
->>
->>
-/Annots [1307 0 R 1309 0 R 1310 0 R 1311 0 R]
->>
-endobj
-1306 0 obj
-<< /Type /Font
-/BaseFont /294f18+mplus1mn-italic
-/Subtype /TrueType
-/FontDescriptor 5261 0 R
-/FirstChar 32
-/LastChar 255
-/Widths 5263 0 R
-/ToUnicode 5262 0 R
->>
-endobj
-1307 0 obj
-<< /Border [0 0 0]
-/Dest (hbase.accesscontrol.configuration)
-/Subtype /Link
-/Rect [293.7714 326.2 436.424 340.48]
-/Type /Annot
->>
-endobj
-1308 0 obj
-[1305 0 R /XYZ 0 254.11 null]
-endobj
-1309 0 obj
-<< /Border [0 0 0]
-/Dest (security.client.thrift)
-/Subtype /Link
-/Rect [48.24 174.52 376.8235 188.8]
-/Type /Annot
->>
-endobj
-1310 0 obj
-<< /Border [0 0 0]
-/A << /Type /Action
-/S /URI
-/URI (https://issues.apache.org/jira/browse/HBASE-11349)
->>
-/Subtype /Link
-/Rect [130.4235 127.18 197.6338 141.46]
-/Type /Annot
->>
-endobj
-1311 0 obj
-<< /Border [0 0 0]
-/A << /Type /Action
-/S /URI
-/URI (https://issues.apache.org/jira/browse/HBASE-11474)
->>
-/Subtype /Link
-/Rect [282.6628 127.18 349.8731 141.46]
-/Type /Annot
->>
-endobj
-1312 0 obj
-<< /Length 15581
->>
-stream
-q
-/DeviceRGB cs
 0.2 0.2 0.2 scn
-/DeviceRGB CS
 0.2 0.2 0.2 SCN
 
 BT
-48.24 793.926 Td
+48.24 525.105 Td
 /F1.0 10.5 Tf
 [<54> 29.7852 <6f20656e61626c652069742c20646f2074686520666f6c6c6f77696e672e>] TJ
 ET
@@ -201979,7 +202324,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-52.6765 766.146 Td
+52.6765 497.325 Td
 /F1.0 10.5 Tf
 <312e> Tj
 ET
@@ -201994,7 +202339,7 @@ ET
 1.2956 Tw
 
 BT
-66.24 766.146 Td
+66.24 497.325 Td
 /F1.0 10.5 Tf
 [<42652073757265205468726966742069732072756e6e696e6720696e20736563757265206d6f64652c2062> 20.0195 <7920666f6c6c6f77696e67207468652070726f6365647572652064657363726962656420696e20>] TJ
 ET
@@ -202009,7 +202354,7 @@ ET
 1.2956 Tw
 
 BT
-494.519 766.146 Td
+494.519 497.325 Td
 /F1.0 10.5 Tf
 <436c69656e742d73696465> Tj
 ET
@@ -202022,7 +202367,7 @@ ET
 0.2588 0.5451 0.7922 SCN
 
 BT
-66.24 750.366 Td
+66.24 481.545 Td
 /F1.0 10.5 Tf
 [<436f6e6669677572> 20.0195 <6174696f6e20666f7220536563757265204f706572> 20.0195 <6174696f6e202d2054687269667420476174657761> 20.0195 <79>] TJ
 ET
@@ -202033,7 +202378,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-326.3664 750.366 Td
+326.3664 481.545 Td
 /F1.0 10.5 Tf
 <2e> Tj
 ET
@@ -202046,7 +202391,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-52.6765 728.586 Td
+52.6765 459.765 Td
 /F1.0 10.5 Tf
 <322e> Tj
 ET
@@ -202061,7 +202406,7 @@ ET
 4.2934 Tw
 
 BT
-66.24 728.586 Td
+66.24 459.765 Td
 /F1.0 10.5 Tf
 <42652073757265207468617420484261736520697320636f6e6669677572656420746f20616c6c6f772070726f78792075736572732c2061732064657363726962656420696e20> Tj
 ET
@@ -202076,7 +202421,7 @@ ET
 4.2934 Tw
 
 BT
-471.3365 728.586 Td
+471.3365 459.765 Td
 /F1.0 10.5 Tf
 [<524553> 20.0195 <5420476174657761> 20.0195 <79>] TJ
 ET
@@ -202089,7 +202434,7 @@ ET
 0.2588 0.5451 0.7922 SCN
 
 BT
-66.24 712.806 Td
+66.24 443.985 Td
 /F1.0 10.5 Tf
 [<496d706572736f6e6174696f6e20436f6e6669677572> 20.0195 <6174696f6e>] TJ
 ET
@@ -202100,7 +202445,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-212.3788 712.806 Td
+212.3788 443.985 Td
 /F1.0 10.5 Tf
 <2e> Tj
 ET
@@ -202113,7 +202458,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-52.6765 691.026 Td
+52.6765 422.205 Td
 /F1.0 10.5 Tf
 <332e> Tj
 ET
@@ -202128,7 +202473,7 @@ ET
 6.477 Tw
 
 BT
-66.24 691.026 Td
+66.24 422.205 Td
 /F1.0 10.5 Tf
 <496e20> Tj
 ET
@@ -202143,7 +202488,7 @@ ET
 6.477 Tw
 
 BT
-86.0625 691.026 Td
+86.0625 422.205 Td
 /F3.0 10.5 Tf
 <68626173652d736974652e786d6c> Tj
 ET
@@ -202158,7 +202503,7 @@ ET
 6.477 Tw
 
 BT
-155.6565 691.026 Td
+155.6565 422.205 Td
 /F1.0 10.5 Tf
 [<20666f72206561636820636c7573746572206e6f64652072756e6e696e6720612054687269667420676174657761> 20.0195 <79> 89.8438 <2c20736574207468652070726f7065727479>] TJ
 ET
@@ -202171,7 +202516,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-66.24 675.246 Td
+66.24 406.425 Td
 /F4.0 10.5 Tf
 <68626173652e7468726966742e73656375726974792e716f70> Tj
 ET
@@ -202182,7 +202527,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-197.49 675.246 Td
+197.49 406.425 Td
 /F1.0 10.5 Tf
 <20746f206f6e65206f662074686520666f6c6c6f77696e672074687265652076616c7565733a> Tj
 ET
@@ -202195,7 +202540,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-74.954 653.466 Td
+74.954 384.645 Td
 /F1.1 10.5 Tf
 <22> Tj
 ET
@@ -202208,7 +202553,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-84.24 653.466 Td
+84.24 384.645 Td
 /F4.0 10.5 Tf
 <70726976616379> Tj
 ET
@@ -202219,7 +202564,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-120.99 653.466 Td
+120.99 384.645 Td
 /F1.0 10.5 Tf
 [<202d2061757468656e7469636174696f6e2c20696e74656772697479> 89.8438 <2c20616e6420636f6e666964656e7469616c69747920636865636b696e672e>] TJ
 ET
@@ -202232,7 +202577,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-74.954 631.686 Td
+74.954 362.865 Td
 /F1.1 10.5 Tf
 <22> Tj
 ET
@@ -202245,7 +202590,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-84.24 631.686 Td
+84.24 362.865 Td
 /F4.0 10.5 Tf
 <696e74656772697479> Tj
 ET
@@ -202256,7 +202601,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-131.49 631.686 Td
+131.49 362.865 Td
 /F1.0 10.5 Tf
 <202d2061757468656e7469636174696f6e20616e6420696e7465677269747920636865636b696e67> Tj
 ET
@@ -202269,7 +202614,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-74.954 609.906 Td
+74.954 341.085 Td
 /F1.1 10.5 Tf
 <22> Tj
 ET
@@ -202282,7 +202627,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-84.24 609.906 Td
+84.24 341.085 Td
 /F4.0 10.5 Tf
 <61757468656e7469636174696f6e> Tj
 ET
@@ -202293,7 +202638,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-157.74 609.906 Td
+157.74 341.085 Td
 /F1.0 10.5 Tf
 <202d2061757468656e7469636174696f6e20636865636b696e67206f6e6c79> Tj
 ET
@@ -202306,7 +202651,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-52.6765 588.126 Td
+52.6765 319.305 Td
 /F1.0 10.5 Tf
 <342e> Tj
 ET
@@ -202321,7 +202666,7 @@ ET
 0.9709 Tw
 
 BT
-66.24 588.126 Td
+66.24 319.305 Td
 /F1.0 10.5 Tf
 [<52657374617274207468652054687269667420676174657761> 20.0195 <792070726f63657373657320666f7220746865206368616e67657320746f2074616b> 20.0195 <65206566666563742e2049662061206e6f64652069732072756e6e696e67205468726966742c>] TJ
 ET
@@ -202336,7 +202681,7 @@ ET
 0.2819 Tw
 
 BT
-66.24 572.346 Td
+66.24 303.525 Td
 /F1.0 10.5 Tf
 <746865206f7574707574206f662074686520> Tj
 ET
@@ -202351,7 +202696,7 @@ ET
 0.2819 Tw
 
 BT
-153.3206 572.346 Td
+153.3206 303.525 Td
 /F4.0 10.5 Tf
 <6a7073> Tj
 ET
@@ -202366,7 +202711,7 @@ ET
 0.2819 Tw
 
 BT
-169.0706 572.346 Td
+169.0706 303.525 Td
 /F1.0 10.5 Tf
 <20636f6d6d616e642077696c6c206c697374206120> Tj
 ET
@@ -202381,7 +202726,7 @@ ET
 0.2819 Tw
 
 BT
-274.0731 572.346 Td
+274.0731 303.525 Td
 /F4.0 10.5 Tf
 <546872696674536572766572> Tj
 ET
@@ -202396,7 +202741,7 @@ ET
 0.2819 Tw
 
 BT
-337.0731 572.346 Td
+337.0731 303.525 Td
 /F1.0 10.5 Tf
 [<2070726f636573732e2054> 29.7852 <6f2073746f7020546872696674206f6e2061206e6f64652c2072756e20746865>] TJ
 ET
@@ -202411,7 +202756,7 @@ ET
 3.6026 Tw
 
 BT
-66.24 556.566 Td
+66.24 287.745 Td
 /F1.0 10.5 Tf
 <636f6d6d616e6420> Tj
 ET
@@ -202426,7 +202771,7 @@ ET
 3.6026 Tw
 
 BT
-122.7206 556.566 Td
+122.7206 287.745 Td
 /F4.0 10.5 Tf
 <62696e2f68626173652d6461656d6f6e2e73682073746f7020746872696674> Tj
 ET
@@ -202441,7 +202786,7 @@ ET
 3.6026 Tw
 
 BT
-292.6758 556.566 Td
+292.6758 287.745 Td
 /F1.0 10.5 Tf
 [<2e2054> 29.7852 <6f20737461727420546872696674206f6e2061206e6f64652c2072756e2074686520636f6d6d616e64>] TJ
 ET
@@ -202454,7 +202799,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-66.24 540.786 Td
+66.24 271.965 Td
 /F4.0 10.5 Tf
 <62696e2f68626173652d6461656d6f6e2e736820737461727420746872696674> Tj
 ET
@@ -202465,7 +202810,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-234.24 540.786 Td
+234.24 271.965 Td
 /F1.0 10.5 Tf
 <2e> Tj
 ET
@@ -202476,7 +202821,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 500.946 Td
+48.24 232.125 Td
 /F2.0 18 Tf
 [<36302e362e20436f6e666967757265207468652054687269667420476174657761> 20.0195 <7920746f205573652074686520>] TJ
 ET
@@ -202487,7 +202832,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-458.9096 500.946 Td
+458.9096 232.125 Td
 /F4.0 18 Tf
 <646f4173> Tj
 ET
@@ -202498,7 +202843,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-494.9096 500.946 Td
+494.9096 232.125 Td
 ET
 
 0.0 0.0 0.0 SCN
@@ -202507,7 +202852,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 476.466 Td
+48.24 207.645 Td
 /F2.0 18 Tf
 [<46> 40.0391 <656174757265>] TJ
 ET
@@ -202520,7 +202865,7 @@ ET
 0.2645 Tw
 
 BT
-48.24 448.446 Td
+48.24 179.625 Td
 /F1.0 10.5 Tf
 [<436f6e666967757265207468652054687269667420476174657761> 20.0195 <7920746f2041> 20.0195 <757468656e746963617465206f6e20426568616c66206f662074686520436c69656e74>] TJ
 ET
@@ -202535,7 +202880,7 @@ ET
 0.2645 Tw
 
 BT
-389.5092 448.446 Td
+389.5092 179.625 Td
 /F1.0 10.5 Tf
 <2064657363726962657320686f7720746f20636f6e66696775726520746865> Tj
 ET
@@ -202550,7 +202895,7 @@ ET
 1.1667 Tw
 
 BT
-48.24 432.666 Td
+48.24 163.845 Td
 /F1.0 10.5 Tf
 [<54687269667420676174657761> 20.0195 <7920746f2061757468656e74696361746520746f204842617365206f6e2074686520636c69656e74d57320626568616c662c20616e6420746f20616363657373204842617365207573696e6720612070726f7879>] TJ
 ET
@@ -202565,7 +202910,7 @@ ET
 1.5749 Tw
 
 BT
-48.24 416.886 Td
+48.24 148.065 Td
 /F1.0 10.5 Tf
 <757365722e20546865206c696d69746174696f6e206f66207468697320617070726f61636820697320746861742061667465722074686520636c69656e7420697320696e697469616c697a65642077697468206120706172746963756c617220736574206f66> Tj
 ET
@@ -202580,7 +202925,7 @@ ET
 2.4891 Tw
 
 BT
-48.24 401.106 Td
+48.24 132.285 Td
 /F1.0 10.5 Tf
 <63726564656e7469616c732c2069742063616e6e6f74206368616e67652074686573652063726564656e7469616c7320647572696e67207468652073657373696f6e2e2054686520> Tj
 ET
@@ -202595,7 +202940,7 @@ ET
 2.4891 Tw
 
 BT
-424.5452 401.106 Td
+424.5452 132.285 Td
 /F4.0 10.5 Tf
 <646f4173> Tj
 ET
@@ -202610,7 +202955,7 @@ ET
 2.4891 Tw
 
 BT
-445.5452 401.106 Td
+445.5452 132.285 Td
 /F1.0 10.5 Tf
 <20666561747572652070726f76696465732061> Tj
 ET
@@ -202625,7 +202970,7 @@ ET
 5.4817 Tw
 
 BT
-48.24 385.326 Td
+48.24 116.505 Td
 /F1.0 10.5 Tf
 [<666c657869626c65207761> 20.0195 <7920746f20696d706572736f6e617465206d756c7469706c65207072696e636970616c73207573696e67207468652073616d6520636c69656e742e2054686973206665617475726520776173>] TJ
 ET
@@ -202638,7 +202983,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 369.546 Td
+48.24 100.725 Td
 /F1.0 10.5 Tf
 <696d706c656d656e74656420696e20> Tj
 ET
@@ -202649,7 +202994,7 @@ ET
 0.2588 0.5451 0.7922 SCN
 
 BT
-130.4235 369.546 Td
+130.4235 100.725 Td
 /F1.0 10.5 Tf
 [<4842> 20.0195 <4153452d3132363430>] TJ
 ET
@@ -202660,7 +203005,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-197.6338 369.546 Td
+197.6338 100.725 Td
 /F1.0 10.5 Tf
 <20666f722054687269667420312c206275742069732063757272656e746c79206e6f7420617661696c61626c6520666f722054687269667420322e> Tj
 ET
@@ -202671,7 +203016,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 341.766 Td
+48.24 72.945 Td
 /F2.0 10.5 Tf
 [<54> 29.7852 <6f20656e61626c652074686520>] TJ
 ET
@@ -202682,7 +203027,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-122.3303 341.766 Td
+122.3303 72.945 Td
 /F6.0 10.5 Tf
 <646f4173> Tj
 ET
@@ -202693,7 +203038,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-143.3303 341.766 Td
+143.3303 72.945 Td
 /F2.0 10.5 Tf
 <2066656174757265> Tj
 ET
@@ -202704,7 +203049,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-185.2988 341.766 Td
+185.2988 72.945 Td
 /F1.0 10.5 Tf
 <2c206164642074686520666f6c6c6f77696e6720746f2074686520> Tj
 ET
@@ -202715,7 +203060,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-312.0233 341.766 Td
+312.0233 72.945 Td
 /F3.0 10.5 Tf
 <68626173652d736974652e786d6c> Tj
 ET
@@ -202726,7 +203071,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-381.6173 341.766 Td
+381.6173 72.945 Td
 /F1.0 10.5 Tf
 [<2066696c6520666f722065766572792054687269667420676174657761> 20.0195 <793a>] TJ
 ET
@@ -202734,37 +203079,181 @@ ET
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 q
+0.0 0.0 0.0 scn
+0.0 0.0 0.0 SCN
+1 w
+0 J
+0 j
+[] 0 d
+/Stamp1 Do
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+530.947 14.388 Td
+/F1.0 9 Tf
+<323037> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+Q
+Q
+
+endstream
+endobj
+1309 0 obj
+<< /Type /Page
+/Parent 3 0 R
+/MediaBox [0 0 595.28 841.89]
+/CropBox [0 0 595.28 841.89]
+/BleedBox [0 0 595.28 841.89]
+/TrimBox [0 0 595.28 841.89]
+/ArtBox [0 0 595.28 841.89]
+/Contents 1308 0 R
+/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/Font << /F1.0 10 0 R
+/F2.0 31 0 R
+/F5.1 47 0 R
+/F3.0 35 0 R
+/F4.0 37 0 R
+/F1.1 40 0 R
+/F6.0 478 0 R
+>>
+/XObject << /Stamp1 4970 0 R
+>>
+>>
+/Annots [1311 0 R 1312 0 R 1313 0 R 1314 0 R 1315 0 R 1316 0 R 1317 0 R 1319 0 R 1320 0 R]
+>>
+endobj
+1310 0 obj
+[1309 0 R /XYZ 0 747.3 null]
+endobj
+1311 0 obj
+<< /Border [0 0 0]
+/Dest (security.client.thrift)
+/Subtype /Link
+/Rect [48.24 667.71 376.8235 681.99]
+/Type /Annot
+>>
+endobj
+1312 0 obj
+<< /Border [0 0 0]
+/A << /Type /Action
+/S /URI
+/URI (https://issues.apache.org/jira/browse/HBASE-11349)
+>>
+/Subtype /Link
+/Rect [130.4235 620.37 197.6338 634.65]
+/Type /Annot
+>>
+endobj
+1313 0 obj
+<< /Border [0 0 0]
+/A << /Type /Action
+/S /URI
+/URI (https://issues.apache.org/jira/browse/HBASE-11474)
+>>
+/Subtype /Link
+/Rect [282.6628 620.37 349.8731 634.65]
+/Type /Annot
+>>
+endobj
+1314 0 obj
+<< /Border [0 0 0]
+/Dest (security.client.thrift)
+/Subtype /Link
+/Rect [494.519 494.259 547.04 508.539]
+/Type /Annot
+>>
+endobj
+1315 0 obj
+<< /Border [0 0 0]
+/Dest (security.client.thrift)
+/Subtype /Link
+/Rect [66.24 478.479 326.3664 492.759]
+/Type /Annot
+>>
+endobj
+1316 0 obj
+<< /Border [0 0 0]
+/Dest (security.rest.gateway)
+/Subtype /Link
+/Rect [471.3365 456.699 547.04 470.979]
+/Type /Annot
+>>
+endobj
+1317 0 obj
+<< /Border [0 0 0]
+/Dest (security.rest.gateway)
+/Subtype /Link
+/Rect [66.24 440.919 212.3788 455.199]
+/Type /Annot
+>>
+endobj
+1318 0 obj
+[1309 0 R /XYZ 0 256.149 null]
+endobj
+1319 0 obj
+<< /Border [0 0 0]
+/Dest (security.gateway.thrift)
+/Subtype /Link
+/Rect [48.24 176.559 389.5092 190.839]
+/Type /Annot
+>>
+endobj
+1320 0 obj
+<< /Border [0 0 0]
+/A << /Type /Action
+/S /URI
+/URI (https://issues.apache.org/jira/browse/HBASE-12640)
+>>
+/Subtype /Link
+/Rect [130.4235 97.659 197.6338 111.939]
+/Type /Annot
+>>
+endobj
+1321 0 obj
+<< /Length 15564
+>>
+stream
+q
+q
+/DeviceRGB cs
 0.9608 0.9608 0.9608 scn
-52.24 325.95 m
-543.04 325.95 l
-545.2491 325.95 547.04 324.1591 547.04 321.95 c
-547.04 190.03 l
-547.04 187.8209 545.2491 186.03 543.04 186.03 c
-52.24 186.03 l
-50.0309 186.03 48.24 187.8209 48.24 190.03 c
-48.24 321.95 l
-48.24 324.1591 50.0309 325.95 52.24 325.95 c
+52.24 805.89 m
+543.04 805.89 l
+545.2491 805.89 547.04 804.0991 547.04 801.89 c
+547.04 669.97 l
+547.04 667.7609 545.2491 665.97 543.04 665.97 c
+52.24 665.97 l
+50.0309 665.97 48.24 667.7609 48.24 669.97 c
+48.24 801.89 l
+48.24 804.0991 50.0309 805.89 52.24 805.89 c
 h
 f
+/DeviceRGB CS
 0.8 0.8 0.8 SCN
 0.75 w
-52.24 325.95 m
-543.04 325.95 l
-545.2491 325.95 547.04 324.1591 547.04 321.95 c
-547.04 190.03 l
-547.04 187.8209 545.2491 186.03 543.04 186.03 c
-52.24 186.03 l
-50.0309 186.03 48.24 187.8209 48.24 190.03 c
-48.24 321.95 l
-48.24 324.1591 50.0309 325.95 52.24 325.95 c
+52.24 805.89 m
+543.04 805.89 l
+545.2491 805.89 547.04 804.0991 547.04 801.89 c
+547.04 669.97 l
+547.04 667.7609 545.2491 665.97 543.04 665.97 c
+52.24 665.97 l
+50.0309 665.97 48.24 667.7609 48.24 669.97 c
+48.24 801.89 l
+48.24 804.0991 50.0309 805.89 52.24 805.89 c
 h
 S
 Q
+/DeviceRGB cs
 0.1843 0.4353 0.6235 scn
+/DeviceRGB CS
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 303.125 Td
+59.24 783.065 Td
 /F4.0 11 Tf
 <3c70726f70657274793e> Tj
 ET
@@ -202775,7 +203264,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 288.385 Td
+59.24 768.325 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -202786,7 +203275,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 288.385 Td
+70.24 768.325 Td
 /F4.0 11 Tf
 <3c6e616d653e> Tj
 ET
@@ -202797,7 +203286,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-103.24 288.385 Td
+103.24 768.325 Td
 /F4.0 11 Tf
 <68626173652e726567696f6e7365727665722e7468726966742e68747470> Tj
 ET
@@ -202808,7 +203297,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-268.24 288.385 Td
+268.24 768.325 Td
 /F4.0 11 Tf
 <3c2f6e616d653e> Tj
 ET
@@ -202819,7 +203308,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 273.645 Td
+59.24 753.585 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -202830,7 +203319,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 273.645 Td
+70.24 753.585 Td
 /F4.0 11 Tf
 <3c76616c75653e> Tj
 ET
@@ -202841,7 +203330,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-108.74 273.645 Td
+108.74 753.585 Td
 /F4.0 11 Tf
 <74727565> Tj
 ET
@@ -202852,7 +203341,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-130.74 273.645 Td
+130.74 753.585 Td
 /F4.0 11 Tf
 <3c2f76616c75653e> Tj
 ET
@@ -202863,7 +203352,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 258.905 Td
+59.24 738.845 Td
 /F4.0 11 Tf
 <3c2f70726f70657274793e> Tj
 ET
@@ -202874,7 +203363,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 244.165 Td
+59.24 724.105 Td
 /F4.0 11 Tf
 <3c70726f70657274793e> Tj
 ET
@@ -202885,7 +203374,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 229.425 Td
+59.24 709.365 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -202896,7 +203385,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 229.425 Td
+70.24 709.365 Td
 /F4.0 11 Tf
 <3c6e616d653e> Tj
 ET
@@ -202907,7 +203396,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-103.24 229.425 Td
+103.24 709.365 Td
 /F4.0 11 Tf
 <68626173652e7468726966742e737570706f72742e70726f787975736572> Tj
 ET
@@ -202918,7 +203407,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-268.24 229.425 Td
+268.24 709.365 Td
 /F4.0 11 Tf
 <3c2f6e616d653e> Tj
 ET
@@ -202929,7 +203418,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 214.685 Td
+59.24 694.625 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -202940,7 +203429,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 214.685 Td
+70.24 694.625 Td
 /F4.0 11 Tf
 <3c76616c75653e> Tj
 ET
@@ -202951,7 +203440,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-108.74 214.685 Td
+108.74 694.625 Td
 /F4.0 11 Tf
 <747275652f76616c7565> Tj
 ET
@@ -202962,7 +203451,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-163.74 214.685 Td
+163.74 694.625 Td
 /F4.0 11 Tf
 <3e> Tj
 ET
@@ -202973,7 +203462,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 199.945 Td
+59.24 679.885 Td
 /F4.0 11 Tf
 <3c2f70726f70657274793e> Tj
 ET
@@ -202986,7 +203475,7 @@ ET
 0.8937 Tw
 
 BT
-48.24 162.066 Td
+48.24 642.006 Td
 /F2.0 10.5 Tf
 [<54> 29.7852 <6f20616c6c6f772070726f7879207573657273>] TJ
 ET
@@ -203001,7 +203490,7 @@ ET
 0.8937 Tw
 
 BT
-161.3412 162.066 Td
+161.3412 642.006 Td
 /F1.0 10.5 Tf
 <207768656e207573696e6720> Tj
 ET
@@ -203016,7 +203505,7 @@ ET
 0.8937 Tw
 
 BT
-227.4317 162.066 Td
+227.4317 642.006 Td
 /F4.0 10.5 Tf
 <646f4173> Tj
 ET
@@ -203031,7 +203520,7 @@ ET
 0.8937 Tw
 
 BT
-248.4317 162.066 Td
+248.4317 642.006 Td
 /F1.0 10.5 Tf
 <20696d706572736f6e6174696f6e2c206164642074686520666f6c6c6f77696e6720746f2074686520> Tj
 ET
@@ -203046,7 +203535,7 @@ ET
 0.8937 Tw
 
 BT
-457.7363 162.066 Td
+457.7363 642.006 Td
 /F3.0 10.5 Tf
 <68626173652d736974652e786d6c> Tj
 ET
@@ -203061,7 +203550,7 @@ ET
 0.8937 Tw
 
 BT
-527.3303 162.066 Td
+527.3303 642.006 Td
 /F1.0 10.5 Tf
 <2066696c65> Tj
 ET
@@ -203074,7 +203563,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 146.286 Td
+48.24 626.226 Td
 /F1.0 10.5 Tf
 <666f72206576657279204842617365206e6f64653a> Tj
 ET
@@ -203082,147 +203571,37 @@ ET
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 q
-0.0 0.0 0.0 scn
-0.0 0.0 0.0 SCN
-1 w
-0 J
-0 j
-[] 0 d
-/Stamp1 Do
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-BT
-530.947 14.388 Td
-/F1.0 9 Tf
-<323037> Tj
-ET
-
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-Q
-Q
-
-endstream
-endobj
-1313 0 obj
-<< /Type /Page
-/Parent 3 0 R
-/MediaBox [0 0 595.28 841.89]
-/CropBox [0 0 595.28 841.89]
-/BleedBox [0 0 595.28 841.89]
-/TrimBox [0 0 595.28 841.89]
-/ArtBox [0 0 595.28 841.89]
-/Contents 1312 0 R
-/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/Font << /F1.0 10 0 R
-/F3.0 35 0 R
-/F4.0 37 0 R
-/F1.1 40 0 R
-/F2.0 31 0 R
-/F6.0 478 0 R
->>
-/XObject << /Stamp1 4970 0 R
->>
->>
-/Annots [1314 0 R 1315 0 R 1316 0 R 1317 0 R 1319 0 R 1320 0 R]
->>
-endobj
-1314 0 obj
-<< /Border [0 0 0]
-/Dest (security.client.thrift)
-/Subtype /Link
-/Rect [494.519 763.08 547.04 777.36]
-/Type /Annot
->>
-endobj
-1315 0 obj
-<< /Border [0 0 0]
-/Dest (security.client.thrift)
-/Subtype /Link
-/Rect [66.24 747.3 326.3664 761.58]
-/Type /Annot
->>
-endobj
-1316 0 obj
-<< /Border [0 0 0]
-/Dest (security.rest.gateway)
-/Subtype /Link
-/Rect [471.3365 725.52 547.04 739.8]
-/Type /Annot
->>
-endobj
-1317 0 obj
-<< /Border [0 0 0]
-/Dest (security.rest.gateway)
-/Subtype /Link
-/Rect [66.24 709.74 212.3788 724.02]
-/Type /Annot
->>
-endobj
-1318 0 obj
-[1313 0 R /XYZ 0 524.97 null]
-endobj
-1319 0 obj
-<< /Border [0 0 0]
-/Dest (security.gateway.thrift)
-/Subtype /Link
-/Rect [48.24 445.38 389.5092 459.66]
-/Type /Annot
->>
-endobj
-1320 0 obj
-<< /Border [0 0 0]
-/A << /Type /Action
-/S /URI
-/URI (https://issues.apache.org/jira/browse/HBASE-12640)
->>
-/Subtype /Link
-/Rect [130.4235 366.48 197.6338 380.76]
-/Type /Annot
->>
-endobj
-1321 0 obj
-<< /Length 16080
->>
-stream
-q
-q
-/DeviceRGB cs
 0.9608 0.9608 0.9608 scn
-52.24 805.89 m
-543.04 805.89 l
-545.2491 805.89 547.04 804.0991 547.04 801.89 c
-547.04 611.01 l
-547.04 608.8009 545.2491 607.01 543.04 607.01 c
-52.24 607.01 l
-50.0309 607.01 48.24 608.8009 48.24 611.01 c
-48.24 801.89 l
-48.24 804.0991 50.0309 805.89 52.24 805.89 c
+52.24 610.41 m
+543.04 610.41 l
+545.2491 610.41 547.04 608.6191 547.04 606.41 c
+547.04 415.53 l
+547.04 413.3209 545.2491 411.53 543.04 411.53 c
+52.24 411.53 l
+50.0309 411.53 48.24 413.3209 48.24 415.53 c
+48.24 606.41 l
+48.24 608.6191 50.0309 610.41 52.24 610.41 c
 h
 f
-/DeviceRGB CS
 0.8 0.8 0.8 SCN
 0.75 w
-52.24 805.89 m
-543.04 805.89 l
-545.2491 805.89 547.04 804.0991 547.04 801.89 c
-547.04 611.01 l
-547.04 608.8009 545.2491 607.01 543.04 607.01 c
-52.24 607.01 l
-50.0309 607.01 48.24 608.8009 48.24 611.01 c
-48.24 801.89 l
-48.24 804.0991 50.0309 805.89 52.24 805.89 c
+52.24 610.41 m
+543.04 610.41 l
+545.2491 610.41 547.04 608.6191 547.04 606.41 c
+547.04 415.53 l
+547.04 413.3209 545.2491 411.53 543.04 411.53 c
+52.24 411.53 l
+50.0309 411.53 48.24 413.3209 48.24 415.53 c
+48.24 606.41 l
+48.24 608.6191 50.0309 610.41 52.24 610.41 c
 h
 S
 Q
-/DeviceRGB cs
 0.1843 0.4353 0.6235 scn
-/DeviceRGB CS
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 783.065 Td
+59.24 587.585 Td
 /F4.0 11 Tf
 <3c70726f70657274793e> Tj
 ET
@@ -203233,7 +203612,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 768.325 Td
+59.24 572.845 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -203244,7 +203623,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 768.325 Td
+70.24 572.845 Td
 /F4.0 11 Tf
 <3c6e616d653e> Tj
 ET
@@ -203255,7 +203634,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-103.24 768.325 Td
+103.24 572.845 Td
 /F4.0 11 Tf
 <6861646f6f702e73656375726974792e617574686f72697a6174696f6e> Tj
 ET
@@ -203266,7 +203645,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-262.74 768.325 Td
+262.74 572.845 Td
 /F4.0 11 Tf
 <3c2f6e616d653e> Tj
 ET
@@ -203277,7 +203656,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 753.585 Td
+59.24 558.105 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -203288,7 +203667,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 753.585 Td
+70.24 558.105 Td
 /F4.0 11 Tf
 <3c76616c75653e> Tj
 ET
@@ -203299,7 +203678,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-108.74 753.585 Td
+108.74 558.105 Td
 /F4.0 11 Tf
 <74727565> Tj
 ET
@@ -203310,7 +203689,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-130.74 753.585 Td
+130.74 558.105 Td
 /F4.0 11 Tf
 <3c2f76616c75653e> Tj
 ET
@@ -203321,7 +203700,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 738.845 Td
+59.24 543.365 Td
 /F4.0 11 Tf
 <3c2f70726f70657274793e> Tj
 ET
@@ -203332,7 +203711,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 724.105 Td
+59.24 528.625 Td
 /F4.0 11 Tf
 <3c70726f70657274793e> Tj
 ET
@@ -203343,7 +203722,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 709.365 Td
+59.24 513.885 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -203354,7 +203733,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 709.365 Td
+70.24 513.885 Td
 /F4.0 11 Tf
 <3c6e616d653e> Tj
 ET
@@ -203365,7 +203744,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-103.24 709.365 Td
+103.24 513.885 Td
 /F4.0 11 Tf
 <6861646f6f702e70726f7879757365722e24555345522e67726f757073> Tj
 ET
@@ -203376,7 +203755,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-262.74 709.365 Td
+262.74 513.885 Td
 /F4.0 11 Tf
 <3c2f6e616d653e> Tj
 ET
@@ -203387,7 +203766,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 694.625 Td
+59.24 499.145 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -203398,7 +203777,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 694.625 Td
+70.24 499.145 Td
 /F4.0 11 Tf
 <3c76616c75653e> Tj
 ET
@@ -203409,7 +203788,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-108.74 694.625 Td
+108.74 499.145 Td
 /F4.0 11 Tf
 <2447524f555053> Tj
 ET
@@ -203420,7 +203799,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-147.24 694.625 Td
+147.24 499.145 Td
 /F4.0 11 Tf
 <3c2f76616c75653e> Tj
 ET
@@ -203431,7 +203810,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 679.885 Td
+59.24 484.405 Td
 /F4.0 11 Tf
 <3c2f70726f70657274793e> Tj
 ET
@@ -203442,7 +203821,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 665.145 Td
+59.24 469.665 Td
 /F4.0 11 Tf
 <3c70726f70657274793e> Tj
 ET
@@ -203453,7 +203832,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 650.405 Td
+59.24 454.925 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -203464,7 +203843,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 650.405 Td
+70.24 454.925 Td
 /F4.0 11 Tf
 <3c6e616d653e> Tj
 ET
@@ -203475,7 +203854,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-103.24 650.405 Td
+103.24 454.925 Td
 /F4.0 11 Tf
 <6861646f6f702e70726f7879757365722e24555345522e686f737473> Tj
 ET
@@ -203486,7 +203865,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-257.24 650.405 Td
+257.24 454.925 Td
 /F4.0 11 Tf
 <3c2f6e616d653e> Tj
 ET
@@ -203497,7 +203876,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-59.24 635.665 Td
+59.24 440.185 Td
 /F4.0 11 Tf
 <ca20> Tj
 ET
@@ -203508,7 +203887,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-70.24 635.665 Td
+70.24 440.185 Td
 /F4.0 11 Tf
 <3c76616c75653e> Tj
 ET
@@ -203519,7 +203898,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-108.74 635.665 Td
+108.74 440.185 Td
 /F4.0 11 Tf
 <2447524f555053> Tj
 ET
@@ -203530,7 +203909,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-147.24 635.665 Td
+147.24 440.185 Td
 /F4.0 11 Tf
 <3c2f76616c75653e> Tj
 ET
@@ -203541,7 +203920,7 @@ ET
 0.1843 0.4353 0.6235 SCN
 
 BT
-59.24 620.925 Td
+59.24 425.445 Td
 /F4.0 11 Tf
 <3c2f70726f70657274793e> Tj
 ET
@@ -203552,7 +203931,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 583.046 Td
+48.24 387.566 Td
 /F1.0 10.5 Tf
 [<54> 29.7852 <616b> 20.0195 <652061206c6f6f6b2061742074686520>] TJ
 ET
@@ -203563,7 +203942,7 @@ ET
 0.2588 0.5451 0.7922 SCN
 
 BT
-138.3636 583.046 Td
+138.3636 387.566 Td
 /F1.0 10.5 Tf
 <64656d6f20636c69656e74> Tj
 ET
@@ -203574,7 +203953,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-196.9641 583.046 Td
+196.9641 387.566 Td
 /F1.0 10.5 Tf
 [<20746f2067657420616e206f766572> 20.0195 <616c6c2069646561206f6620686f7720746f207573652074686973206665617475726520696e20796f757220636c69656e742e>] TJ
 ET
@@ -203585,7 +203964,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 543.206 Td
+48.24 347.726 Td
 /F2.0 18 Tf
 [<36302e372e20436c69656e742d7369646520436f6e6669677572> 20.0195 <6174696f6e20666f7220536563757265204f706572> 20.0195 <6174696f6e202d>] TJ
 ET
@@ -203596,7 +203975,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 518.726 Td
+48.24 323.246 Td
 /F2.0 18 Tf
 [<524553> 20.0195 <5420476174657761> 20.0195 <79>] TJ
 ET
@@ -203607,7 +203986,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 490.706 Td
+48.24 295.226 Td
 /F1.0 10.5 Tf
 [<41> 20.0195 <64642074686520666f6c6c6f77696e6720746f2074686520>] TJ
 ET
@@ -203618,7 +203997,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-170.9113 490.706 Td
+170.9113 295.226 Td
 /F4.0 10.5 Tf
 <68626173652d736974652e786d6c> Tj
 ET
@@ -203629,7 +204008,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-244.4113 490.706 Td
+244.4113 295.226 Td
 /F1.0 10.5 Tf
 [<2066696c6520666f7220657665727920524553> 20.0195 <5420676174657761> 20.0195 <793a>] TJ
 ET
@@ -203638,28 +204017,28 @@ ET
 0.0 0.0 0.0 scn
 q
 0.9608 0.9608 0.9608 scn
-52.24 474.89 m
-543.04 474.89 l
-545.2491 474.89 547.04 473.0991 547.04 470.89 c
-547.04 338.97 l
-547.04 336.7609 545.2491 334.97 543.04 334.97 c
-52.24 334.97 l
-50.0309 334.97 48.24 336.7609 48.24 338.97 c
-48.24 470.89 l
-48.24 473.0991 50.0309 474.89 52.24 474.89 c
+52.24 279.41 m
+543.04 279.41 l
+545.2491 279.41 547.04 277.6191 547.04 275.41 c
+547.04 143.49 l
+547.04 141.2809 545.2491 139.49 543.04 139.49 c
+52.24 139.49 l
+50.0309 139.49 48.24 141.2809 48.24 143.49 c
+48.24 275.41 l
+48.24 277.6191 50.0309 279.4

<TRUNCATED>

[04/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html
index ec5ba00..997f52f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html
@@ -35,357 +35,404 @@
 <span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.ExecutionException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span><a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.util.Methods;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.security.Groups;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.security.SecurityUtil;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.security.token.Token;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.security.token.TokenIdentifier;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache;<a name="line.41"></a>
+<span class="sourceLineNo">030</span>import java.util.Optional;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.ExecutionException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Methods;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.security.Groups;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.security.SecurityUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.security.token.Token;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.security.token.TokenIdentifier;<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><a name="line.42"></a>
-<span class="sourceLineNo">043</span>/**<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * Wrapper to abstract out usage of user and group information in HBase.<a name="line.44"></a>
-<span class="sourceLineNo">045</span> *<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * &lt;p&gt;<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * This class provides a common interface for interacting with user and group<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * information across changing APIs in different versions of Hadoop.  It only<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * provides access to the common set of functionality in<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link org.apache.hadoop.security.UserGroupInformation} currently needed by<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * HBase, but can be extended as needs change.<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * &lt;/p&gt;<a name="line.52"></a>
-<span class="sourceLineNo">053</span> */<a name="line.53"></a>
-<span class="sourceLineNo">054</span>@InterfaceAudience.Public<a name="line.54"></a>
-<span class="sourceLineNo">055</span>public abstract class User {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  public static final String HBASE_SECURITY_CONF_KEY =<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      "hbase.security.authentication";<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public static final String HBASE_SECURITY_AUTHORIZATION_CONF_KEY =<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      "hbase.security.authorization";<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  protected UserGroupInformation ugi;<a name="line.61"></a>
+<span class="sourceLineNo">043</span>import org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache;<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> * Wrapper to abstract out usage of user and group information in HBase.<a name="line.46"></a>
+<span class="sourceLineNo">047</span> *<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * This class provides a common interface for interacting with user and group<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * information across changing APIs in different versions of Hadoop.  It only<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * provides access to the common set of functionality in<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * {@link org.apache.hadoop.security.UserGroupInformation} currently needed by<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * HBase, but can be extended as needs change.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * &lt;/p&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> */<a name="line.55"></a>
+<span class="sourceLineNo">056</span>@InterfaceAudience.Public<a name="line.56"></a>
+<span class="sourceLineNo">057</span>public abstract class User {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  public static final String HBASE_SECURITY_CONF_KEY =<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      "hbase.security.authentication";<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public static final String HBASE_SECURITY_AUTHORIZATION_CONF_KEY =<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      "hbase.security.authorization";<a name="line.61"></a>
 <span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public UserGroupInformation getUGI() {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    return ugi;<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>   * Returns the full user name.  For Kerberos principals this will include<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   * the host and realm portions of the principal name.<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   *<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * @return User full name.<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public String getName() {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    return ugi.getUserName();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<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>   * Returns the list of groups of which this user is a member.  On secure<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * Hadoop this returns the group information for the user as resolved on the<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * server.  For 0.20 based Hadoop, the group names are passed from the client.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   */<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public String[] getGroupNames() {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    return ugi.getGroupNames();<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>  /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * Returns the shortened version of the user name -- the portion that maps<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * to an operating system user name.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   *<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * @return Short name<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public abstract String getShortName();<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>   * Executes the given action within the context of this user.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public abstract &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action);<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>   * Executes the given action within the context of this user.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public abstract &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      throws IOException, InterruptedException;<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>   * Returns the Token of the specified kind associated with this user,<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * or null if the Token is not present.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   *<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * @param kind the kind of token<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param service service on which the token is supposed to be used<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @return the token of the specified kind.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public Token&lt;?&gt; getToken(String kind, String service) throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    for (Token&lt;?&gt; token : ugi.getTokens()) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      if (token.getKind().toString().equals(kind) &amp;&amp;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>          (service != null &amp;&amp; token.getService().toString().equals(service))) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        return token;<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>    return null;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * Returns all the tokens stored in the user's credentials.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public Collection&lt;Token&lt;? extends TokenIdentifier&gt;&gt; getTokens() {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    return ugi.getTokens();<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>   * Adds the given Token to the user's credentials.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   *<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * @param token the token to add<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  public void addToken(Token&lt;? extends TokenIdentifier&gt; token) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    ugi.addToken(token);<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>  @Override<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public boolean equals(Object o) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    if (this == o) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return true;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    if (o == null || getClass() != o.getClass()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return false;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return ugi.equals(((User) o).ugi);<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>  @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public int hashCode() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return ugi.hashCode();<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 String toString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    return ugi.toString();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  }<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>   * Returns the {@code User} instance within current execution context.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  public static User getCurrent() throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    User user = new SecureHadoopUser();<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    if (user.getUGI() == null) {<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>    return user;<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>   * Executes the given action as the login user<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * @param action<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @return the result of the action<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @throws IOException<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  public static &lt;T&gt; T runAsLoginUser(PrivilegedExceptionAction&lt;T&gt; action) throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    try {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      Class c = Class.forName("org.apache.hadoop.security.SecurityUtil");<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      Class [] types = new Class[]{PrivilegedExceptionAction.class};<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      Object[] args = new Object[]{action};<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      return (T) Methods.call(c, null, "doAsLoginUser", types, args);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    } catch (Throwable e) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      throw new IOException(e);<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><a name="line.188"></a>
-<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * Wraps an underlying {@code UserGroupInformation} instance.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param ugi The base Hadoop user<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @return User<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public static User create(UserGroupInformation ugi) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    if (ugi == null) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    return new SecureHadoopUser(ugi);<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>   * Generates a new {@code User} instance specifically for use in test code.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * @param name the full username<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param groups the group names to which the test user will belong<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @return a new &lt;code&gt;User&lt;/code&gt; instance<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public static User createUserForTesting(Configuration conf,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      String name, String[] groups) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    User userForTesting = SecureHadoopUser.createUserForTesting(conf, name, groups);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    return userForTesting;<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>  /**<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * Log in the current process using the given configuration keys for the<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * credential file and login principal.<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   *<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * &lt;p&gt;&lt;strong&gt;This is only applicable when<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * running on secure Hadoop&lt;/strong&gt; -- see<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * org.apache.hadoop.security.SecurityUtil#login(Configuration,String,String,String).<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * On regular Hadoop (without security features), this will safely be ignored.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * &lt;/p&gt;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   *<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param conf The configuration data to use<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param fileConfKey Property key used to configure path to the credential file<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param principalConfKey Property key used to configure login principal<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param localhost Current hostname to use in any credentials<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @throws IOException underlying exception from SecurityUtil.login() call<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  public static void login(Configuration conf, String fileConfKey,<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      String principalConfKey, String localhost) throws IOException {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    SecureHadoopUser.login(conf, fileConfKey, principalConfKey, localhost);<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>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * Returns whether or not Kerberos authentication is configured for Hadoop.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * For non-secure Hadoop, this always returns &lt;code&gt;false&lt;/code&gt;.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * For secure Hadoop, it will return the value from<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  public static boolean isSecurityEnabled() {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    return SecureHadoopUser.isSecurityEnabled();<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>   * Returns whether or not secure authentication is enabled for HBase. Note that<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * HBase security requires HDFS security to provide any guarantees, so it is<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * recommended that secure HBase should run on secure HDFS.<a name="line.247"></a>
+<span class="sourceLineNo">063</span>  protected UserGroupInformation ugi;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  public UserGroupInformation getUGI() {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    return ugi;<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>   * Returns the full user name.  For Kerberos principals this will include<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * the host and realm portions of the principal name.<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   *<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * @return User full name.<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   */<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public String getName() {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    return ugi.getUserName();<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>   * Returns the list of groups of which this user is a member.  On secure<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * Hadoop this returns the group information for the user as resolved on the<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * server.  For 0.20 based Hadoop, the group names are passed from the client.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public String[] getGroupNames() {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return ugi.getGroupNames();<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Returns the shortened version of the user name -- the portion that maps<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * to an operating system user name.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   *<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * @return Short name<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   */<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public abstract String getShortName();<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>   * Executes the given action within the context of this user.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public abstract &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action);<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>   * Executes the given action within the context of this user.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   */<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public abstract &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      throws IOException, InterruptedException;<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>   * Returns the Token of the specified kind associated with this user,<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * or null if the Token is not present.<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @param kind the kind of token<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * @param service service on which the token is supposed to be used<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * @return the token of the specified kind.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public Token&lt;?&gt; getToken(String kind, String service) throws IOException {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    for (Token&lt;?&gt; token : ugi.getTokens()) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      if (token.getKind().toString().equals(kind) &amp;&amp;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          (service != null &amp;&amp; token.getService().toString().equals(service))) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        return token;<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>    return null;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<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>   * Returns all the tokens stored in the user's credentials.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public Collection&lt;Token&lt;? extends TokenIdentifier&gt;&gt; getTokens() {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    return ugi.getTokens();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  /**<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   * Adds the given Token to the user's credentials.<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   *<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * @param token the token to add<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   */<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public void addToken(Token&lt;? extends TokenIdentifier&gt; token) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    ugi.addToken(token);<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>   * @return true if user credentials are obtained from keytab.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public boolean isLoginFromKeytab() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return ugi.isFromKeytab();<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>  @Override<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  public boolean equals(Object o) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (this == o) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return true;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    if (o == null || getClass() != o.getClass()) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      return false;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return ugi.equals(((User) o).ugi);<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>  @Override<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public int hashCode() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    return ugi.hashCode();<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>  public String toString() {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return ugi.toString();<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>   * Returns the {@code User} instance within current execution context.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  public static User getCurrent() throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    User user = new SecureHadoopUser();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    if (user.getUGI() == null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      return null;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    return user;<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>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Executes the given action as the login user<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @param action<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @return the result of the action<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @throws IOException<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public static &lt;T&gt; T runAsLoginUser(PrivilegedExceptionAction&lt;T&gt; action) throws IOException {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      Class c = Class.forName("org.apache.hadoop.security.SecurityUtil");<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      Class [] types = new Class[]{PrivilegedExceptionAction.class};<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      Object[] args = new Object[]{action};<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return (T) Methods.call(c, null, "doAsLoginUser", types, args);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (Throwable e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      throw new IOException(e);<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><a name="line.197"></a>
+<span class="sourceLineNo">198</span>  /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * Wraps an underlying {@code UserGroupInformation} instance.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * @param ugi The base Hadoop user<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * @return User<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   */<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  public static User create(UserGroupInformation ugi) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (ugi == null) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      return null;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    return new SecureHadoopUser(ugi);<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>  /**<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * Generates a new {@code User} instance specifically for use in test code.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @param name the full username<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * @param groups the group names to which the test user will belong<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * @return a new &lt;code&gt;User&lt;/code&gt; instance<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  public static User createUserForTesting(Configuration conf,<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      String name, String[] groups) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    User userForTesting = SecureHadoopUser.createUserForTesting(conf, name, groups);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    return userForTesting;<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>   * Log in the current process using the given configuration keys for the<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * credential file and login principal.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   *<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * &lt;p&gt;&lt;strong&gt;This is only applicable when<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * running on secure Hadoop&lt;/strong&gt; -- see<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * org.apache.hadoop.security.SecurityUtil#login(Configuration,String,String,String).<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * On regular Hadoop (without security features), this will safely be ignored.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * &lt;/p&gt;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   *<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @param conf The configuration data to use<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @param fileConfKey Property key used to configure path to the credential file<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @param principalConfKey Property key used to configure login principal<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * @param localhost Current hostname to use in any credentials<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * @throws IOException underlying exception from SecurityUtil.login() call<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  public static void login(Configuration conf, String fileConfKey,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      String principalConfKey, String localhost) throws IOException {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SecureHadoopUser.login(conf, fileConfKey, principalConfKey, localhost);<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>   * Login with the given keytab and principal.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * @param keytabLocation path of keytab<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @param pricipalName login principal<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * @throws IOException underlying exception from UserGroupInformation.loginUserFromKeytab<a name="line.247"></a>
 <span class="sourceLineNo">248</span>   */<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  public static boolean isHBaseSecurityEnabled(Configuration conf) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    return "kerberos".equalsIgnoreCase(conf.get(HBASE_SECURITY_CONF_KEY));<a name="line.250"></a>
+<span class="sourceLineNo">249</span>  public static void login(String keytabLocation, String pricipalName) throws IOException {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    SecureHadoopUser.login(keytabLocation, pricipalName);<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>  /* Concrete implementations */<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>   * Bridges {@code User} invocations to underlying calls to<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * {@link org.apache.hadoop.security.UserGroupInformation} for secure Hadoop<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * 0.20 and versions 0.21 and above.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  @InterfaceAudience.Private<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   public static final class SecureHadoopUser extends User {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    private String shortName;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private LoadingCache&lt;String, String[]&gt; cache;<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    public SecureHadoopUser() throws IOException {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      ugi = UserGroupInformation.getCurrentUser();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      this.cache = null;<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>    public SecureHadoopUser(UserGroupInformation ugi) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.ugi = ugi;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      this.cache = null;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    public SecureHadoopUser(UserGroupInformation ugi,<a name="line.275"></a>
-<span class="sourceLineNo">276</span>                            LoadingCache&lt;String, String[]&gt; cache) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.ugi = ugi;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      this.cache = cache;<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>    @Override<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    public String getShortName() {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      if (shortName != null) return shortName;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        shortName = ugi.getShortUserName();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        return shortName;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      } catch (Exception e) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        throw new RuntimeException("Unexpected error getting user short name",<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          e);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>    @Override<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    public String[] getGroupNames() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      if (cache != null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        try {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          return this.cache.get(getShortName());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        } catch (ExecutionException e) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          return new String[0];<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>      return ugi.getGroupNames();<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>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    public &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      return ugi.doAs(action);<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>    @Override<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    public &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        throws IOException, InterruptedException {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      return ugi.doAs(action);<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>
-<span class="sourceLineNo">316</span>    /** @see User#createUserForTesting(org.apache.hadoop.conf.Configuration, String, String[]) */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    public static User createUserForTesting(Configuration conf,<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        String name, String[] groups) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      synchronized (UserProvider.class) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        if (!(UserProvider.groups instanceof TestingGroups)) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          UserProvider.groups = new TestingGroups(UserProvider.groups);<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>      ((TestingGroups)UserProvider.groups).setUserGroups(name, groups);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      return new SecureHadoopUser(UserGroupInformation.createUserForTesting(name, groups));<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>     * Obtain credentials for the current process using the configured<a name="line.330"></a>
-<span class="sourceLineNo">331</span>     * Kerberos keytab file and principal.<a name="line.331"></a>
-<span class="sourceLineNo">332</span>     * @see User#login(org.apache.hadoop.conf.Configuration, String, String, String)<a name="line.332"></a>
-<span class="sourceLineNo">333</span>     *<a name="line.333"></a>
-<span class="sourceLineNo">334</span>     * @param conf the Configuration to use<a name="line.334"></a>
-<span class="sourceLineNo">335</span>     * @param fileConfKey Configuration property key used to store the path<a name="line.335"></a>
-<span class="sourceLineNo">336</span>     * to the keytab file<a name="line.336"></a>
-<span class="sourceLineNo">337</span>     * @param principalConfKey Configuration property key used to store the<a name="line.337"></a>
-<span class="sourceLineNo">338</span>     * principal name to login as<a name="line.338"></a>
-<span class="sourceLineNo">339</span>     * @param localhost the local hostname<a name="line.339"></a>
-<span class="sourceLineNo">340</span>     */<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public static void login(Configuration conf, String fileConfKey,<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        String principalConfKey, String localhost) throws IOException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      if (isSecurityEnabled()) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        SecurityUtil.login(conf, fileConfKey, principalConfKey, localhost);<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><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     * Returns the result of {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>     */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    public static boolean isSecurityEnabled() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      return UserGroupInformation.isSecurityEnabled();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    }<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>  static class TestingGroups extends Groups {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    private final Map&lt;String, List&lt;String&gt;&gt; userToGroupsMapping = new HashMap&lt;&gt;();<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    private Groups underlyingImplementation;<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    TestingGroups(Groups underlyingImplementation) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      super(new Configuration());<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      this.underlyingImplementation = underlyingImplementation;<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>    @Override<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    public List&lt;String&gt; getGroups(String user) throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      List&lt;String&gt; result = userToGroupsMapping.get(user);<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>      if (result == null) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        result = underlyingImplementation.getGroups(user);<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 result;<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 void setUserGroups(String user, String[] groups) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      userToGroupsMapping.put(user, Arrays.asList(groups));<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">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Returns whether or not Kerberos authentication is configured for Hadoop.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * For non-secure Hadoop, this always returns &lt;code&gt;false&lt;/code&gt;.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * For secure Hadoop, it will return the value from<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  public static boolean isSecurityEnabled() {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    return SecureHadoopUser.isSecurityEnabled();<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>  /**<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * Returns whether or not secure authentication is enabled for HBase. Note that<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * HBase security requires HDFS security to provide any guarantees, so it is<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * recommended that secure HBase should run on secure HDFS.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public static boolean isHBaseSecurityEnabled(Configuration conf) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    return "kerberos".equalsIgnoreCase(conf.get(HBASE_SECURITY_CONF_KEY));<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>   * In secure environment, if a user specified his keytab and principal,<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * a hbase client will try to login with them. Otherwise, hbase client will try to obtain<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * ticket(through kinit) from system.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @param conf configuration file<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @return true if keytab and principal are configured<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public static boolean shouldLoginFromKeytab(Configuration conf) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    Optional&lt;String&gt; keytab =<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      Optional.ofNullable(conf.get(AuthUtil.HBASE_CLIENT_KEYTAB_FILE));<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    Optional&lt;String&gt; principal =<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      Optional.ofNullable(conf.get(AuthUtil.HBASE_CLIENT_KERBEROS_PRINCIPAL));<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    return keytab.isPresent() &amp;&amp; principal.isPresent();<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>  /* Concrete implementations */<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>   * Bridges {@code User} invocations to underlying calls to<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * {@link org.apache.hadoop.security.UserGroupInformation} for secure Hadoop<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * 0.20 and versions 0.21 and above.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  @InterfaceAudience.Private<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   public static final class SecureHadoopUser extends User {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    private String shortName;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    private LoadingCache&lt;String, String[]&gt; cache;<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    public SecureHadoopUser() throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      ugi = UserGroupInformation.getCurrentUser();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      this.cache = null;<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>    public SecureHadoopUser(UserGroupInformation ugi) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      this.ugi = ugi;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      this.cache = null;<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>    public SecureHadoopUser(UserGroupInformation ugi,<a name="line.309"></a>
+<span class="sourceLineNo">310</span>                            LoadingCache&lt;String, String[]&gt; cache) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      this.ugi = ugi;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      this.cache = cache;<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>    @Override<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    public String getShortName() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      if (shortName != null) return shortName;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      try {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        shortName = ugi.getShortUserName();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        return shortName;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      } catch (Exception e) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        throw new RuntimeException("Unexpected error getting user short name",<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          e);<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>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public String[] getGroupNames() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      if (cache != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          return this.cache.get(getShortName());<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        } catch (ExecutionException e) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          return new String[0];<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>      return ugi.getGroupNames();<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>    @Override<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    public &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return ugi.doAs(action);<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 &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        throws IOException, InterruptedException {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      return ugi.doAs(action);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    /** @see User#createUserForTesting(org.apache.hadoop.conf.Configuration, String, String[]) */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public static User createUserForTesting(Configuration conf,<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        String name, String[] groups) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      synchronized (UserProvider.class) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        if (!(UserProvider.groups instanceof TestingGroups)) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          UserProvider.groups = new TestingGroups(UserProvider.groups);<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">359</span>      ((TestingGroups)UserProvider.groups).setUserGroups(name, groups);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      return new SecureHadoopUser(UserGroupInformation.createUserForTesting(name, groups));<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>     * Obtain credentials for the current process using the configured<a name="line.364"></a>
+<span class="sourceLineNo">365</span>     * Kerberos keytab file and principal.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>     * @see User#login(org.apache.hadoop.conf.Configuration, String, String, String)<a name="line.366"></a>
+<span class="sourceLineNo">367</span>     *<a name="line.367"></a>
+<span class="sourceLineNo">368</span>     * @param conf the Configuration to use<a name="line.368"></a>
+<span class="sourceLineNo">369</span>     * @param fileConfKey Configuration property key used to store the path<a name="line.369"></a>
+<span class="sourceLineNo">370</span>     * to the keytab file<a name="line.370"></a>
+<span class="sourceLineNo">371</span>     * @param principalConfKey Configuration property key used to store the<a name="line.371"></a>
+<span class="sourceLineNo">372</span>     * principal name to login as<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * @param localhost the local hostname<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    public static void login(Configuration conf, String fileConfKey,<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        String principalConfKey, String localhost) throws IOException {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      if (isSecurityEnabled()) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        SecurityUtil.login(conf, fileConfKey, principalConfKey, localhost);<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>    /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span>     * Login through configured keytab and pricipal.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>     * @param keytabLocation location of keytab<a name="line.384"></a>
+<span class="sourceLineNo">385</span>     * @param principalName principal in keytab<a name="line.385"></a>
+<span class="sourceLineNo">386</span>     * @throws IOException exception from UserGroupInformation.loginUserFromKeytab<a name="line.386"></a>
+<span class="sourceLineNo">387</span>     */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    public static void login(String keytabLocation, String principalName)<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        throws IOException {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      if (isSecurityEnabled()) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        UserGroupInformation.loginUserFromKeytab(principalName, keytabLocation);<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>    /**<a name="line.395"></a>
+<span class="sourceLineNo">396</span>     * Returns the result of {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>     */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    public static boolean isSecurityEnabled() {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      return UserGroupInformation.isSecurityEnabled();<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>  static class TestingGroups extends Groups {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    private final Map&lt;String, List&lt;String&gt;&gt; userToGroupsMapping = new HashMap&lt;&gt;();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    private Groups underlyingImplementation;<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>    TestingGroups(Groups underlyingImplementation) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      super(new Configuration());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      this.underlyingImplementation = underlyingImplementation;<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 List&lt;String&gt; getGroups(String user) throws IOException {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      List&lt;String&gt; result = userToGroupsMapping.get(user);<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>      if (result == null) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        result = underlyingImplementation.getGroups(user);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>      return result;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    private void setUserGroups(String user, String[] groups) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      userToGroupsMapping.put(user, Arrays.asList(groups));<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>}<a name="line.427"></a>
 
 
 


[27/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/apidocs/deprecated-list.html
----------------------------------------------------------------------
diff --git a/apidocs/deprecated-list.html b/apidocs/deprecated-list.html
index ae96416..8bece3f 100644
--- a/apidocs/deprecated-list.html
+++ b/apidocs/deprecated-list.html
@@ -93,60 +93,65 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colOne"><a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.AuthUtil</a>
+<div class="block"><span class="deprecationComment">since 2.2.0, to be removed in hbase-3.0.0.</span></div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.ClusterStatus</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase"><code>ClusterMetrics</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/util/Counter.html" title="class in org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util.Counter</a>
 <div class="block"><span class="deprecationComment">use <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic"><code>LongAdder</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/filter/FirstKeyValueMatchingQualifiersFilter.html" title="class in org.apache.hadoop.hbase.filter">org.apache.hadoop.hbase.filter.FirstKeyValueMatchingQualifiersFilter</a>
 <div class="block"><span class="deprecationComment">Deprecated in 2.0. See HBASE-13347</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HColumnDescriptor</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HRegionInfo</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              use <code>RegionInfoBuilder</code> to build <a href="org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HTableDescriptor</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client"><code>TableDescriptorBuilder</code></a> to build <a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase"><code>HTableDescriptor</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.mapreduce">org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0. Use
              <code>LoadIncrementalHFiles</code> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0. Use
              <code>LoadIncrementalHFiles.LoadQueueItem</code> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.RegionLoad</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html" title="class in org.apache.hadoop.hbase.client.replication">org.apache.hadoop.hbase.client.replication.ReplicationAdmin</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client"><code>Admin</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.ServerLoad</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase"><code>ServerMetrics</code></a> instead.</span></div>
@@ -938,1302 +943,1307 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><a href="org/apache/hadoop/hbase/AuthUtil.html#getAuthChore-org.apache.hadoop.conf.Configuration-">org.apache.hadoop.hbase.AuthUtil.getAuthChore(Configuration)</a>
+<div class="block"><span class="deprecationComment">Deprecated since 2.2.0, this method will be internal use only after 3.0.0.</span></div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getBackupMasters--">org.apache.hadoop.hbase.ClusterStatus.getBackupMasters()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getBackupMasterNames--"><code>ClusterStatus.getBackupMasterNames()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getBackupMastersSize--">org.apache.hadoop.hbase.ClusterStatus.getBackupMastersSize()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getBackupMasterNames--"><code>ClusterStatus.getBackupMasterNames()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getCellKeySerializedAsKeyValueKey-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.getCellKeySerializedAsKeyValueKey(Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getClusterStatus--">org.apache.hadoop.hbase.client.Admin.getClusterStatus()</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Admin.html#getClusterMetrics--"><code>Admin.getClusterMetrics()</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamilies--">org.apache.hadoop.hbase.HTableDescriptor.getColumnFamilies()</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HColumnDescriptor.html#getCompactionCompression--">org.apache.hadoop.hbase.HColumnDescriptor.getCompactionCompression()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              (<a href="https://issues.apache.org/jira/browse/HBASE-13655">HBASE-13655</a>).
              Use <a href="org/apache/hadoop/hbase/HColumnDescriptor.html#getCompactionCompressionType--"><code>HColumnDescriptor.getCompactionCompressionType()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getComparator--">org.apache.hadoop.hbase.HRegionInfo.getComparator()</a>
 <div class="block"><span class="deprecationComment">Use Region#getCellComparator().  deprecated for hbase 2.0, remove for hbase 3.0</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getCompleteSequenceId--">org.apache.hadoop.hbase.RegionLoad.getCompleteSequenceId()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getCompletedSequenceId--"><code>RegionLoad.getCompletedSequenceId()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HColumnDescriptor.html#getCompression--">org.apache.hadoop.hbase.HColumnDescriptor.getCompression()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              (<a href="https://issues.apache.org/jira/browse/HBASE-13655">HBASE-13655</a>).
              Use <a href="org/apache/hadoop/hbase/HColumnDescriptor.html#getCompressionType--"><code>HColumnDescriptor.getCompressionType()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getCpRequestsCount--">org.apache.hadoop.hbase.ServerLoad.getCpRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getCurrentCompactedKVs--">org.apache.hadoop.hbase.RegionLoad.getCurrentCompactedKVs()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getCompactedCellCount--"><code>RegionLoad.getCompactedCellCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getCurrentCompactedKVs--">org.apache.hadoop.hbase.ServerLoad.getCurrentCompactedKVs()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getDeadServers--">org.apache.hadoop.hbase.ClusterStatus.getDeadServers()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              (<a href="https://issues.apache.org/jira/browse/HBASE-13656">HBASE-13656</a>).
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getDeadServerNames--"><code>ClusterStatus.getDeadServerNames()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getDeadServersSize--">org.apache.hadoop.hbase.ClusterStatus.getDeadServersSize()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getDeadServerNames--"><code>ClusterStatus.getDeadServerNames()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getDescriptiveNameFromRegionStateForDisplay-org.apache.hadoop.hbase.master.RegionState-org.apache.hadoop.conf.Configuration-">org.apache.hadoop.hbase.HRegionInfo.getDescriptiveNameFromRegionStateForDisplay(RegionState, Configuration)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use RegionInfoDisplay#getDescriptiveNameFromRegionStateForDisplay(RegionState, Configuration)
              over in hbase-server module.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getEndKeyForDisplay-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.conf.Configuration-">org.apache.hadoop.hbase.HRegionInfo.getEndKeyForDisplay(HRegionInfo, Configuration)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use RegionInfoDisplay#getEndKeyForDisplay(RegionInfo, Configuration)
              over in hbase-server module.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getFamilies--">org.apache.hadoop.hbase.HTableDescriptor.getFamilies()</a>
 <div class="block"><span class="deprecationComment">Use <a href="org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamilies--"><code>HTableDescriptor.getColumnFamilies()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getFamiliesKeys--">org.apache.hadoop.hbase.HTableDescriptor.getFamiliesKeys()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              (<a href="https://issues.apache.org/jira/browse/HBASE-18008">HBASE-18008</a>).
              Use <a href="org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamilyNames--"><code>HTableDescriptor.getColumnFamilyNames()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getFamily-byte:A-">org.apache.hadoop.hbase.HTableDescriptor.getFamily(byte[])</a>
 <div class="block"><span class="deprecationComment">Use <a href="org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamily-byte:A-"><code>HTableDescriptor.getColumnFamily(byte[])</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getFilteredReadRequestsCount--">org.apache.hadoop.hbase.RegionLoad.getFilteredReadRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getFilteredReadRequestCount--"><code>RegionLoad.getFilteredReadRequestCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getFilteredReadRequestsCount--">org.apache.hadoop.hbase.ServerLoad.getFilteredReadRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerName.html#getHostAndPort--">org.apache.hadoop.hbase.ServerName.getHostAndPort()</a>
 <div class="block"><span class="deprecationComment">Since 2.0. Use <a href="org/apache/hadoop/hbase/ServerName.html#getAddress--"><code>ServerName.getAddress()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getLastMajorCompactionTs--">org.apache.hadoop.hbase.RegionLoad.getLastMajorCompactionTs()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getLastMajorCompactionTimestamp--"><code>RegionLoad.getLastMajorCompactionTimestamp()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getLastMajorCompactionTsForRegion-byte:A-">org.apache.hadoop.hbase.ClusterStatus.getLastMajorCompactionTsForRegion(byte[])</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterMetrics.html#getLastMajorCompactionTimestamp-byte:A-"><code>ClusterMetrics.getLastMajorCompactionTimestamp(byte[])</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getLastMajorCompactionTsForTable-org.apache.hadoop.hbase.TableName-">org.apache.hadoop.hbase.ClusterStatus.getLastMajorCompactionTsForTable(TableName)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterMetrics.html#getLastMajorCompactionTimestamp-org.apache.hadoop.hbase.TableName-"><code>ClusterMetrics.getLastMajorCompactionTimestamp(TableName)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getLoad--">org.apache.hadoop.hbase.ServerLoad.getLoad()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getNumberOfRegions--"><code>ServerLoad.getNumberOfRegions()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getLoad-org.apache.hadoop.hbase.ServerName-">org.apache.hadoop.hbase.ClusterStatus.getLoad(ServerName)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getLiveServerMetrics--"><code>ClusterStatus.getLiveServerMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getMaster--">org.apache.hadoop.hbase.ClusterStatus.getMaster()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getMasterName--"><code>ClusterStatus.getMasterName()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getMasterCoprocessors--">org.apache.hadoop.hbase.ClusterStatus.getMasterCoprocessors()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getMasterCoprocessorNames--"><code>ClusterStatus.getMasterCoprocessorNames()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getMasterCoprocessors--">org.apache.hadoop.hbase.client.Admin.getMasterCoprocessors()</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Admin.html#getMasterCoprocessorNames--"><code>Admin.getMasterCoprocessorNames()</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getMaxHeapMB--">org.apache.hadoop.hbase.ServerLoad.getMaxHeapMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getMaxHeapSize--"><code>ServerLoad.getMaxHeapSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/RegionLoadStats.html#getMemstoreLoad--">org.apache.hadoop.hbase.client.RegionLoadStats.getMemstoreLoad()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/client/RegionLoadStats.html#getMemStoreLoad--"><code>RegionLoadStats.getMemStoreLoad()</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getMemstoreSizeInMB--">org.apache.hadoop.hbase.ServerLoad.getMemstoreSizeInMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getMemStoreSizeMB--">org.apache.hadoop.hbase.RegionLoad.getMemStoreSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getMemStoreSize--"><code>RegionLoad.getMemStoreSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getMemStoreSizeMB--">org.apache.hadoop.hbase.ServerLoad.getMemStoreSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getName--">org.apache.hadoop.hbase.RegionLoad.getName()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getRegionName--"><code>RegionLoad.getRegionName()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getNumberOfRegions--">org.apache.hadoop.hbase.ServerLoad.getNumberOfRegions()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getNumberOfRequests--">org.apache.hadoop.hbase.ServerLoad.getNumberOfRequests()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRequestCountPerSecond--"><code>ServerLoad.getRequestCountPerSecond()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getOnlineRegions-org.apache.hadoop.hbase.ServerName-">org.apache.hadoop.hbase.client.Admin.getOnlineRegions(ServerName)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              (<a href="https://issues.apache.org/jira/browse/HBASE-17980">HBASE-17980</a>).
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#getRegions-org.apache.hadoop.hbase.ServerName-"><code>Admin.getRegions(ServerName sn)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Table.html#getOperationTimeout--">org.apache.hadoop.hbase.client.Table.getOperationTimeout()</a>
 <div class="block"><span class="deprecationComment">since 2.0 and will be removed in 3.0 version
              use <a href="org/apache/hadoop/hbase/client/Table.html#getOperationTimeout-java.util.concurrent.TimeUnit-"><code>Table.getOperationTimeout(TimeUnit)</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.html#getOperationTimeout--">org.apache.hadoop.hbase.rest.client.RemoteHTable.getOperationTimeout()</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/filter/SingleColumnValueFilter.html#getOperator--">org.apache.hadoop.hbase.filter.SingleColumnValueFilter.getOperator()</a>
 <div class="block"><span class="deprecationComment">since 2.0.0. Will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/filter/SingleColumnValueFilter.html#getCompareOperator--"><code>SingleColumnValueFilter.getCompareOperator()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/filter/CompareFilter.html#getOperator--">org.apache.hadoop.hbase.filter.CompareFilter.getOperator()</a>
 <div class="block"><span class="deprecationComment">since 2.0.0. Will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/filter/CompareFilter.html#getCompareOperator--"><code>CompareFilter.getCompareOperator()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getOwnerString--">org.apache.hadoop.hbase.HTableDescriptor.getOwnerString()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/TableDescriptor.html#getOwnerString--">org.apache.hadoop.hbase.client.TableDescriptor.getOwnerString()</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#getPeerConfig-java.lang.String-">org.apache.hadoop.hbase.client.replication.ReplicationAdmin.getPeerConfig(String)</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Admin.html#getReplicationPeerConfig-java.lang.String-"><code>Admin.getReplicationPeerConfig(String)</code></a>
              instead</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#getPeersCount--">org.apache.hadoop.hbase.client.replication.ReplicationAdmin.getPeersCount()</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#getPeerState-java.lang.String-">org.apache.hadoop.hbase.client.replication.ReplicationAdmin.getPeerState(String)</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#getPeerTableCFs-java.lang.String-">org.apache.hadoop.hbase.client.replication.ReplicationAdmin.getPeerTableCFs(String)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0,
  use <a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#getPeerConfig-java.lang.String-"><code>ReplicationAdmin.getPeerConfig(String)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getQualifierBufferShallowCopy-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.getQualifierBufferShallowCopy(Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getQuotaRetriever-org.apache.hadoop.hbase.quotas.QuotaFilter-">org.apache.hadoop.hbase.client.Admin.getQuotaRetriever(QuotaFilter)</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. Will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/client/Admin.html#getQuota-org.apache.hadoop.hbase.quotas.QuotaFilter-"><code>Admin.getQuota(QuotaFilter)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getReadRequestsCount--">org.apache.hadoop.hbase.RegionLoad.getReadRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getReadRequestCount--"><code>RegionLoad.getReadRequestCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getReadRequestsCount--">org.apache.hadoop.hbase.ServerLoad.getReadRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Table.html#getReadRpcTimeout--">org.apache.hadoop.hbase.client.Table.getReadRpcTimeout()</a>
 <div class="block"><span class="deprecationComment">since 2.0 and will be removed in 3.0 version
              use <a href="org/apache/hadoop/hbase/client/Table.html#getReadRpcTimeout-java.util.concurrent.TimeUnit-"><code>Table.getReadRpcTimeout(TimeUnit)</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.html#getReadRpcTimeout--">org.apache.hadoop.hbase.rest.client.RemoteHTable.getReadRpcTimeout()</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionLocation.html#getRegionInfo--">org.apache.hadoop.hbase.HRegionLocation.getRegionInfo()</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. Will remove in 3.0.0. Use <a href="org/apache/hadoop/hbase/HRegionLocation.html#getRegion--"><code>HRegionLocation.getRegion()</code></a>} instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getRegionNameAsStringForDisplay-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.conf.Configuration-">org.apache.hadoop.hbase.HRegionInfo.getRegionNameAsStringForDisplay(HRegionInfo, Configuration)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use RegionInfoDisplay#getRegionNameAsStringForDisplay(RegionInfo, Configuration)
              over in hbase-server module.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getRegionNameForDisplay-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.conf.Configuration-">org.apache.hadoop.hbase.HRegionInfo.getRegionNameForDisplay(HRegionInfo, Configuration)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use RegionInfoDisplay#getRegionNameForDisplay(RegionInfo, Configuration)
              over in hbase-server module.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getRegionsCount--">org.apache.hadoop.hbase.ClusterStatus.getRegionsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterMetrics.html#getRegionCount--"><code>ClusterMetrics.getRegionCount()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionServerCoprocessors--">org.apache.hadoop.hbase.ServerLoad.getRegionServerCoprocessors()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getCoprocessorNames--"><code>ServerLoad.getCoprocessorNames()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionsLoad--">org.apache.hadoop.hbase.ServerLoad.getRegionsLoad()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getReportTime--">org.apache.hadoop.hbase.ServerLoad.getReportTime()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getReportTimestamp--"><code>ServerLoad.getReportTimestamp()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getRequestsCount--">org.apache.hadoop.hbase.RegionLoad.getRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionMetrics.html#getRequestCount--"><code>RegionMetrics.getRequestCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getRequestsCount--">org.apache.hadoop.hbase.ClusterStatus.getRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterMetrics.html#getRequestCount--"><code>ClusterMetrics.getRequestCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getRequestsPerSecond--">org.apache.hadoop.hbase.ServerLoad.getRequestsPerSecond()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRequestCountPerSecond--"><code>ServerLoad.getRequestCountPerSecond()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getRootIndexSizeKB--">org.apache.hadoop.hbase.RegionLoad.getRootIndexSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreFileRootLevelIndexSize--"><code>RegionLoad.getStoreFileRootLevelIndexSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getRootIndexSizeKB--">org.apache.hadoop.hbase.ServerLoad.getRootIndexSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getRowByte-org.apache.hadoop.hbase.Cell-int-">org.apache.hadoop.hbase.CellUtil.getRowByte(Cell, int)</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Table.html#getRpcTimeout--">org.apache.hadoop.hbase.client.Table.getRpcTimeout()</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Table.html#getReadRpcTimeout-java.util.concurrent.TimeUnit-"><code>Table.getReadRpcTimeout(TimeUnit)</code></a> or
              <a href="org/apache/hadoop/hbase/client/Table.html#getWriteRpcTimeout-java.util.concurrent.TimeUnit-"><code>Table.getWriteRpcTimeout(TimeUnit)</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.html#getRpcTimeout--">org.apache.hadoop.hbase.rest.client.RemoteHTable.getRpcTimeout()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getRsCoprocessors--">org.apache.hadoop.hbase.ServerLoad.getRsCoprocessors()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getCoprocessorNames--"><code>ServerLoad.getCoprocessorNames()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#getScanMetrics--">org.apache.hadoop.hbase.client.Scan.getScanMetrics()</a>
 <div class="block"><span class="deprecationComment">Use <a href="org/apache/hadoop/hbase/client/ResultScanner.html#getScanMetrics--"><code>ResultScanner.getScanMetrics()</code></a> instead. And notice that, please do not
              use this method and <a href="org/apache/hadoop/hbase/client/ResultScanner.html#getScanMetrics--"><code>ResultScanner.getScanMetrics()</code></a> together, the metrics
              will be messed up.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/Cell.html#getSequenceId--">org.apache.hadoop.hbase.Cell.getSequenceId()</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerName.html#getServerName-java.lang.String-long-">org.apache.hadoop.hbase.ServerName.getServerName(String, long)</a>
 <div class="block"><span class="deprecationComment">Since 2.0. Use <a href="org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-long-"><code>ServerName.valueOf(String, long)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerName.html#getServerNameLessStartCode-java.lang.String-">org.apache.hadoop.hbase.ServerName.getServerNameLessStartCode(String)</a>
 <div class="block"><span class="deprecationComment">Since 2.0. Use <a href="org/apache/hadoop/hbase/ServerName.html#getAddress--"><code>ServerName.getAddress()</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getServers--">org.apache.hadoop.hbase.ClusterStatus.getServers()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getLiveServerMetrics--"><code>ClusterStatus.getLiveServerMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getServersSize--">org.apache.hadoop.hbase.ClusterStatus.getServersSize()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getLiveServerMetrics--"><code>ClusterStatus.getLiveServerMetrics()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerName.html#getServerStartcodeFromServerName-java.lang.String-">org.apache.hadoop.hbase.ServerName.getServerStartcodeFromServerName(String)</a>
 <div class="block"><span class="deprecationComment">Since 2.0. Use instance of ServerName to pull out start code.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getShortNameToLog-org.apache.hadoop.hbase.HRegionInfo...-">org.apache.hadoop.hbase.HRegionInfo.getShortNameToLog(HRegionInfo...)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#getShortNameToLog-org.apache.hadoop.hbase.client.RegionInfo...-"><code>RegionInfo.getShortNameToLog(RegionInfo...)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getShortNameToLog-java.util.List-">org.apache.hadoop.hbase.HRegionInfo.getShortNameToLog(List&lt;HRegionInfo&gt;)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#getShortNameToLog-java.util.List-"><code>RegionInfo.getShortNameToLog(List)</code></a>)}.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/util/Bytes.html#getSize--">org.apache.hadoop.hbase.util.Bytes.getSize()</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/util/Bytes.html#getLength--"><code>Bytes.getLength()</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/io/ImmutableBytesWritable.html#getSize--">org.apache.hadoop.hbase.io.ImmutableBytesWritable.getSize()</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/io/ImmutableBytesWritable.html#getLength--"><code>ImmutableBytesWritable.getLength()</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getStartKey-byte:A-">org.apache.hadoop.hbase.HRegionInfo.getStartKey(byte[])</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#getStartKey-byte:A-"><code>RegionInfo.getStartKey(byte[])</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getStartKeyForDisplay-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.conf.Configuration-">org.apache.hadoop.hbase.HRegionInfo.getStartKeyForDisplay(HRegionInfo, Configuration)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use RegionInfoDisplay#getStartKeyForDisplay(RegionInfo, Configuration)
              over in hbase-server module.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreCompleteSequenceId--">org.apache.hadoop.hbase.RegionLoad.getStoreCompleteSequenceId()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreSequenceId--"><code>RegionLoad.getStoreSequenceId()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStorefileIndexSizeInMB--">org.apache.hadoop.hbase.ServerLoad.getStorefileIndexSizeInMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStorefileIndexSizeKB--">org.apache.hadoop.hbase.RegionLoad.getStorefileIndexSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreFileRootLevelIndexSize--"><code>RegionLoad.getStoreFileRootLevelIndexSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStorefileIndexSizeKB--">org.apache.hadoop.hbase.ServerLoad.getStorefileIndexSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStorefileIndexSizeMB--">org.apache.hadoop.hbase.RegionLoad.getStorefileIndexSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              ((<a href="https://issues.apache.org/jira/browse/HBASE-3935">HBASE-3935</a>)).
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreFileRootLevelIndexSize--"><code>RegionLoad.getStoreFileRootLevelIndexSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStorefiles--">org.apache.hadoop.hbase.RegionLoad.getStorefiles()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreFileCount--"><code>RegionLoad.getStoreFileCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStorefiles--">org.apache.hadoop.hbase.ServerLoad.getStorefiles()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStorefileSizeInMB--">org.apache.hadoop.hbase.ServerLoad.getStorefileSizeInMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStorefileSizeMB--">org.apache.hadoop.hbase.RegionLoad.getStorefileSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreFileSize--"><code>RegionLoad.getStoreFileSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStorefileSizeMB--">org.apache.hadoop.hbase.ServerLoad.getStorefileSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStores--">org.apache.hadoop.hbase.RegionLoad.getStores()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreCount--"><code>RegionLoad.getStoreCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStores--">org.apache.hadoop.hbase.ServerLoad.getStores()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreUncompressedSizeMB--">org.apache.hadoop.hbase.RegionLoad.getStoreUncompressedSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getUncompressedStoreFileSize--"><code>RegionLoad.getUncompressedStoreFileSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStoreUncompressedSizeMB--">org.apache.hadoop.hbase.ServerLoad.getStoreUncompressedSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/SnapshotDescription.html#getTable--">org.apache.hadoop.hbase.client.SnapshotDescription.getTable()</a>
 <div class="block"><span class="deprecationComment">Use getTableName() or getTableNameAsString() instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getTable-byte:A-">org.apache.hadoop.hbase.HRegionInfo.getTable(byte[])</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#getTable-byte:A-"><code>RegionInfo.getTable(byte[])</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Table.html#getTableDescriptor--">org.apache.hadoop.hbase.client.Table.getTableDescriptor()</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Table.html#getDescriptor--"><code>Table.getDescriptor()</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.html#getTableDescriptor--">org.apache.hadoop.hbase.rest.client.RemoteHTable.getTableDescriptor()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getTableDescriptor-org.apache.hadoop.hbase.TableName-">org.apache.hadoop.hbase.client.Admin.getTableDescriptor(TableName)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#getDescriptor-org.apache.hadoop.hbase.TableName-"><code>Admin.getDescriptor(TableName)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getTableDescriptors-java.util.List-">org.apache.hadoop.hbase.client.Admin.getTableDescriptors(List&lt;String&gt;)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.List-"><code>Admin.listTableDescriptors(List)</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getTableDescriptorsByTableName-java.util.List-">org.apache.hadoop.hbase.client.Admin.getTableDescriptorsByTableName(List&lt;TableName&gt;)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.List-"><code>Admin.listTableDescriptors(List)</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getTableRegions-org.apache.hadoop.hbase.TableName-">org.apache.hadoop.hbase.client.Admin.getTableRegions(TableName)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              (<a href="https://issues.apache.org/jira/browse/HBASE-17980">HBASE-17980</a>).
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#getRegions-org.apache.hadoop.hbase.TableName-"><code>Admin.getRegions(TableName)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getTag-org.apache.hadoop.hbase.Cell-byte-">org.apache.hadoop.hbase.CellUtil.getTag(Cell, byte)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <code>RawCell.getTag(byte)</code></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getTagArray-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.getTagArray(Cell)</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getTags-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.getTags(Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <code>RawCell.getTags()</code></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/Cell.html#getTagsArray--">org.apache.hadoop.hbase.Cell.getTagsArray()</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0. Tags are are now internal.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/Cell.html#getTagsLength--">org.apache.hadoop.hbase.Cell.getTagsLength()</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0. Tags are are now internal.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/Cell.html#getTagsOffset--">org.apache.hadoop.hbase.Cell.getTagsOffset()</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0. Tags are are now internal.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Mutation.html#getTimeStamp--">org.apache.hadoop.hbase.client.Mutation.getTimeStamp()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/client/Mutation.html#getTimestamp--"><code>Mutation.getTimestamp()</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationLoadSource.html#getTimeStampOfLastShippedOp--">org.apache.hadoop.hbase.replication.ReplicationLoadSource.getTimeStampOfLastShippedOp()</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. Will be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationLoadSink.html#getTimeStampsOfLastAppliedOp--">org.apache.hadoop.hbase.replication.ReplicationLoadSink.getTimeStampsOfLastAppliedOp()</a>
 <div class="block"><span class="deprecationComment">Since hbase-2.0.0. Will be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getTotalCompactingKVs--">org.apache.hadoop.hbase.RegionLoad.getTotalCompactingKVs()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getCompactingCellCount--"><code>RegionLoad.getCompactingCellCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getTotalCompactingKVs--">org.apache.hadoop.hbase.ServerLoad.getTotalCompactingKVs()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getTotalNumberOfRequests--">org.apache.hadoop.hbase.ServerLoad.getTotalNumberOfRequests()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRequestCount--"><code>ServerLoad.getRequestCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getTotalStaticBloomSizeKB--">org.apache.hadoop.hbase.RegionLoad.getTotalStaticBloomSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getBloomFilterSize--"><code>RegionLoad.getBloomFilterSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getTotalStaticBloomSizeKB--">org.apache.hadoop.hbase.ServerLoad.getTotalStaticBloomSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getTotalStaticIndexSizeKB--">org.apache.hadoop.hbase.RegionLoad.getTotalStaticIndexSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreFileUncompressedDataIndexSize--"><code>RegionLoad.getStoreFileUncompressedDataIndexSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getTotalStaticIndexSizeKB--">org.apache.hadoop.hbase.ServerLoad.getTotalStaticIndexSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/Cell.html#getTypeByte--">org.apache.hadoop.hbase.Cell.getTypeByte()</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0. Use <a href="org/apache/hadoop/hbase/Cell.html#getType--"><code>Cell.getType()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getUsedHeapMB--">org.apache.hadoop.hbase.ServerLoad.getUsedHeapMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getUsedHeapSize--"><code>ServerLoad.getUsedHeapSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getValueBufferShallowCopy-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.getValueBufferShallowCopy(Cell)</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in 3.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getVersion--">org.apache.hadoop.hbase.ClusterStatus.getVersion()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getWriteRequestsCount--">org.apache.hadoop.hbase.RegionLoad.getWriteRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getWriteRequestCount--"><code>RegionLoad.getWriteRequestCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getWriteRequestsCount--">org.apache.hadoop.hbase.ServerLoad.getWriteRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Table.html#getWriteRpcTimeout--">org.apache.hadoop.hbase.client.Table.getWriteRpcTimeout()</a>
 <div class="block"><span class="deprecationComment">since 2.0 and will be removed in 3.0 version
              use <a href="org/apache/hadoop/hbase/client/Table.html#getWriteRpcTimeout-java.util.concurrent.TimeUnit-"><code>Table.getWriteRpcTimeout(TimeUnit)</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.html#getWriteRpcTimeout--">org.apache.hadoop.hbase.rest.client.RemoteHTable.getWriteRpcTimeout()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/RowMutations.html#hashCode--">org.apache.hadoop.hbase.client.RowMutations.hashCode()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              No replacement</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Increment.html#hashCode--">org.apache.hadoop.hbase.client.Increment.hashCode()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              No replacement.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#hasMaxHeapMB--">org.apache.hadoop.hbase.ServerLoad.hasMaxHeapMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              No flag in 2.0</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#hasNumberOfRequests--">org.apache.hadoop.hbase.ServerLoad.hasNumberOfRequests()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              No flag in 2.0</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#hasRegionMemstoreReplication--">org.apache.hadoop.hbase.HTableDescriptor.hasRegionMemstoreReplication()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/HTableDescriptor.html#hasRegionMemStoreReplication--"><code>HTableDescriptor.hasRegionMemStoreReplication()</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#hasTotalNumberOfRequests--">org.apache.hadoop.hbase.ServerLoad.hasTotalNumberOfRequests()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              No flag in 2.0</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#hasUsedHeapMB--">org.apache.hadoop.hbase.ServerLoad.hasUsedHeapMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              No flag in 2.0</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#initCredentialsForCluster-org.apache.hadoop.mapreduce.Job-java.lang.String-">org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.initCredentialsForCluster(Job, String)</a>
 <div class="block"><span class="deprecationComment">Since 1.2.0, use <a href="org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#initCredentialsForCluster-org.apache.hadoop.mapreduce.Job-org.apache.hadoop.conf.Configuration-"><code>TableMapReduceUtil.initCredentialsForCluster(Job, Configuration)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#isBalancerOn--">org.apache.hadoop.hbase.ClusterStatus.isBalancerOn()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              No flag in 2.0</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Get.html#isClosestRowBefore--">org.apache.hadoop.hbase.client.Get.isClosestRowBefore()</a>
 <div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#isDelete-byte-">org.apache.hadoop.hbase.CellUtil.isDelete(byte)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#isDeleteColumnOrFamily-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.isDeleteColumnOrFamily(Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#isDeleteColumns-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.isDeleteColumns(Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#isDeleteColumnVersion-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.isDeleteColumnVersion(Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#isDeleteFamily-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.isDeleteFamily(Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#isDeleteFamilyVersion-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.isDeleteFamilyVersion(Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#isDeleteType-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.isDeleteType(Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#isEncodedRegionName-byte:A-">org.apache.hadoop.hbase.HRegionInfo.isEncodedRegionName(byte[])</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#isEncodedRegionName-byte:A-"><code>RegionInfo.isEncodedRegionName(byte[])</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HColumnDescriptor.html#isLegalFamilyName-byte:A-">org.apache.hadoop.hbase.HColumnDescriptor.isLegalFamilyName(byte[])</a>
 <div class="block"><span class="deprecationComment">Use <a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.html#isLegalColumnFamilyName-byte:A-"><code>ColumnFamilyDescriptorBuilder.isLegalColumnFamilyName(byte[])</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Result.html#isPartial--">org.apache.hadoop.hbase.client.Result.isPartial()</a>
 <div class="block"><span class="deprecationComment">the word 'partial' ambiguous, use <a href="org/apache/hadoop/hbase/client/Result.html#mayHaveMoreCellsInRow--"><code>Result.mayHaveMoreCellsInRow()</code></a> instead.
              Deprecated since 1.4.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#isSmall--">org.apache.hadoop.hbase.client.Scan.isSmall()</a>
 <div class="block"><span class="deprecationComment">since 2.0.0. See the comment of <a href="org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-"><code>Scan.setSmall(boolean)</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#isSplitOrMergeEnabled-org.apache.hadoop.hbase.client.MasterSwitchType-">org.apache.hadoop.hbase.client.Admin.isSplitOrMergeEnabled(MasterSwitchType)</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. Will be removed in 3.0.0. Use
  <a href="org/apache/hadoop/hbase/client/Admin.html#isSplitEnabled--"><code>Admin.isSplitEnabled()</code></a> or <a href="org/apache/hadoop/hbase/client/Admin.html#isMergeEnabled--"><code>Admin.isMergeEnabled()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-byte:A:A-">org.apache.hadoop.hbase.client.Admin.isTableAvailable(TableName, byte[][])</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. Will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/client/Admin.html#isTableAvailable-org.apache.hadoop.hbase.TableName-"><code>Admin.isTableAvailable(TableName)</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#listPeerConfigs--">org.apache.hadoop.hbase.client.replication.ReplicationAdmin.listPeerConfigs()</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Admin.html#listReplicationPeers--"><code>Admin.listReplicationPeers()</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#listReplicated--">org.apache.hadoop.hbase.client.replication.ReplicationAdmin.listReplicated()</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Admin.html#listReplicatedTableCFs--"><code>Admin.listReplicatedTableCFs()</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#listSnapshots-java.lang.String-">org.apache.hadoop.hbase.client.Admin.listSnapshots(String)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#listSnapshots-java.util.regex.Pattern-"><code>Admin.listSnapshots(Pattern)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#listTableDescriptorsByNamespace-java.lang.String-">org.apache.hadoop.hbase.client.Admin.listTableDescriptorsByNamespace(String)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Admin.html#listTableDescriptorsByNamespace-byte:A-"><code>Admin.listTableDescriptorsByNamespace(byte[])</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#listTableNames-java.lang.String-">org.apache.hadoop.hbase.client.Admin.listTableNames(String)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version. Use
              <a href="org/apache/hadoop/hbase/client/Admin.html#listTableNames-java.util.regex.Pattern-"><code>Admin.listTableNames(Pattern)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#listTableNames-java.lang.String-boolean-">org.apache.hadoop.hbase.client.Admin.listTableNames(String, boolean)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version. Use
              <a href="org/apache/hadoop/hbase/client/Admin.html#listTableNames-java.util.regex.Pattern-boolean-"><code>Admin.listTableNames(Pattern, boolean)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#listTables--">org.apache.hadoop.hbase.client.Admin.listTables()</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors--"><code>Admin.listTableDescriptors()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#listTables-java.util.regex.Pattern-">org.apache.hadoop.hbase.client.Admin.listTables(Pattern)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.regex.Pattern-"><code>Admin.listTableDescriptors(java.util.regex.Pattern)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#listTables-java.util.regex.Pattern-boolean-">org.apache.hadoop.hbase.client.Admin.listTables(Pattern, boolean)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.regex.Pattern-boolean-"><code>Admin.listTableDescriptors(java.util.regex.Pattern, boolean)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#listTables-java.lang.String-">org.apache.hadoop.hbase.client.Admin.listTables(String)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version. Use
              <a href="org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.regex.Pattern-"><code>Admin.listTableDescriptors(Pattern)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#listTables-java.lang.String-boolean-">org.apache.hadoop.hbase.client.Admin.listTables(String, boolean)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.regex.Pattern-boolean-"><code>Admin.listTableDescriptors(Pattern, boolean)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#listTableSnapshots-java.lang.String-java.lang.String-">org.apache.hadoop.hbase.client.Admin.listTableSnapshots(String, String)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#listTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-"><code>Admin.listTableSnapshots(Pattern, Pattern)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#matchingColumn-org.apache.hadoop.hbase.Cell-byte:A-int-int-byte:A-int-int-">org.apache.hadoop.hbase.CellUtil.matchingColumn(Cell, byte[], int, int, byte[], int, int)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#matchingFamily-org.apache.hadoop.hbase.Cell-byte:A-int-int-">org.apache.hadoop.hbase.CellUtil.matchingFamily(Cell, byte[], int, int)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#matchingQualifier-org.apache.hadoop.hbase.Cell-byte:A-int-int-">org.apache.hadoop.hbase.CellUtil.matchingQualifier(Cell, byte[], int, int)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#matchingRow-org.apache.hadoop.hbase.Cell-byte:A-">org.apache.hadoop.hbase.CellUtil.matchingRow(Cell, byte[])</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Instead use <a href="org/apache/hadoop/hbase/CellUtil.html#matchingRows-org.apache.hadoop.hbase.Cell-byte:A-"><code>CellUtil.matchingRows(Cell, byte[])</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#matchingRow-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.matchingRow(Cell, Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Instead use <a href="org/apache/hadoop/hbase/CellUtil.html#matchingRows-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-"><code>CellUtil.matchingRows(Cell, Cell)</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#matchingType-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.matchingType(Cell, Cell)</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#mergeRegions-byte:A-byte:A-boolean-">org.apache.hadoop.hbase.client.Admin.mergeRegions(byte[], byte[], boolean)</a>
 <div class="block"><span class="deprecationComment">Since 2.0. Will be removed in 3.0. Use
      <a href="org/apache/hadoop/hbase/client/Admin.html#mergeRegionsAsync-byte:A-byte:A-boolean-"><code>Admin.mergeRegionsAsync(byte[], byte[], boolean)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#modifyColumn-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">org.apache.hadoop.hbase.client.Admin.modifyColumn(TableName, ColumnFamilyDescriptor)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0.
              This will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#modifyColumnFamily-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-"><code>Admin.modifyColumnFamily(TableName, ColumnFamilyDescriptor)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#modifyTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-">org.apache.hadoop.hbase.client.Admin.modifyTable(TableName, TableDescriptor)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Admin.html#modifyTable-org.apache.hadoop.hbase.client.TableDescriptor-"><code>Admin.modifyTable(TableDescriptor)</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#modifyTableAsync-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-">org.apache.hadoop.hbase.client.Admin.modifyTableAsync(TableName, TableDescriptor)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Admin.html#modifyTableAsync-org.apache.hadoop.hbase.client.TableDescriptor-"><code>Admin.modifyTableAsync(TableDescriptor)</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#obtainServerLoadPB--">org.apache.hadoop.hbase.ServerLoad.obtainServerLoadPB()</a>
 <div class="block"><span class="deprecationComment">DONT use this pb object since the byte array backed may be modified in rpc layer</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#overlappingKeys-byte:A-byte:A-byte:A-byte:A-">org.apache.hadoop.hbase.CellUtil.overlappingKeys(byte[], byte[], byte[], byte[])</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#parseDelimitedFrom-byte:A-int-int-">org.apache.hadoop.hbase.HRegionInfo.parseDelimitedFrom(byte[], int, int)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#parseDelimitedFrom-byte:A-int-int-"><code>RegionInfo.parseDelimitedFrom(byte[], int, int)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#parseFrom-byte:A-">org.apache.hadoop.hbase.HRegionInfo.parseFrom(byte[])</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#parseFrom-byte:A-"><code>RegionInfo.parseFrom(byte[])</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#parseFrom-byte:A-int-int-">org.apache.hadoop.hbase.HRegionInfo.parseFrom(byte[], int, int)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#parseFrom-byte:A-int-int-"><code>RegionInfo.parseFrom(byte[], int, int)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<t

<TRUNCATED>

[30/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.


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

Branch: refs/heads/asf-site
Commit: 5fd895c68805b7b1be7d5878bd27f94954c3944c
Parents: 55f2f13
Author: jenkins <bu...@apache.org>
Authored: Tue Jul 31 14:49:19 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Tue Jul 31 14:49:19 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                | 11044 +++++++++--------
 apidocs/constant-values.html                    |    26 +
 apidocs/deprecated-list.html                    |   556 +-
 apidocs/index-all.html                          |    42 +-
 apidocs/org/apache/hadoop/hbase/AuthUtil.html   |   106 +-
 .../hadoop/hbase/class-use/ScheduledChore.html  |     9 +
 .../hadoop/hbase/client/ConnectionFactory.html  |    32 +-
 .../apache/hadoop/hbase/package-summary.html    |     4 +-
 .../org/apache/hadoop/hbase/security/User.html  |   130 +-
 .../hadoop/hbase/security/class-use/User.html   |    16 +
 .../org/apache/hadoop/hbase/AuthUtil.html       |   392 +-
 .../hadoop/hbase/client/ConnectionFactory.html  |   555 +-
 .../org/apache/hadoop/hbase/security/User.html  |   739 +-
 book.html                                       |    36 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       |  3996 +++---
 checkstyle.rss                                  |     4 +-
 coc.html                                        |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/constant-values.html                 |    20 +-
 devapidocs/deprecated-list.html                 |   762 +-
 devapidocs/index-all.html                       |    89 +-
 .../org/apache/hadoop/hbase/AuthUtil.html       |   250 +-
 .../hadoop/hbase/backup/package-tree.html       |     2 +-
 .../hadoop/hbase/class-use/ChoreService.html    |    34 +-
 .../hadoop/hbase/class-use/ScheduledChore.html  |     9 +
 .../hadoop/hbase/class-use/Stoppable.html       |     6 +
 .../hbase/client/AsyncConnectionImpl.html       |   140 +-
 .../hadoop/hbase/client/ConnectionFactory.html  |    32 +-
 ...ectionImplementation.MasterServiceState.html |    18 +-
 ...onImplementation.MasterServiceStubMaker.html |    10 +-
 ...ntation.ServerErrorTracker.ServerErrors.html |    10 +-
 ...ectionImplementation.ServerErrorTracker.html |    20 +-
 .../hbase/client/ConnectionImplementation.html  |   332 +-
 .../hadoop/hbase/client/package-tree.html       |    24 +-
 .../hadoop/hbase/executor/package-tree.html     |     2 +-
 .../hadoop/hbase/filter/package-tree.html       |     8 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     6 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |     2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     4 +-
 .../hbase/master/balancer/package-tree.html     |     2 +-
 .../hadoop/hbase/master/package-tree.html       |     4 +-
 .../hbase/master/procedure/package-tree.html    |     4 +-
 .../hadoop/hbase/monitoring/package-tree.html   |     2 +-
 .../apache/hadoop/hbase/package-summary.html    |     4 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    16 +-
 .../org/apache/hadoop/hbase/package-use.html    |    58 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     4 +-
 .../hadoop/hbase/quotas/package-tree.html       |     8 +-
 .../hadoop/hbase/regionserver/package-tree.html |    18 +-
 .../regionserver/querymatcher/package-tree.html |     2 +-
 .../hbase/regionserver/wal/package-tree.html    |     2 +-
 .../hadoop/hbase/replication/package-tree.html  |     2 +-
 .../hadoop/hbase/rest/model/package-tree.html   |     2 +-
 .../hbase/security/User.SecureHadoopUser.html   |    58 +-
 .../hbase/security/User.TestingGroups.html      |    12 +-
 .../org/apache/hadoop/hbase/security/User.html  |   130 +-
 .../hadoop/hbase/security/UserProvider.html     |    63 +-
 .../access/AccessChecker.InputUser.html         |     2 +-
 .../hbase/security/access/package-tree.html     |     2 +-
 .../hadoop/hbase/security/class-use/User.html   |    29 +
 .../hbase/security/class-use/UserProvider.html  |    50 +-
 .../hadoop/hbase/security/package-tree.html     |     2 +-
 .../hadoop/hbase/security/package-use.html      |     5 +
 .../hadoop/hbase/thrift/package-tree.html       |     2 +-
 .../apache/hadoop/hbase/util/package-tree.html  |    10 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 .../org/apache/hadoop/hbase/AuthUtil.html       |   392 +-
 .../org/apache/hadoop/hbase/Version.html        |     6 +-
 .../hbase/client/AsyncConnectionImpl.html       |   580 +-
 .../hadoop/hbase/client/ConnectionFactory.html  |   555 +-
 ...ectionImplementation.MasterServiceState.html |  3696 +++---
 ...onImplementation.MasterServiceStubMaker.html |  3696 +++---
 ...ntation.ServerErrorTracker.ServerErrors.html |  3696 +++---
 ...ectionImplementation.ServerErrorTracker.html |  3696 +++---
 .../hbase/client/ConnectionImplementation.html  |  3696 +++---
 .../hbase/security/User.SecureHadoopUser.html   |   739 +-
 .../hbase/security/User.TestingGroups.html      |   739 +-
 .../org/apache/hadoop/hbase/security/User.html  |   739 +-
 .../hadoop/hbase/security/UserProvider.html     |    93 +-
 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/constant-values.html             |    14 +
 testdevapidocs/index-all.html                   |    18 +
 .../hadoop/hbase/backup/package-tree.html       |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 .../hadoop/hbase/regionserver/package-tree.html |     6 +-
 .../hbase/security/HBaseKerberosUtils.html      |   140 +-
 ...opSecurityEnabledUserProviderForTesting.html |     2 +-
 .../TestUsersOperationsWithSecureHadoop.html    |    85 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     2 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 .../hbase/security/HBaseKerberosUtils.html      |   193 +-
 .../TestUsersOperationsWithSecureHadoop.html    |   215 +-
 119 files changed, 22593 insertions(+), 20499 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 4f9b141..569cab9 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -601,7 +601,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 


[12/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html
index 3f59aed..47a01f1 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html
@@ -29,295 +29,311 @@
 <span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.client.NonceGenerator.CLIENT_NONCES_ENABLED_KEY;<a name="line.22"></a>
 <span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hbase.thirdparty.io.netty.util.HashedWheelTimer;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.io.IOException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.CompletableFuture;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ExecutorService;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.TimeUnit;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.commons.io.IOUtils;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.conf.Configuration;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ServerName;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.TableName;<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.slf4j.Logger;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.slf4j.LoggerFactory;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ipc.RpcClientFactory;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.security.User;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcCallback;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsMasterRunningResponse;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.CollectionUtils;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Threads;<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> * The implementation of AsyncConnection.<a name="line.59"></a>
-<span class="sourceLineNo">060</span> */<a name="line.60"></a>
-<span class="sourceLineNo">061</span>@InterfaceAudience.Private<a name="line.61"></a>
-<span class="sourceLineNo">062</span>class AsyncConnectionImpl implements AsyncConnection {<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private static final Logger LOG = LoggerFactory.getLogger(AsyncConnectionImpl.class);<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  @VisibleForTesting<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  static final HashedWheelTimer RETRY_TIMER = new HashedWheelTimer(<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      Threads.newDaemonThreadFactory("Async-Client-Retry-Timer"), 10, TimeUnit.MILLISECONDS);<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static final String RESOLVE_HOSTNAME_ON_FAIL_KEY = "hbase.resolve.hostnames.on.failure";<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private final Configuration conf;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  final AsyncConnectionConfiguration connConf;<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private final User user;<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>  final AsyncRegistry registry;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final int rpcTimeout;<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final RpcClient rpcClient;<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  final RpcControllerFactory rpcControllerFactory;<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private final boolean hostnameCanChange;<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private final AsyncRegionLocator locator;<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  final AsyncRpcRetryingCallerFactory callerFactory;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private final NonceGenerator nonceGenerator;<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private final ConcurrentMap&lt;String, ClientService.Interface&gt; rsStubs = new ConcurrentHashMap&lt;&gt;();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private final ConcurrentMap&lt;String, AdminService.Interface&gt; adminSubs = new ConcurrentHashMap&lt;&gt;();<a name="line.95"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hbase.thirdparty.io.netty.util.HashedWheelTimer;<a name="line.29"></a>
+<span class="sourceLineNo">030</span><a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.io.IOException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.CompletableFuture;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ConcurrentMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.ExecutorService;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.TimeUnit;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.commons.io.IOUtils;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.conf.Configuration;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerName;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.TableName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.slf4j.Logger;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.slf4j.LoggerFactory;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ipc.RpcClientFactory;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.security.User;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcCallback;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsMasterRunningResponse;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.CollectionUtils;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>/**<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * The implementation of AsyncConnection.<a name="line.62"></a>
+<span class="sourceLineNo">063</span> */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>@InterfaceAudience.Private<a name="line.64"></a>
+<span class="sourceLineNo">065</span>class AsyncConnectionImpl implements AsyncConnection {<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private static final Logger LOG = LoggerFactory.getLogger(AsyncConnectionImpl.class);<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  @VisibleForTesting<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  static final HashedWheelTimer RETRY_TIMER = new HashedWheelTimer(<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      Threads.newDaemonThreadFactory("Async-Client-Retry-Timer"), 10, TimeUnit.MILLISECONDS);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private static final String RESOLVE_HOSTNAME_ON_FAIL_KEY = "hbase.resolve.hostnames.on.failure";<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private final Configuration conf;<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  final AsyncConnectionConfiguration connConf;<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private final User user;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  final AsyncRegistry registry;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  private final int rpcTimeout;<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private final RpcClient rpcClient;<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  final RpcControllerFactory rpcControllerFactory;<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private final boolean hostnameCanChange;<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private final AsyncRegionLocator locator;<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  final AsyncRpcRetryingCallerFactory callerFactory;<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  private final NonceGenerator nonceGenerator;<a name="line.95"></a>
 <span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final AtomicReference&lt;MasterService.Interface&gt; masterStub = new AtomicReference&lt;&gt;();<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final AtomicReference&lt;CompletableFuture&lt;MasterService.Interface&gt;&gt; masterStubMakeFuture =<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    new AtomicReference&lt;&gt;();<a name="line.100"></a>
+<span class="sourceLineNo">097</span>  private final ConcurrentMap&lt;String, ClientService.Interface&gt; rsStubs = new ConcurrentHashMap&lt;&gt;();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private final ConcurrentMap&lt;String, AdminService.Interface&gt; adminSubs = new ConcurrentHashMap&lt;&gt;();<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private final AtomicReference&lt;MasterService.Interface&gt; masterStub = new AtomicReference&lt;&gt;();<a name="line.100"></a>
 <span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public AsyncConnectionImpl(Configuration conf, AsyncRegistry registry, String clusterId,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      User user) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    this.conf = conf;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    this.user = user;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    this.connConf = new AsyncConnectionConfiguration(conf);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    this.registry = registry;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    this.rpcClient = RpcClientFactory.createClient(conf, clusterId);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    this.hostnameCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    this.rpcTimeout =<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      (int) Math.min(Integer.MAX_VALUE, TimeUnit.NANOSECONDS.toMillis(connConf.getRpcTimeoutNs()));<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    this.locator = new AsyncRegionLocator(this, RETRY_TIMER);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    this.callerFactory = new AsyncRpcRetryingCallerFactory(this, RETRY_TIMER);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    if (conf.getBoolean(CLIENT_NONCES_ENABLED_KEY, true)) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      nonceGenerator = PerClientRandomNonceGenerator.get();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    } else {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      nonceGenerator = NO_NONCE_GENERATOR;<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>  @Override<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  public Configuration getConfiguration() {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    return conf;<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>  @Override<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void close() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    IOUtils.closeQuietly(rpcClient);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    IOUtils.closeQuietly(registry);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  @Override<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  public AsyncTableRegionLocator getRegionLocator(TableName tableName) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    return new AsyncTableRegionLocatorImpl(tableName, locator);<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>  // we will override this method for testing retry caller, so do not remove this method.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  @VisibleForTesting<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  AsyncRegionLocator getLocator() {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return locator;<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>  // ditto<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @VisibleForTesting<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public NonceGenerator getNonceGenerator() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return nonceGenerator;<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>  private ClientService.Interface createRegionServerStub(ServerName serverName) throws IOException {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    return ClientService.newStub(rpcClient.createRpcChannel(serverName, user, rpcTimeout));<a name="line.151"></a>
+<span class="sourceLineNo">102</span>  private final AtomicReference&lt;CompletableFuture&lt;MasterService.Interface&gt;&gt; masterStubMakeFuture =<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    new AtomicReference&lt;&gt;();<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private ChoreService authService;<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public AsyncConnectionImpl(Configuration conf, AsyncRegistry registry, String clusterId,<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      User user) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    this.conf = conf;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    this.user = user;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    if (user.isLoginFromKeytab()) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      spawnRenewalChore(user.getUGI());<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    this.connConf = new AsyncConnectionConfiguration(conf);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    this.registry = registry;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    this.rpcClient = RpcClientFactory.createClient(conf, clusterId);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    this.hostnameCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    this.rpcTimeout =<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      (int) Math.min(Integer.MAX_VALUE, TimeUnit.NANOSECONDS.toMillis(connConf.getRpcTimeoutNs()));<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    this.locator = new AsyncRegionLocator(this, RETRY_TIMER);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    this.callerFactory = new AsyncRpcRetryingCallerFactory(this, RETRY_TIMER);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    if (conf.getBoolean(CLIENT_NONCES_ENABLED_KEY, true)) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      nonceGenerator = PerClientRandomNonceGenerator.get();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    } else {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      nonceGenerator = NO_NONCE_GENERATOR;<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><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private void spawnRenewalChore(final UserGroupInformation user) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    authService = new ChoreService("Relogin service");<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    authService.scheduleChore(AuthUtil.getAuthRenewalChore(user));<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>  @Override<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public Configuration getConfiguration() {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    return conf;<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>  @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  public void close() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    IOUtils.closeQuietly(rpcClient);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    IOUtils.closeQuietly(registry);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    if (authService != null) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      authService.shutdown();<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><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public AsyncTableRegionLocator getRegionLocator(TableName tableName) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    return new AsyncTableRegionLocatorImpl(tableName, locator);<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>  ClientService.Interface getRegionServerStub(ServerName serverName) throws IOException {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    return CollectionUtils.computeIfAbsentEx(rsStubs,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      getStubKey(ClientService.Interface.class.getSimpleName(), serverName, hostnameCanChange),<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      () -&gt; createRegionServerStub(serverName));<a name="line.157"></a>
+<span class="sourceLineNo">154</span>  // we will override this method for testing retry caller, so do not remove this method.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  @VisibleForTesting<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  AsyncRegionLocator getLocator() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    return locator;<a name="line.157"></a>
 <span class="sourceLineNo">158</span>  }<a name="line.158"></a>
 <span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  private MasterService.Interface createMasterStub(ServerName serverName) throws IOException {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    return MasterService.newStub(rpcClient.createRpcChannel(serverName, user, rpcTimeout));<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>  private AdminService.Interface createAdminServerStub(ServerName serverName) throws IOException {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    return AdminService.newStub(rpcClient.createRpcChannel(serverName, user, rpcTimeout));<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>  AdminService.Interface getAdminStub(ServerName serverName) throws IOException {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    return CollectionUtils.computeIfAbsentEx(adminSubs,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      getStubKey(AdminService.Interface.class.getSimpleName(), serverName, hostnameCanChange),<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      () -&gt; createAdminServerStub(serverName));<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>  private void makeMasterStub(CompletableFuture&lt;MasterService.Interface&gt; future) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    registry.getMasterAddress().whenComplete((sn, error) -&gt; {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      if (sn == null) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        String msg = "ZooKeeper available but no active master location found";<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        LOG.info(msg);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        this.masterStubMakeFuture.getAndSet(null)<a name="line.179"></a>
-<span class="sourceLineNo">180</span>            .completeExceptionally(new MasterNotRunningException(msg));<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        return;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      try {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        MasterService.Interface stub = createMasterStub(sn);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        HBaseRpcController controller = getRpcController();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        stub.isMasterRunning(controller, RequestConverter.buildIsMasterRunningRequest(),<a name="line.186"></a>
-<span class="sourceLineNo">187</span>          new RpcCallback&lt;IsMasterRunningResponse&gt;() {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>            @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>            public void run(IsMasterRunningResponse resp) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>              if (controller.failed() || resp == null ||<a name="line.190"></a>
-<span class="sourceLineNo">191</span>                (resp != null &amp;&amp; !resp.getIsMasterRunning())) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>                masterStubMakeFuture.getAndSet(null).completeExceptionally(<a name="line.192"></a>
-<span class="sourceLineNo">193</span>                  new MasterNotRunningException("Master connection is not running anymore"));<a name="line.193"></a>
-<span class="sourceLineNo">194</span>              } else {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>                masterStub.set(stub);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>                masterStubMakeFuture.set(null);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>                future.complete(stub);<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>          });<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      } catch (IOException e) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        this.masterStubMakeFuture.getAndSet(null)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>            .completeExceptionally(new IOException("Failed to create async master stub", e));<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><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  CompletableFuture&lt;MasterService.Interface&gt; getMasterStub() {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    MasterService.Interface masterStub = this.masterStub.get();<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>    if (masterStub == null) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      for (;;) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        if (this.masterStubMakeFuture.compareAndSet(null, new CompletableFuture&lt;&gt;())) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          CompletableFuture&lt;MasterService.Interface&gt; future = this.masterStubMakeFuture.get();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          makeMasterStub(future);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        } else {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          CompletableFuture&lt;MasterService.Interface&gt; future = this.masterStubMakeFuture.get();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          if (future != null) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>            return future;<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>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>    for (;;) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      if (masterStubMakeFuture.compareAndSet(null, new CompletableFuture&lt;&gt;())) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        CompletableFuture&lt;MasterService.Interface&gt; future = masterStubMakeFuture.get();<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        HBaseRpcController controller = getRpcController();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        masterStub.isMasterRunning(controller, RequestConverter.buildIsMasterRunningRequest(),<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          new RpcCallback&lt;IsMasterRunningResponse&gt;() {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>            @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>            public void run(IsMasterRunningResponse resp) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>              if (controller.failed() || resp == null ||<a name="line.233"></a>
-<span class="sourceLineNo">234</span>                (resp != null &amp;&amp; !resp.getIsMasterRunning())) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>                makeMasterStub(future);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>              } else {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>                future.complete(masterStub);<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>      } else {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        CompletableFuture&lt;MasterService.Interface&gt; future = masterStubMakeFuture.get();<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        if (future != null) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          return future;<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>    }<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>  private HBaseRpcController getRpcController() {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    HBaseRpcController controller = this.rpcControllerFactory.newController();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    controller.setCallTimeout((int) TimeUnit.NANOSECONDS.toMillis(connConf.getRpcTimeoutNs()));<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    return controller;<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>  @Override<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public AsyncTableBuilder&lt;AdvancedScanResultConsumer&gt; getTableBuilder(TableName tableName) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    return new AsyncTableBuilderBase&lt;AdvancedScanResultConsumer&gt;(tableName, connConf) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>      @Override<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      public AsyncTable&lt;AdvancedScanResultConsumer&gt; build() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        return new RawAsyncTableImpl(AsyncConnectionImpl.this, this);<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><a name="line.266"></a>
-<span class="sourceLineNo">267</span>  @Override<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  public AsyncTableBuilder&lt;ScanResultConsumer&gt; getTableBuilder(TableName tableName,<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      ExecutorService pool) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    return new AsyncTableBuilderBase&lt;ScanResultConsumer&gt;(tableName, connConf) {<a name="line.270"></a>
+<span class="sourceLineNo">160</span>  // ditto<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  @VisibleForTesting<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  public NonceGenerator getNonceGenerator() {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    return nonceGenerator;<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>  private ClientService.Interface createRegionServerStub(ServerName serverName) throws IOException {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    return ClientService.newStub(rpcClient.createRpcChannel(serverName, user, rpcTimeout));<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>  ClientService.Interface getRegionServerStub(ServerName serverName) throws IOException {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return CollectionUtils.computeIfAbsentEx(rsStubs,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      getStubKey(ClientService.Interface.class.getSimpleName(), serverName, hostnameCanChange),<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      () -&gt; createRegionServerStub(serverName));<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>  private MasterService.Interface createMasterStub(ServerName serverName) throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    return MasterService.newStub(rpcClient.createRpcChannel(serverName, user, rpcTimeout));<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>  private AdminService.Interface createAdminServerStub(ServerName serverName) throws IOException {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    return AdminService.newStub(rpcClient.createRpcChannel(serverName, user, rpcTimeout));<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>  AdminService.Interface getAdminStub(ServerName serverName) throws IOException {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    return CollectionUtils.computeIfAbsentEx(adminSubs,<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      getStubKey(AdminService.Interface.class.getSimpleName(), serverName, hostnameCanChange),<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      () -&gt; createAdminServerStub(serverName));<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>  private void makeMasterStub(CompletableFuture&lt;MasterService.Interface&gt; future) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    registry.getMasterAddress().whenComplete((sn, error) -&gt; {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      if (sn == null) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        String msg = "ZooKeeper available but no active master location found";<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        LOG.info(msg);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        this.masterStubMakeFuture.getAndSet(null)<a name="line.195"></a>
+<span class="sourceLineNo">196</span>            .completeExceptionally(new MasterNotRunningException(msg));<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        return;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      try {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        MasterService.Interface stub = createMasterStub(sn);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        HBaseRpcController controller = getRpcController();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        stub.isMasterRunning(controller, RequestConverter.buildIsMasterRunningRequest(),<a name="line.202"></a>
+<span class="sourceLineNo">203</span>          new RpcCallback&lt;IsMasterRunningResponse&gt;() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>            @Override<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            public void run(IsMasterRunningResponse resp) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>              if (controller.failed() || resp == null ||<a name="line.206"></a>
+<span class="sourceLineNo">207</span>                (resp != null &amp;&amp; !resp.getIsMasterRunning())) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>                masterStubMakeFuture.getAndSet(null).completeExceptionally(<a name="line.208"></a>
+<span class="sourceLineNo">209</span>                  new MasterNotRunningException("Master connection is not running anymore"));<a name="line.209"></a>
+<span class="sourceLineNo">210</span>              } else {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>                masterStub.set(stub);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>                masterStubMakeFuture.set(null);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>                future.complete(stub);<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>      } catch (IOException e) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        this.masterStubMakeFuture.getAndSet(null)<a name="line.218"></a>
+<span class="sourceLineNo">219</span>            .completeExceptionally(new IOException("Failed to create async master stub", e));<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><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  CompletableFuture&lt;MasterService.Interface&gt; getMasterStub() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    MasterService.Interface masterStub = this.masterStub.get();<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>    if (masterStub == null) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      for (;;) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        if (this.masterStubMakeFuture.compareAndSet(null, new CompletableFuture&lt;&gt;())) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          CompletableFuture&lt;MasterService.Interface&gt; future = this.masterStubMakeFuture.get();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          makeMasterStub(future);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>          CompletableFuture&lt;MasterService.Interface&gt; future = this.masterStubMakeFuture.get();<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          if (future != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>            return future;<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>      }<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>    for (;;) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      if (masterStubMakeFuture.compareAndSet(null, new CompletableFuture&lt;&gt;())) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        CompletableFuture&lt;MasterService.Interface&gt; future = masterStubMakeFuture.get();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        HBaseRpcController controller = getRpcController();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        masterStub.isMasterRunning(controller, RequestConverter.buildIsMasterRunningRequest(),<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          new RpcCallback&lt;IsMasterRunningResponse&gt;() {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            @Override<a name="line.247"></a>
+<span class="sourceLineNo">248</span>            public void run(IsMasterRunningResponse resp) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>              if (controller.failed() || resp == null ||<a name="line.249"></a>
+<span class="sourceLineNo">250</span>                (resp != null &amp;&amp; !resp.getIsMasterRunning())) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>                makeMasterStub(future);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>              } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>                future.complete(masterStub);<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>          });<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      } else {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        CompletableFuture&lt;MasterService.Interface&gt; future = masterStubMakeFuture.get();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        if (future != null) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          return future;<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>    }<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 HBaseRpcController getRpcController() {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    HBaseRpcController controller = this.rpcControllerFactory.newController();<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    controller.setCallTimeout((int) TimeUnit.NANOSECONDS.toMillis(connConf.getRpcTimeoutNs()));<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    return controller;<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>      @Override<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      public AsyncTable&lt;ScanResultConsumer&gt; build() {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        RawAsyncTableImpl rawTable = new RawAsyncTableImpl(AsyncConnectionImpl.this, this);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        return new AsyncTableImpl(AsyncConnectionImpl.this, rawTable, pool);<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>  @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  public AsyncAdminBuilder getAdminBuilder() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return new AsyncAdminBuilderBase(connConf) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      @Override<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public AsyncAdmin build() {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        return new RawAsyncHBaseAdmin(AsyncConnectionImpl.this, RETRY_TIMER, this);<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>  @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  public AsyncAdminBuilder getAdminBuilder(ExecutorService pool) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    return new AsyncAdminBuilderBase(connConf) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      @Override<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      public AsyncAdmin build() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        RawAsyncHBaseAdmin rawAdmin =<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          new RawAsyncHBaseAdmin(AsyncConnectionImpl.this, RETRY_TIMER, this);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        return new AsyncHBaseAdmin(rawAdmin, pool);<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><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  public AsyncBufferedMutatorBuilder getBufferedMutatorBuilder(TableName tableName) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return new AsyncBufferedMutatorBuilderImpl(connConf, getTableBuilder(tableName));<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>  @Override<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  public AsyncBufferedMutatorBuilder getBufferedMutatorBuilder(TableName tableName,<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      ExecutorService pool) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    return new AsyncBufferedMutatorBuilderImpl(connConf, getTableBuilder(tableName, pool));<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">272</span>  @Override<a name="line.272"></a>
+<span class="sourceLineNo">273</span>  public AsyncTableBuilder&lt;AdvancedScanResultConsumer&gt; getTableBuilder(TableName tableName) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    return new AsyncTableBuilderBase&lt;AdvancedScanResultConsumer&gt;(tableName, connConf) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>      @Override<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      public AsyncTable&lt;AdvancedScanResultConsumer&gt; build() {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return new RawAsyncTableImpl(AsyncConnectionImpl.this, this);<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>  }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>  @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public AsyncTableBuilder&lt;ScanResultConsumer&gt; getTableBuilder(TableName tableName,<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      ExecutorService pool) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    return new AsyncTableBuilderBase&lt;ScanResultConsumer&gt;(tableName, connConf) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>      @Override<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      public AsyncTable&lt;ScanResultConsumer&gt; build() {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        RawAsyncTableImpl rawTable = new RawAsyncTableImpl(AsyncConnectionImpl.this, this);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        return new AsyncTableImpl(AsyncConnectionImpl.this, rawTable, pool);<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>  }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>  @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public AsyncAdminBuilder getAdminBuilder() {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    return new AsyncAdminBuilderBase(connConf) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      @Override<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      public AsyncAdmin build() {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return new RawAsyncHBaseAdmin(AsyncConnectionImpl.this, RETRY_TIMER, this);<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><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  @Override<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  public AsyncAdminBuilder getAdminBuilder(ExecutorService pool) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    return new AsyncAdminBuilderBase(connConf) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      @Override<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      public AsyncAdmin build() {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        RawAsyncHBaseAdmin rawAdmin =<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          new RawAsyncHBaseAdmin(AsyncConnectionImpl.this, RETRY_TIMER, this);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        return new AsyncHBaseAdmin(rawAdmin, pool);<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>
+<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>  @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  public AsyncBufferedMutatorBuilder getBufferedMutatorBuilder(TableName tableName) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return new AsyncBufferedMutatorBuilderImpl(connConf, getTableBuilder(tableName));<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>  @Override<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  public AsyncBufferedMutatorBuilder getBufferedMutatorBuilder(TableName tableName,<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      ExecutorService pool) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    return new AsyncBufferedMutatorBuilderImpl(connConf, getTableBuilder(tableName, pool));<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>
 
 
 


[15/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 a4111b8..d0c7850 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -552,24 +552,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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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.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/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/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/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/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/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/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>
+<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/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/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/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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/5fd895c6/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 2e7de6e..1d258d9 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -183,14 +183,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.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/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/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/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/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/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/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/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/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.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/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 e47b643..16582c7 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -273,12 +273,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.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/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/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/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.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/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/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 a6039ad..928ae20 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -349,8 +349,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/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</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/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 bd6fd7e..b8bf0a6 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/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/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/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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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/5fd895c6/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 3d3c7d7..06436b8 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 @@
 <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.<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.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/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/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/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>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 de7b6db..c14674a 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -216,10 +216,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/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/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/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index 7b435d2..4b549da 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -127,8 +127,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.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-summary.html b/devapidocs/org/apache/hadoop/hbase/package-summary.html
index 84822ae..263ecc9 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-summary.html
@@ -277,8 +277,8 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">AuthUtil</a></td>
-<td class="colLast">
-<div class="block">Utility methods for helping with security tasks.</div>
+<td class="colLast">Deprecated
+<div class="block"><span class="deprecationComment">since 2.2.0, to be removed in hbase-3.0.0.</span></div>
 </td>
 </tr>
 <tr class="rowColor">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 c47028c..dda8e9b 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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-use.html b/devapidocs/org/apache/hadoop/hbase/package-use.html
index 7798d7c..aee0a5d 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-use.html
@@ -1074,16 +1074,22 @@ service.</div>
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ChoreService.html#org.apache.hadoop.hbase.client">ChoreService</a>
+<div class="block">ChoreService is a service that can be used to schedule instances of <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><code>ScheduledChore</code></a> to run
+ periodically while sharing threads.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ClusterMetrics.html#org.apache.hadoop.hbase.client">ClusterMetrics</a>
 <div class="block">Metrics information on the HBase cluster.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ClusterMetrics.Option.html#org.apache.hadoop.hbase.client">ClusterMetrics.Option</a>
 <div class="block">Kinds of ClusterMetrics</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ClusterStatus.html#org.apache.hadoop.hbase.client">ClusterStatus</a>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
@@ -1091,32 +1097,32 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/CompareOperator.html#org.apache.hadoop.hbase.client">CompareOperator</a>
 <div class="block">Generic set of comparison operators.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/DoNotRetryIOException.html#org.apache.hadoop.hbase.client">DoNotRetryIOException</a>
 <div class="block">Subclass if exception is not meant to be retried: e.g.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ExtendedCell.html#org.apache.hadoop.hbase.client">ExtendedCell</a>
 <div class="block">Extension to <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> with server side required functions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/HBaseIOException.html#org.apache.hadoop.hbase.client">HBaseIOException</a>
 <div class="block">All hbase specific IOExceptions should be subclasses of HBaseIOException</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/HColumnDescriptor.html#org.apache.hadoop.hbase.client">HColumnDescriptor</a>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/HRegionInfo.html#org.apache.hadoop.hbase.client">HRegionInfo</a>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
@@ -1124,13 +1130,13 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/HRegionLocation.html#org.apache.hadoop.hbase.client">HRegionLocation</a>
 <div class="block">Data structure to hold RegionInfo and the address for the hosting
  HRegionServer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/HTableDescriptor.html#org.apache.hadoop.hbase.client">HTableDescriptor</a>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
@@ -1138,83 +1144,83 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/KeepDeletedCells.html#org.apache.hadoop.hbase.client">KeepDeletedCells</a>
 <div class="block">Ways to keep cells marked for delete around.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/KeyValue.html#org.apache.hadoop.hbase.client">KeyValue</a>
 <div class="block">An HBase Key/Value.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/MasterNotRunningException.html#org.apache.hadoop.hbase.client">MasterNotRunningException</a>
 <div class="block">Thrown if the master is not running</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/MemoryCompactionPolicy.html#org.apache.hadoop.hbase.client">MemoryCompactionPolicy</a>
 <div class="block">Enum describing all possible memory compaction policies</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/NamespaceDescriptor.html#org.apache.hadoop.hbase.client">NamespaceDescriptor</a>
 <div class="block">Namespace POJO class.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/NamespaceNotFoundException.html#org.apache.hadoop.hbase.client">NamespaceNotFoundException</a>
 <div class="block">Thrown when a namespace can not be located</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/RawCell.html#org.apache.hadoop.hbase.client">RawCell</a>
 <div class="block">An extended version of cell that gives more power to CPs</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/RegionException.html#org.apache.hadoop.hbase.client">RegionException</a>
 <div class="block">Thrown when something happens related to region handling.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/RegionLocations.html#org.apache.hadoop.hbase.client">RegionLocations</a>
 <div class="block">Container for holding a list of <a href="../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase"><code>HRegionLocation</code></a>'s that correspond to the
  same range.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/RegionMetrics.html#org.apache.hadoop.hbase.client">RegionMetrics</a>
 <div class="block">Encapsulates per-region load metrics.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ServerName.html#org.apache.hadoop.hbase.client">ServerName</a>
 <div class="block">Name of a particular incarnation of an HBase Server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/TableExistsException.html#org.apache.hadoop.hbase.client">TableExistsException</a>
 <div class="block">Thrown when a table exists but should not</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/TableName.html#org.apache.hadoop.hbase.client">TableName</a>
 <div class="block">Immutable POJO class for representing a table name.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/TableNotFoundException.html#org.apache.hadoop.hbase.client">TableNotFoundException</a>
 <div class="block">Thrown when a table can not be located</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/Tag.html#org.apache.hadoop.hbase.client">Tag</a>
 <div class="block">Tags are part of cells and helps to add metadata about them.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ZooKeeperConnectionException.html#org.apache.hadoop.hbase.client">ZooKeeperConnectionException</a>
 <div class="block">Thrown if the client can't connect to zookeeper</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 da60f3d..1eb6c4b 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/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/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/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/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 819cd2f..8a9d9a1 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/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/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/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/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/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/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/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/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/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 4eb2488..7aa8df7 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -704,20 +704,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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 b377318..858ccf6 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/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/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/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/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index f0c55c8..feee307 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -248,8 +248,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.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
index f8e4b11..3c7146a 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
@@ -160,8 +160,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.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.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeer.PeerState</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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 c20ff47..034077c 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.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>
+<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>
 </ul>
 </li>
 </ul>


[08/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html
index 1ad6fc7..99b6bf2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html
@@ -54,1964 +54,1980 @@
 <span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import org.apache.hadoop.conf.Configuration;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.CallQueueTooBigException;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HConstants;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.ServerName;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.TableNotEnabledException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicy;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicyFactory;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.exceptions.ClientExceptionsUtil;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.exceptions.RegionMovedException;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.ipc.RpcClientFactory;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.security.User;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.ExceptionUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.zookeeper.KeeperException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.slf4j.Logger;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.slf4j.LoggerFactory;<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.com.google.common.base.Throwables;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersRequest;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledRequest;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesRequest;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesRequest;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateRequest;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateResponse;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>/**<a name="line.132"></a>
-<span class="sourceLineNo">133</span> * Main implementation of {@link Connection} and {@link ClusterConnection} interfaces.<a name="line.133"></a>
-<span class="sourceLineNo">134</span> * Encapsulates connection to zookeeper and regionservers.<a name="line.134"></a>
-<span class="sourceLineNo">135</span> */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    value="AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION",<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    justification="Access to the conncurrent hash map is under a lock so should be fine.")<a name="line.138"></a>
-<span class="sourceLineNo">139</span>@InterfaceAudience.Private<a name="line.139"></a>
-<span class="sourceLineNo">140</span>class ConnectionImplementation implements ClusterConnection, Closeable {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  public static final String RETRIES_BY_SERVER_KEY = "hbase.client.retries.by.server";<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private static final Logger LOG = LoggerFactory.getLogger(ConnectionImplementation.class);<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private static final String RESOLVE_HOSTNAME_ON_FAIL_KEY = "hbase.resolve.hostnames.on.failure";<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final boolean hostnamesCanChange;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private final long pause;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private final long pauseForCQTBE;// pause for CallQueueTooBigException, if specified<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private boolean useMetaReplicas;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private final int metaReplicaCallTimeoutScanInMicroSecond;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private final int numTries;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  final int rpcTimeout;<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>   * Global nonceGenerator shared per client.Currently there's no reason to limit its scope.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Once it's set under nonceGeneratorCreateLock, it is never unset or changed.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  private static volatile NonceGenerator nonceGenerator = null;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  /** The nonce generator lock. Only taken when creating Connection, which gets a private copy. */<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  private static final Object nonceGeneratorCreateLock = new Object();<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private final AsyncProcess asyncProcess;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  // single tracker per connection<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  private final ServerStatisticTracker stats;<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  private volatile boolean closed;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  private volatile boolean aborted;<a name="line.167"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.CallQueueTooBigException;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HConstants;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.ServerName;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.TableName;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.TableNotEnabledException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicy;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicyFactory;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.exceptions.ClientExceptionsUtil;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.exceptions.RegionMovedException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.ipc.RpcClientFactory;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.security.User;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.util.ExceptionUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.zookeeper.KeeperException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.slf4j.Logger;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.slf4j.LoggerFactory;<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.common.base.Throwables;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersRequest;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledRequest;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesRequest;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesRequest;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateRequest;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateResponse;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse;<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> * Main implementation of {@link Connection} and {@link ClusterConnection} interfaces.<a name="line.136"></a>
+<span class="sourceLineNo">137</span> * Encapsulates connection to zookeeper and regionservers.<a name="line.137"></a>
+<span class="sourceLineNo">138</span> */<a name="line.138"></a>
+<span class="sourceLineNo">139</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    value="AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION",<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    justification="Access to the conncurrent hash map is under a lock so should be fine.")<a name="line.141"></a>
+<span class="sourceLineNo">142</span>@InterfaceAudience.Private<a name="line.142"></a>
+<span class="sourceLineNo">143</span>class ConnectionImplementation implements ClusterConnection, Closeable {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public static final String RETRIES_BY_SERVER_KEY = "hbase.client.retries.by.server";<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private static final Logger LOG = LoggerFactory.getLogger(ConnectionImplementation.class);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private static final String RESOLVE_HOSTNAME_ON_FAIL_KEY = "hbase.resolve.hostnames.on.failure";<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private final boolean hostnamesCanChange;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private final long pause;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  private final long pauseForCQTBE;// pause for CallQueueTooBigException, if specified<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private boolean useMetaReplicas;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  private final int metaReplicaCallTimeoutScanInMicroSecond;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  private final int numTries;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  final int rpcTimeout;<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>   * Global nonceGenerator shared per client.Currently there's no reason to limit its scope.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * Once it's set under nonceGeneratorCreateLock, it is never unset or changed.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  private static volatile NonceGenerator nonceGenerator = null;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  /** The nonce generator lock. Only taken when creating Connection, which gets a private copy. */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private static final Object nonceGeneratorCreateLock = new Object();<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>  private final AsyncProcess asyncProcess;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  // single tracker per connection<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private final ServerStatisticTracker stats;<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  // package protected for the tests<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  ClusterStatusListener clusterStatusListener;<a name="line.170"></a>
+<span class="sourceLineNo">169</span>  private volatile boolean closed;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  private volatile boolean aborted;<a name="line.170"></a>
 <span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  private final Object metaRegionLock = new Object();<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  private final Object masterLock = new Object();<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  // thread executor shared by all Table instances created<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // by this connection<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  private volatile ExecutorService batchPool = null;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  // meta thread executor shared by all Table instances created<a name="line.179"></a>
+<span class="sourceLineNo">172</span>  // package protected for the tests<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  ClusterStatusListener clusterStatusListener;<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private final Object metaRegionLock = new Object();<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private final Object masterLock = new Object();<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  // thread executor shared by all Table instances created<a name="line.179"></a>
 <span class="sourceLineNo">180</span>  // by this connection<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  private volatile ExecutorService metaLookupPool = null;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  private volatile boolean cleanupPool = false;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  private final Configuration conf;<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  // cache the configuration value for tables so that we can avoid calling<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  // the expensive Configuration to fetch the value multiple times.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  private final ConnectionConfiguration connectionConfig;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  // Client rpc instance.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  private final RpcClient rpcClient;<a name="line.191"></a>
+<span class="sourceLineNo">181</span>  private volatile ExecutorService batchPool = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  // meta thread executor shared by all Table instances created<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  // by this connection<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  private volatile ExecutorService metaLookupPool = null;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private volatile boolean cleanupPool = false;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private final Configuration conf;<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  // cache the configuration value for tables so that we can avoid calling<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  // the expensive Configuration to fetch the value multiple times.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  private final ConnectionConfiguration connectionConfig;<a name="line.191"></a>
 <span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>  private final MetaCache metaCache;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  private final MetricsConnection metrics;<a name="line.194"></a>
+<span class="sourceLineNo">193</span>  // Client rpc instance.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  private final RpcClient rpcClient;<a name="line.194"></a>
 <span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  protected User user;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private final RpcRetryingCallerFactory rpcCallerFactory;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  private final RpcControllerFactory rpcControllerFactory;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private final RetryingCallerInterceptor interceptor;<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>   * Cluster registry of basic info such as clusterid and meta region location.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  private final AsyncRegistry registry;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  private final ClientBackoffPolicy backoffPolicy;<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>   * Allow setting an alternate BufferedMutator implementation via<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * config. If null, use default.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private final String alternateBufferedMutatorClassName;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /** lock guards against multiple threads trying to query the meta region at the same time */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  private final ReentrantLock userRegionLock = new ReentrantLock();<a name="line.218"></a>
+<span class="sourceLineNo">196</span>  private final MetaCache metaCache;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  private final MetricsConnection metrics;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  protected User user;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private final RpcRetryingCallerFactory rpcCallerFactory;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private final RpcControllerFactory rpcControllerFactory;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private final RetryingCallerInterceptor interceptor;<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>   * Cluster registry of basic info such as clusterid and meta region location.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  private final AsyncRegistry registry;<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private final ClientBackoffPolicy backoffPolicy;<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  /**<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * Allow setting an alternate BufferedMutator implementation via<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * config. If null, use default.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  private final String alternateBufferedMutatorClassName;<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>   * constructor<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param conf Configuration object<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   */<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  ConnectionImplementation(Configuration conf,<a name="line.224"></a>
-<span class="sourceLineNo">225</span>                           ExecutorService pool, User user) throws IOException {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    this.conf = conf;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    this.user = user;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    this.batchPool = pool;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    this.connectionConfig = new ConnectionConfiguration(conf);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    this.closed = false;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    this.pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    long configuredPauseForCQTBE = conf.getLong(HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE, pause);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    if (configuredPauseForCQTBE &lt; pause) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      LOG.warn("The " + HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE + " setting: "<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          + configuredPauseForCQTBE + " is smaller than " + HConstants.HBASE_CLIENT_PAUSE<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          + ", will use " + pause + " instead.");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      this.pauseForCQTBE = pause;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    } else {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      this.pauseForCQTBE = configuredPauseForCQTBE;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    this.useMetaReplicas = conf.getBoolean(HConstants.USE_META_REPLICAS,<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      HConstants.DEFAULT_USE_META_REPLICAS);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.metaReplicaCallTimeoutScanInMicroSecond =<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        connectionConfig.getMetaReplicaCallTimeoutMicroSecondScan();<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // how many times to try, one more than max *retry* time<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    this.numTries = retries2Attempts(connectionConfig.getRetriesNumber());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    this.rpcTimeout = conf.getInt(<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    if (conf.getBoolean(NonceGenerator.CLIENT_NONCES_ENABLED_KEY, true)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      synchronized (nonceGeneratorCreateLock) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        if (nonceGenerator == null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          nonceGenerator = PerClientRandomNonceGenerator.get();<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>    } else {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      nonceGenerator = NO_NONCE_GENERATOR;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span><a name="line.261"></a>
-<span class="sourceLineNo">262</span>    this.stats = ServerStatisticTracker.create(conf);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    this.interceptor = (new RetryingCallerInterceptorFactory(conf)).build();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    this.rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf, interceptor, this.stats);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    this.backoffPolicy = ClientBackoffPolicyFactory.create(conf);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    this.asyncProcess = new AsyncProcess(this, conf, rpcCallerFactory, rpcControllerFactory);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    if (conf.getBoolean(CLIENT_SIDE_METRICS_ENABLED_KEY, false)) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      this.metrics = new MetricsConnection(this);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    } else {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.metrics = null;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    this.metaCache = new MetaCache(this.metrics);<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean shouldListen = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    this.hostnamesCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Class&lt;? extends ClusterStatusListener.Listener&gt; listenerClass =<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        conf.getClass(ClusterStatusListener.STATUS_LISTENER_CLASS,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>            ClusterStatusListener.DEFAULT_STATUS_LISTENER_CLASS,<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            ClusterStatusListener.Listener.class);<a name="line.281"></a>
+<span class="sourceLineNo">220</span>  /** lock guards against multiple threads trying to query the meta region at the same time */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  private final ReentrantLock userRegionLock = new ReentrantLock();<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  private ChoreService authService;<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>   * constructor<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param conf Configuration object<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  ConnectionImplementation(Configuration conf,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>                           ExecutorService pool, User user) throws IOException {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    this.conf = conf;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    this.user = user;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    if (user != null &amp;&amp; user.isLoginFromKeytab()) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      spawnRenewalChore(user.getUGI());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    this.batchPool = pool;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    this.connectionConfig = new ConnectionConfiguration(conf);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this.closed = false;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    this.pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    long configuredPauseForCQTBE = conf.getLong(HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE, pause);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    if (configuredPauseForCQTBE &lt; pause) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      LOG.warn("The " + HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE + " setting: "<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          + configuredPauseForCQTBE + " is smaller than " + HConstants.HBASE_CLIENT_PAUSE<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          + ", will use " + pause + " instead.");<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      this.pauseForCQTBE = pause;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    } else {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      this.pauseForCQTBE = configuredPauseForCQTBE;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    this.useMetaReplicas = conf.getBoolean(HConstants.USE_META_REPLICAS,<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      HConstants.DEFAULT_USE_META_REPLICAS);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    this.metaReplicaCallTimeoutScanInMicroSecond =<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        connectionConfig.getMetaReplicaCallTimeoutMicroSecondScan();<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span>    // how many times to try, one more than max *retry* time<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    this.numTries = retries2Attempts(connectionConfig.getRetriesNumber());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    this.rpcTimeout = conf.getInt(<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    if (conf.getBoolean(NonceGenerator.CLIENT_NONCES_ENABLED_KEY, true)) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      synchronized (nonceGeneratorCreateLock) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        if (nonceGenerator == null) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          nonceGenerator = PerClientRandomNonceGenerator.get();<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>    } else {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      nonceGenerator = NO_NONCE_GENERATOR;<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>    this.stats = ServerStatisticTracker.create(conf);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    this.interceptor = (new RetryingCallerInterceptorFactory(conf)).build();<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    this.rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf, interceptor, this.stats);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    this.backoffPolicy = ClientBackoffPolicyFactory.create(conf);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    this.asyncProcess = new AsyncProcess(this, conf, rpcCallerFactory, rpcControllerFactory);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    if (conf.getBoolean(CLIENT_SIDE_METRICS_ENABLED_KEY, false)) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      this.metrics = new MetricsConnection(this);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.metrics = null;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    this.metaCache = new MetaCache(this.metrics);<a name="line.281"></a>
 <span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>    // Is there an alternate BufferedMutator to use?<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    this.alternateBufferedMutatorClassName =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        this.conf.get(BufferedMutator.CLASSNAME_KEY);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>    try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      this.registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      retrieveClusterId();<a name="line.289"></a>
+<span class="sourceLineNo">283</span>    boolean shouldListen = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    this.hostnamesCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    Class&lt;? extends ClusterStatusListener.Listener&gt; listenerClass =<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        conf.getClass(ClusterStatusListener.STATUS_LISTENER_CLASS,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            ClusterStatusListener.DEFAULT_STATUS_LISTENER_CLASS,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            ClusterStatusListener.Listener.class);<a name="line.289"></a>
 <span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>      this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId, this.metrics);<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>      // Do we publish the status?<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      if (shouldListen) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        if (listenerClass == null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.296"></a>
-<span class="sourceLineNo">297</span>              ClusterStatusListener.STATUS_LISTENER_CLASS + " is not set - not listening status");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        } else {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          clusterStatusListener = new ClusterStatusListener(<a name="line.299"></a>
-<span class="sourceLineNo">300</span>              new ClusterStatusListener.DeadServerHandler() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>                @Override<a name="line.301"></a>
-<span class="sourceLineNo">302</span>                public void newDead(ServerName sn) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>                  clearCaches(sn);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>                  rpcClient.cancelConnections(sn);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>                }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>              }, conf, listenerClass);<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>    } catch (Throwable e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // avoid leaks: registry, rpcClient, ...<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      LOG.debug("connection construction failed", e);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      close();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      throw e;<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>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * @param useMetaReplicas<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  @VisibleForTesting<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  void setUseMetaReplicas(final boolean useMetaReplicas) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    this.useMetaReplicas = useMetaReplicas;<a name="line.322"></a>
+<span class="sourceLineNo">291</span>    // Is there an alternate BufferedMutator to use?<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    this.alternateBufferedMutatorClassName =<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        this.conf.get(BufferedMutator.CLASSNAME_KEY);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      this.registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      retrieveClusterId();<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>      this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId, this.metrics);<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>      // Do we publish the status?<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      if (shouldListen) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        if (listenerClass == null) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>          LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.304"></a>
+<span class="sourceLineNo">305</span>              ClusterStatusListener.STATUS_LISTENER_CLASS + " is not set - not listening status");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        } else {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          clusterStatusListener = new ClusterStatusListener(<a name="line.307"></a>
+<span class="sourceLineNo">308</span>              new ClusterStatusListener.DeadServerHandler() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>                @Override<a name="line.309"></a>
+<span class="sourceLineNo">310</span>                public void newDead(ServerName sn) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>                  clearCaches(sn);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>                  rpcClient.cancelConnections(sn);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>                }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>              }, conf, listenerClass);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } catch (Throwable e) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      // avoid leaks: registry, rpcClient, ...<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      LOG.debug("connection construction failed", e);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      close();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw e;<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>   * @param conn The connection for which to replace the generator.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @param cnm Replaces the nonce generator used, for testing.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @return old nonce generator.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   */<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  @VisibleForTesting<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  static NonceGenerator injectNonceGeneratorForTesting(<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      ClusterConnection conn, NonceGenerator cnm) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    ConnectionImplementation connImpl = (ConnectionImplementation)conn;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    NonceGenerator ng = connImpl.getNonceGenerator();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    LOG.warn("Nonce generator is being replaced by test code for "<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      + cnm.getClass().getName());<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    nonceGenerator = cnm;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return ng;<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>  @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public Table getTable(TableName tableName) throws IOException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    return getTable(tableName, getBatchPool());<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>  @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public TableBuilder getTableBuilder(TableName tableName, ExecutorService pool) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return new TableBuilderBase(tableName, connectionConfig) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>      @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      public Table build() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        return new HTable(ConnectionImplementation.this, this, rpcCallerFactory,<a name="line.352"></a>
-<span class="sourceLineNo">353</span>            rpcControllerFactory, pool);<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>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  @Override<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  public BufferedMutator getBufferedMutator(BufferedMutatorParams params) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (params.getTableName() == null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      throw new IllegalArgumentException("TableName cannot be null.");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (params.getPool() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      params.pool(HTable.getDefaultExecutor(getConfiguration()));<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    if (params.getWriteBufferSize() == BufferedMutatorParams.UNSET) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      params.writeBufferSize(connectionConfig.getWriteBufferSize());<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    if (params.getWriteBufferPeriodicFlushTimeoutMs() == BufferedMutatorParams.UNSET) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      params.setWriteBufferPeriodicFlushTimeoutMs(<a name="line.370"></a>
-<span class="sourceLineNo">371</span>              connectionConfig.getWriteBufferPeriodicFlushTimeoutMs());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    if (params.getWriteBufferPeriodicFlushTimerTickMs() == BufferedMutatorParams.UNSET) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      params.setWriteBufferPeriodicFlushTimerTickMs(<a name="line.374"></a>
-<span class="sourceLineNo">375</span>              connectionConfig.getWriteBufferPeriodicFlushTimerTickMs());<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (params.getMaxKeyValueSize() == BufferedMutatorParams.UNSET) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      params.maxKeyValueSize(connectionConfig.getMaxKeyValueSize());<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    // Look to see if an alternate BufferedMutation implementation is wanted.<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    // Look in params and in config. If null, use default.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    String implementationClassName = params.getImplementationClassName();<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (implementationClassName == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      implementationClassName = this.alternateBufferedMutatorClassName;<a name="line.384"></a>
+<span class="sourceLineNo">325</span>  private void spawnRenewalChore(final UserGroupInformation user) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    authService = new ChoreService("Relogin service");<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    authService.scheduleChore(AuthUtil.getAuthRenewalChore(user));<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>   * @param useMetaReplicas<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  @VisibleForTesting<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  void setUseMetaReplicas(final boolean useMetaReplicas) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    this.useMetaReplicas = useMetaReplicas;<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>   * @param conn The connection for which to replace the generator.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * @param cnm Replaces the nonce generator used, for testing.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * @return old nonce generator.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  @VisibleForTesting<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  static NonceGenerator injectNonceGeneratorForTesting(<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      ClusterConnection conn, NonceGenerator cnm) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    ConnectionImplementation connImpl = (ConnectionImplementation)conn;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    NonceGenerator ng = connImpl.getNonceGenerator();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    LOG.warn("Nonce generator is being replaced by test code for "<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      + cnm.getClass().getName());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    nonceGenerator = cnm;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return ng;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  @Override<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  public Table getTable(TableName tableName) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return getTable(tableName, getBatchPool());<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>  @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  public TableBuilder getTableBuilder(TableName tableName, ExecutorService pool) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    return new TableBuilderBase(tableName, connectionConfig) {<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 Table build() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        return new HTable(ConnectionImplementation.this, this, rpcCallerFactory,<a name="line.365"></a>
+<span class="sourceLineNo">366</span>            rpcControllerFactory, pool);<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>  }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>  @Override<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  public BufferedMutator getBufferedMutator(BufferedMutatorParams params) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    if (params.getTableName() == null) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      throw new IllegalArgumentException("TableName cannot be null.");<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    if (params.getPool() == null) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      params.pool(HTable.getDefaultExecutor(getConfiguration()));<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    if (params.getWriteBufferSize() == BufferedMutatorParams.UNSET) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      params.writeBufferSize(connectionConfig.getWriteBufferSize());<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (params.getWriteBufferPeriodicFlushTimeoutMs() == BufferedMutatorParams.UNSET) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      params.setWriteBufferPeriodicFlushTimeoutMs(<a name="line.383"></a>
+<span class="sourceLineNo">384</span>              connectionConfig.getWriteBufferPeriodicFlushTimeoutMs());<a name="line.384"></a>
 <span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    if (implementationClassName == null) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return new BufferedMutatorImpl(this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    try {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      return (BufferedMutator)ReflectionUtils.newInstance(Class.forName(implementationClassName),<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    } catch (ClassNotFoundException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      throw new RuntimeException(e);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public BufferedMutator getBufferedMutator(TableName tableName) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    return getBufferedMutator(new BufferedMutatorParams(tableName));<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>  @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public RegionLocator getRegionLocator(TableName tableName) throws IOException {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    return new HRegionLocator(tableName, this);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>  @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public Admin getAdmin() throws IOException {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return new HBaseAdmin(this);<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 MetricsConnection getConnectionMetrics() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    return this.metrics;<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>  private ExecutorService getBatchPool() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    if (batchPool == null) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      synchronized (this) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        if (batchPool == null) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          int threads = conf.getInt("hbase.hconnection.threads.max", 256);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          this.batchPool = getThreadPool(threads, threads, "-shared", null);<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          this.cleanupPool = true;<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>    return this.batchPool;<a name="line.427"></a>
+<span class="sourceLineNo">386</span>    if (params.getWriteBufferPeriodicFlushTimerTickMs() == BufferedMutatorParams.UNSET) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      params.setWriteBufferPeriodicFlushTimerTickMs(<a name="line.387"></a>
+<span class="sourceLineNo">388</span>              connectionConfig.getWriteBufferPeriodicFlushTimerTickMs());<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    if (params.getMaxKeyValueSize() == BufferedMutatorParams.UNSET) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      params.maxKeyValueSize(connectionConfig.getMaxKeyValueSize());<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    // Look to see if an alternate BufferedMutation implementation is wanted.<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    // Look in params and in config. If null, use default.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    String implementationClassName = params.getImplementationClassName();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    if (implementationClassName == null) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      implementationClassName = this.alternateBufferedMutatorClassName;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    if (implementationClassName == null) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return new BufferedMutatorImpl(this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    try {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      return (BufferedMutator)ReflectionUtils.newInstance(Class.forName(implementationClassName),<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    } catch (ClassNotFoundException e) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      throw new RuntimeException(e);<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>  @Override<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  public BufferedMutator getBufferedMutator(TableName tableName) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    return getBufferedMutator(new BufferedMutatorParams(tableName));<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>  @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  public RegionLocator getRegionLocator(TableName tableName) throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    return new HRegionLocator(tableName, this);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>  @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public Admin getAdmin() throws IOException {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    return new HBaseAdmin(this);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>  @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>  public MetricsConnection getConnectionMetrics() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    return this.metrics;<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>  private ExecutorService getThreadPool(int maxThreads, int coreThreads, String nameHint,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      BlockingQueue&lt;Runnable&gt; passedWorkQueue) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    // shared HTable thread executor not yet initialized<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    if (maxThreads == 0) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      maxThreads = Runtime.getRuntime().availableProcessors() * 8;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    if (coreThreads == 0) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      coreThreads = Runtime.getRuntime().availableProcessors() * 8;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    long keepAliveTime = conf.getLong("hbase.hconnection.threads.keepalivetime", 60);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    BlockingQueue&lt;Runnable&gt; workQueue = passedWorkQueue;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    if (workQueue == null) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      workQueue =<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        new LinkedBlockingQueue&lt;&gt;(maxThreads *<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            conf.getInt(HConstants.HBASE_CLIENT_MAX_TOTAL_TASKS,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>                HConstants.DEFAULT_HBASE_CLIENT_MAX_TOTAL_TASKS));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      coreThreads = maxThreads;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    ThreadPoolExecutor tpe = new ThreadPoolExecutor(<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        coreThreads,<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        maxThreads,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        keepAliveTime,<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        TimeUnit.SECONDS,<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        workQueue,<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        Threads.newDaemonThreadFactory(toString() + nameHint));<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    tpe.allowCoreThreadTimeOut(true);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    return tpe;<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>  private ExecutorService getMetaLookupPool() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    if (this.metaLookupPool == null) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      synchronized (this) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        if (this.metaLookupPool == null) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          //Some of the threads would be used for meta replicas<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          //To start with, threads.max.core threads can hit the meta (including replicas).<a name="line.464"></a>
-<span class="sourceLineNo">465</span>          //After that, requests will get queued up in the passed queue, and only after<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          //the queue is full, a new thread will be started<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          int threads = conf.getInt("hbase.hconnection.meta.lookup.threads.max", 128);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>          this.metaLookupPool = getThreadPool(<a name="line.468"></a>
-<span class="sourceLineNo">469</span>             threads,<a name="line.469"></a>
-<span class="sourceLineNo">470</span>             threads,<a name="line.470"></a>
-<span class="sourceLineNo">471</span>             "-metaLookup-shared-", new LinkedBlockingQueue&lt;&gt;());<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    return this.metaLookupPool;<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>  protected ExecutorService getCurrentMetaLookupPool() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    return metaLookupPool;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>  protected ExecutorService getCurrentBatchPool() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    return batchPool;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  private void shutdownPools() {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    if (this.cleanupPool &amp;&amp; this.batchPool != null &amp;&amp; !this.batchPool.isShutdown()) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      shutdownBatchPool(this.batchPool);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (this.metaLookupPool != null &amp;&amp; !this.metaLookupPool.isShutdown()) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      shutdownBatchPool(this.metaLookupPool);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
+<span class="sourceLineNo">430</span>  private ExecutorService getBatchPool() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    if (batchPool == null) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      synchronized (this) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        if (batchPool == null) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          int threads = conf.getInt("hbase.hconnection.threads.max", 256);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          this.batchPool = getThreadPool(threads, threads, "-shared", null);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          this.cleanupPool = true;<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>    return this.batchPool;<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>  private ExecutorService getThreadPool(int maxThreads, int coreThreads, String nameHint,<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      BlockingQueue&lt;Runnable&gt; passedWorkQueue) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    // shared HTable thread executor not yet i

<TRUNCATED>

[20/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/deprecated-list.html
----------------------------------------------------------------------
diff --git a/devapidocs/deprecated-list.html b/devapidocs/deprecated-list.html
index 7e85c12..b3c72ec 100644
--- a/devapidocs/deprecated-list.html
+++ b/devapidocs/deprecated-list.html
@@ -143,126 +143,131 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colOne"><a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.AuthUtil</a>
+<div class="block"><span class="deprecationComment">since 2.2.0, to be removed in hbase-3.0.0.</span></div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.ClusterStatus</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase"><code>ClusterMetrics</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/coprocessor/CoprocessorServiceBackwardCompatiblity.html" title="class in org.apache.hadoop.hbase.coprocessor">org.apache.hadoop.hbase.coprocessor.CoprocessorServiceBackwardCompatiblity</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/util/Counter.html" title="class in org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util.Counter</a>
 <div class="block"><span class="deprecationComment">use <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic"><code>LongAdder</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/filter/FirstKeyValueMatchingQualifiersFilter.html" title="class in org.apache.hadoop.hbase.filter">org.apache.hadoop.hbase.filter.FirstKeyValueMatchingQualifiersFilter</a>
 <div class="block"><span class="deprecationComment">Deprecated in 2.0. See HBASE-13347</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HColumnDescriptor</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HRegionInfo</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              use <a href="org/apache/hadoop/hbase/client/RegionInfoBuilder.html" title="class in org.apache.hadoop.hbase.client"><code>RegionInfoBuilder</code></a> to build <a href="org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HTableDescriptor</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client"><code>TableDescriptorBuilder</code></a> to build <a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase"><code>HTableDescriptor</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/ImmutableHColumnDescriptor.html" title="class in org.apache.hadoop.hbase.client">org.apache.hadoop.hbase.client.ImmutableHColumnDescriptor</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/ImmutableHRegionInfo.html" title="class in org.apache.hadoop.hbase.client">org.apache.hadoop.hbase.client.ImmutableHRegionInfo</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/ImmutableHTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">org.apache.hadoop.hbase.client.ImmutableHTableDescriptor</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/KeyValue.KVComparator.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.KeyValue.KVComparator</a>
 <div class="block"><span class="deprecationComment">: Use <a href="org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase"><code>CellComparatorImpl</code></a>. Deprecated for hbase 2.0, remove for hbase 3.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/KeyValue.MetaComparator.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.KeyValue.MetaComparator</a>
 <div class="block"><span class="deprecationComment">: <a href="org/apache/hadoop/hbase/CellComparatorImpl.html#META_COMPARATOR"><code>CellComparatorImpl.META_COMPARATOR</code></a> to be used. Deprecated for hbase 2.0, remove for hbase 3.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.mapreduce">org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0. Use
              <a href="org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.tool"><code>LoadIncrementalHFiles</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0. Use
              <a href="org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool"><code>LoadIncrementalHFiles.LoadQueueItem</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/master/procedure/MetaQueue.html" title="class in org.apache.hadoop.hbase.master.procedure">org.apache.hadoop.hbase.master.procedure.MetaQueue</a>
 <div class="block"><span class="deprecationComment">only used for <a href="org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><code>RecoverMetaProcedure</code></a>. Should be removed along with
              <a href="org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><code>RecoverMetaProcedure</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/master/MirroringTableStateManager.html" title="class in org.apache.hadoop.hbase.master">org.apache.hadoop.hbase.master.MirroringTableStateManager</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. To be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure</a>
 <div class="block"><span class="deprecationComment">Do not use any more, leave it here only for compatible. The recovery work will be
              done in <a href="org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><code>ServerCrashProcedure</code></a> directly, and the initial work for meta table
              will be done by <a href="org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><code>InitMetaProcedure</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.RegionLoad</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html" title="class in org.apache.hadoop.hbase.client.replication">org.apache.hadoop.hbase.client.replication.ReplicationAdmin</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client"><code>Admin</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html" title="class in org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.ServerLoad</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase"><code>ServerMetrics</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/UnmodifyableHRegionInfo.html" title="class in org.apache.hadoop.hbase.client">org.apache.hadoop.hbase.client.UnmodifyableHRegionInfo</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/util/ZKDataMigrator.html" title="class in org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util.ZKDataMigrator</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. To be removed in hbase-3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/zookeeper/ZKLeaderManager.html" title="class in org.apache.hadoop.hbase.zookeeper">org.apache.hadoop.hbase.zookeeper.ZKLeaderManager</a>
 <div class="block"><span class="deprecationComment">Not used</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html" title="class in org.apache.hadoop.hbase.zookeeper">org.apache.hadoop.hbase.zookeeper.ZKUtil.NodeAndData</a>
 <div class="block"><span class="deprecationComment">Unused</span></div>
 </td>
@@ -1235,123 +1240,128 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><a href="org/apache/hadoop/hbase/AuthUtil.html#getAuthChore-org.apache.hadoop.conf.Configuration-">org.apache.hadoop.hbase.AuthUtil.getAuthChore(Configuration)</a>
+<div class="block"><span class="deprecationComment">Deprecated since 2.2.0, this method will be internal use only after 3.0.0.</span></div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/security/visibility/VisibilityClient.html#getAuths-org.apache.hadoop.conf.Configuration-java.lang.String-">org.apache.hadoop.hbase.security.visibility.VisibilityClient.getAuths(Configuration, String)</a>
 <div class="block"><span class="deprecationComment">Use <a href="org/apache/hadoop/hbase/security/visibility/VisibilityClient.html#getAuths-org.apache.hadoop.hbase.client.Connection-java.lang.String-"><code>VisibilityClient.getAuths(Connection,String)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getBackupMasters--">org.apache.hadoop.hbase.ClusterStatus.getBackupMasters()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getBackupMasterNames--"><code>ClusterStatus.getBackupMasterNames()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getBackupMastersSize--">org.apache.hadoop.hbase.ClusterStatus.getBackupMastersSize()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getBackupMasterNames--"><code>ClusterStatus.getBackupMasterNames()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ipc/CallRunner.html#getCall--">org.apache.hadoop.hbase.ipc.CallRunner.getCall()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0, this will be removed in HBase 3.0</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getCellKeySerializedAsKeyValueKey-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.getCellKeySerializedAsKeyValueKey(Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html#getChildDataAndWatchForNewChildren-org.apache.hadoop.hbase.zookeeper.ZKWatcher-java.lang.String-">org.apache.hadoop.hbase.zookeeper.ZKUtil.getChildDataAndWatchForNewChildren(ZKWatcher, String)</a>
 <div class="block"><span class="deprecationComment">Unused</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getClusterStatus--">org.apache.hadoop.hbase.client.Admin.getClusterStatus()</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Admin.html#getClusterMetrics--"><code>Admin.getClusterMetrics()</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamilies--">org.apache.hadoop.hbase.HTableDescriptor.getColumnFamilies()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HColumnDescriptor.html#getCompactionCompression--">org.apache.hadoop.hbase.HColumnDescriptor.getCompactionCompression()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              (<a href="https://issues.apache.org/jira/browse/HBASE-13655">HBASE-13655</a>).
              Use <a href="org/apache/hadoop/hbase/HColumnDescriptor.html#getCompactionCompressionType--"><code>HColumnDescriptor.getCompactionCompressionType()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getComparator--">org.apache.hadoop.hbase.HRegionInfo.getComparator()</a>
 <div class="block"><span class="deprecationComment">Use Region#getCellComparator().  deprecated for hbase 2.0, remove for hbase 3.0</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getCompleteSequenceId--">org.apache.hadoop.hbase.RegionLoad.getCompleteSequenceId()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getCompletedSequenceId--"><code>RegionLoad.getCompletedSequenceId()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HColumnDescriptor.html#getCompression--">org.apache.hadoop.hbase.HColumnDescriptor.getCompression()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              (<a href="https://issues.apache.org/jira/browse/HBASE-13655">HBASE-13655</a>).
              Use <a href="org/apache/hadoop/hbase/HColumnDescriptor.html#getCompressionType--"><code>HColumnDescriptor.getCompressionType()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getCpRequestsCount--">org.apache.hadoop.hbase.ServerLoad.getCpRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getCurrentCompactedKVs--">org.apache.hadoop.hbase.ServerLoad.getCurrentCompactedKVs()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getCurrentCompactedKVs--">org.apache.hadoop.hbase.RegionLoad.getCurrentCompactedKVs()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getCompactedCellCount--"><code>RegionLoad.getCompactedCellCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getDeadServers--">org.apache.hadoop.hbase.ClusterStatus.getDeadServers()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              (<a href="https://issues.apache.org/jira/browse/HBASE-13656">HBASE-13656</a>).
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getDeadServerNames--"><code>ClusterStatus.getDeadServerNames()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getDeadServersSize--">org.apache.hadoop.hbase.ClusterStatus.getDeadServersSize()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getDeadServerNames--"><code>ClusterStatus.getDeadServerNames()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getDescriptiveNameFromRegionStateForDisplay-org.apache.hadoop.hbase.master.RegionState-org.apache.hadoop.conf.Configuration-">org.apache.hadoop.hbase.HRegionInfo.getDescriptiveNameFromRegionStateForDisplay(RegionState, Configuration)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use RegionInfoDisplay#getDescriptiveNameFromRegionStateForDisplay(RegionState, Configuration)
              over in hbase-server module.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/wal/WAL.html#getEarliestMemStoreSeqNum-byte:A-">org.apache.hadoop.hbase.wal.WAL.getEarliestMemStoreSeqNum(byte[])</a>
 <div class="block"><span class="deprecationComment">Since version 1.2.0. Removing because not used and exposes subtle internal
  workings. Use <a href="org/apache/hadoop/hbase/wal/WAL.html#getEarliestMemStoreSeqNum-byte:A-byte:A-"><code>WAL.getEarliestMemStoreSeqNum(byte[], byte[])</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getEndKeyForDisplay-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.conf.Configuration-">org.apache.hadoop.hbase.HRegionInfo.getEndKeyForDisplay(HRegionInfo, Configuration)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use RegionInfoDisplay#getEndKeyForDisplay(RegionInfo, Configuration)
              over in hbase-server module.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/master/MasterWalManager.html#getFailedServersFromLogFolders--">org.apache.hadoop.hbase.master.MasterWalManager.getFailedServersFromLogFolders()</a>
 <div class="block"><span class="deprecationComment">With proc-v2, we can record the crash server with procedure store, so do not need
              to scan the wal directory to find out the splitting wal directory any more. Leave
@@ -1359,1576 +1369,1576 @@
              it.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getFamilies--">org.apache.hadoop.hbase.HTableDescriptor.getFamilies()</a>
 <div class="block"><span class="deprecationComment">Use <a href="org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamilies--"><code>HTableDescriptor.getColumnFamilies()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getFamiliesKeys--">org.apache.hadoop.hbase.HTableDescriptor.getFamiliesKeys()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              (<a href="https://issues.apache.org/jira/browse/HBASE-18008">HBASE-18008</a>).
              Use <a href="org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamilyNames--"><code>HTableDescriptor.getColumnFamilyNames()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getFamily-byte:A-">org.apache.hadoop.hbase.HTableDescriptor.getFamily(byte[])</a>
 <div class="block"><span class="deprecationComment">Use <a href="org/apache/hadoop/hbase/HTableDescriptor.html#getColumnFamily-byte:A-"><code>HTableDescriptor.getColumnFamily(byte[])</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getFilteredReadRequestsCount--">org.apache.hadoop.hbase.ServerLoad.getFilteredReadRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getFilteredReadRequestsCount--">org.apache.hadoop.hbase.RegionLoad.getFilteredReadRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getFilteredReadRequestCount--"><code>RegionLoad.getFilteredReadRequestCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getFlushPressure--">org.apache.hadoop.hbase.regionserver.RegionServerServices.getFlushPressure()</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html#getHBase1CompatibleName-java.lang.String-">org.apache.hadoop.hbase.io.hfile.FixedFileTrailer.getHBase1CompatibleName(String)</a>
 <div class="block"><span class="deprecationComment">Since hbase-2.0.0. Will be removed in hbase-3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerName.html#getHostAndPort--">org.apache.hadoop.hbase.ServerName.getHostAndPort()</a>
 <div class="block"><span class="deprecationComment">Since 2.0. Use <a href="org/apache/hadoop/hbase/ServerName.html#getAddress--"><code>ServerName.getAddress()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerName.html#getHostNameMinusDomain-java.lang.String-">org.apache.hadoop.hbase.ServerName.getHostNameMinusDomain(String)</a>
 <div class="block"><span class="deprecationComment">Since 2.0. This is for internal use only.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.TableInfo.html#getHTableDescriptor--">org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.TableInfo.getHTableDescriptor()</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.TableInfo.html#getTableDescriptor--"><code>HFileOutputFormat2.TableInfo.getTableDescriptor()</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/HBaseAdmin.html#getHTableDescriptor-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.client.RpcRetryingCallerFactory-org.apache.hadoop.hbase.ipc.RpcControllerFactory-int-int-">org.apache.hadoop.hbase.client.HBaseAdmin.getHTableDescriptor(TableName, Connection, RpcRetryingCallerFactory, RpcControllerFactory, int, int)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableDescriptor-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.client.RpcRetryingCallerFactory-org.apache.hadoop.hbase.ipc.RpcControllerFactory-int-int-"><code>HBaseAdmin.getTableDescriptor(TableName,
              Connection, RpcRetryingCallerFactory,RpcControllerFactory,int,int)</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/io/hfile/HFileScanner.html#getKeyString--">org.apache.hadoop.hbase.io.hfile.HFileScanner.getKeyString()</a>
 <div class="block"><span class="deprecationComment">Since hbase-2.0.0</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getLastMajorCompactionTs--">org.apache.hadoop.hbase.RegionLoad.getLastMajorCompactionTs()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getLastMajorCompactionTimestamp--"><code>RegionLoad.getLastMajorCompactionTimestamp()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getLastMajorCompactionTsForRegion-byte:A-">org.apache.hadoop.hbase.ClusterStatus.getLastMajorCompactionTsForRegion(byte[])</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterMetrics.html#getLastMajorCompactionTimestamp-byte:A-"><code>ClusterMetrics.getLastMajorCompactionTimestamp(byte[])</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getLastMajorCompactionTsForTable-org.apache.hadoop.hbase.TableName-">org.apache.hadoop.hbase.ClusterStatus.getLastMajorCompactionTsForTable(TableName)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterMetrics.html#getLastMajorCompactionTimestamp-org.apache.hadoop.hbase.TableName-"><code>ClusterMetrics.getLastMajorCompactionTimestamp(TableName)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getLoad--">org.apache.hadoop.hbase.ServerLoad.getLoad()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getNumberOfRegions--"><code>ServerLoad.getNumberOfRegions()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getLoad-org.apache.hadoop.hbase.ServerName-">org.apache.hadoop.hbase.ClusterStatus.getLoad(ServerName)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getLiveServerMetrics--"><code>ClusterStatus.getLiveServerMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/wal/WALKeyImpl.html#getLogSeqNum--">org.apache.hadoop.hbase.wal.WALKeyImpl.getLogSeqNum()</a>
 <div class="block"><span class="deprecationComment">Use <a href="org/apache/hadoop/hbase/wal/WALKeyImpl.html#getSequenceId--"><code>WALKeyImpl.getSequenceId()</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getMaster--">org.apache.hadoop.hbase.ClusterStatus.getMaster()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getMasterName--"><code>ClusterStatus.getMasterName()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getMasterCoprocessors--">org.apache.hadoop.hbase.client.Admin.getMasterCoprocessors()</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Admin.html#getMasterCoprocessorNames--"><code>Admin.getMasterCoprocessorNames()</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getMasterCoprocessors--">org.apache.hadoop.hbase.ClusterStatus.getMasterCoprocessors()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getMasterCoprocessorNames--"><code>ClusterStatus.getMasterCoprocessorNames()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getMaxHeapMB--">org.apache.hadoop.hbase.ServerLoad.getMaxHeapMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getMaxHeapSize--"><code>ServerLoad.getMaxHeapSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/RegionLoadStats.html#getMemstoreLoad--">org.apache.hadoop.hbase.client.RegionLoadStats.getMemstoreLoad()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/client/RegionLoadStats.html#getMemStoreLoad--"><code>RegionLoadStats.getMemStoreLoad()</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getMemstoreSizeInMB--">org.apache.hadoop.hbase.ServerLoad.getMemstoreSizeInMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getMemStoreSizeMB--">org.apache.hadoop.hbase.ServerLoad.getMemStoreSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getMemStoreSizeMB--">org.apache.hadoop.hbase.RegionLoad.getMemStoreSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getMemStoreSize--"><code>RegionLoad.getMemStoreSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/master/procedure/SchemaLocking.html#getMetaLock--">org.apache.hadoop.hbase.master.procedure.SchemaLocking.getMetaLock()</a>
 <div class="block"><span class="deprecationComment">only used for <a href="org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><code>RecoverMetaProcedure</code></a>. Should be removed along with
              <a href="org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><code>RecoverMetaProcedure</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/regionserver/StoreFile.html#getModificationTimeStamp--">org.apache.hadoop.hbase.regionserver.StoreFile.getModificationTimeStamp()</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. Will be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getName--">org.apache.hadoop.hbase.RegionLoad.getName()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getRegionName--"><code>RegionLoad.getRegionName()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getNumberOfRegions--">org.apache.hadoop.hbase.ServerLoad.getNumberOfRegions()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getNumberOfRequests--">org.apache.hadoop.hbase.ServerLoad.getNumberOfRequests()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRequestCountPerSecond--"><code>ServerLoad.getRequestCountPerSecond()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getOnlineRegions-org.apache.hadoop.hbase.ServerName-">org.apache.hadoop.hbase.client.Admin.getOnlineRegions(ServerName)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              (<a href="https://issues.apache.org/jira/browse/HBASE-17980">HBASE-17980</a>).
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#getRegions-org.apache.hadoop.hbase.ServerName-"><code>Admin.getRegions(ServerName sn)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/HBaseAdmin.html#getOnlineRegions-org.apache.hadoop.hbase.ServerName-">org.apache.hadoop.hbase.client.HBaseAdmin.getOnlineRegions(ServerName)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/HBaseAdmin.html#getRegions-org.apache.hadoop.hbase.ServerName-"><code>HBaseAdmin.getRegions(ServerName)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Table.html#getOperationTimeout--">org.apache.hadoop.hbase.client.Table.getOperationTimeout()</a>
 <div class="block"><span class="deprecationComment">since 2.0 and will be removed in 3.0 version
              use <a href="org/apache/hadoop/hbase/client/Table.html#getOperationTimeout-java.util.concurrent.TimeUnit-"><code>Table.getOperationTimeout(TimeUnit)</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/HTable.html#getOperationTimeout--">org.apache.hadoop.hbase.client.HTable.getOperationTimeout()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.html#getOperationTimeout--">org.apache.hadoop.hbase.rest.client.RemoteHTable.getOperationTimeout()</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/filter/SingleColumnValueFilter.html#getOperator--">org.apache.hadoop.hbase.filter.SingleColumnValueFilter.getOperator()</a>
 <div class="block"><span class="deprecationComment">since 2.0.0. Will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/filter/SingleColumnValueFilter.html#getCompareOperator--"><code>SingleColumnValueFilter.getCompareOperator()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/filter/CompareFilter.html#getOperator--">org.apache.hadoop.hbase.filter.CompareFilter.getOperator()</a>
 <div class="block"><span class="deprecationComment">since 2.0.0. Will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/filter/CompareFilter.html#getCompareOperator--"><code>CompareFilter.getCompareOperator()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/TableDescriptor.html#getOwnerString--">org.apache.hadoop.hbase.client.TableDescriptor.getOwnerString()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#getOwnerString--">org.apache.hadoop.hbase.client.TableDescriptorBuilder.ModifyableTableDescriptor.getOwnerString()</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#getOwnerString--">org.apache.hadoop.hbase.HTableDescriptor.getOwnerString()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#getPeerConfig-java.lang.String-">org.apache.hadoop.hbase.client.replication.ReplicationAdmin.getPeerConfig(String)</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Admin.html#getReplicationPeerConfig-java.lang.String-"><code>Admin.getReplicationPeerConfig(String)</code></a>
              instead</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#getPeersCount--">org.apache.hadoop.hbase.client.replication.ReplicationAdmin.getPeersCount()</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#getPeerState-java.lang.String-">org.apache.hadoop.hbase.client.replication.ReplicationAdmin.getPeerState(String)</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#getPeerTableCFs-java.lang.String-">org.apache.hadoop.hbase.client.replication.ReplicationAdmin.getPeerTableCFs(String)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0,
  use <a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#getPeerConfig-java.lang.String-"><code>ReplicationAdmin.getPeerConfig(String)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/http/HttpServer.html#getPort--">org.apache.hadoop.hbase.http.HttpServer.getPort()</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/http/InfoServer.html#getPort--">org.apache.hadoop.hbase.http.InfoServer.getPort()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getQualifierBufferShallowCopy-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.getQualifierBufferShallowCopy(Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getQuotaRetriever-org.apache.hadoop.hbase.quotas.QuotaFilter-">org.apache.hadoop.hbase.client.Admin.getQuotaRetriever(QuotaFilter)</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. Will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/client/Admin.html#getQuota-org.apache.hadoop.hbase.quotas.QuotaFilter-"><code>Admin.getQuota(QuotaFilter)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getReadRequestsCount--">org.apache.hadoop.hbase.ServerLoad.getReadRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getReadRequestsCount--">org.apache.hadoop.hbase.RegionLoad.getReadRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getReadRequestCount--"><code>RegionLoad.getReadRequestCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Table.html#getReadRpcTimeout--">org.apache.hadoop.hbase.client.Table.getReadRpcTimeout()</a>
 <div class="block"><span class="deprecationComment">since 2.0 and will be removed in 3.0 version
              use <a href="org/apache/hadoop/hbase/client/Table.html#getReadRpcTimeout-java.util.concurrent.TimeUnit-"><code>Table.getReadRpcTimeout(TimeUnit)</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/HTable.html#getReadRpcTimeout--">org.apache.hadoop.hbase.client.HTable.getReadRpcTimeout()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.html#getReadRpcTimeout--">org.apache.hadoop.hbase.rest.client.RemoteHTable.getReadRpcTimeout()</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/MetaTableAccessor.html#getRegion-org.apache.hadoop.hbase.client.Connection-byte:A-">org.apache.hadoop.hbase.MetaTableAccessor.getRegion(Connection, byte[])</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/MetaTableAccessor.html#getRegionLocation-org.apache.hadoop.hbase.client.Connection-byte:A-"><code>MetaTableAccessor.getRegionLocation(Connection, byte[])</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/regionserver/HRegion.html#getRegionDir-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.client.RegionInfo-">org.apache.hadoop.hbase.regionserver.HRegion.getRegionDir(Path, RegionInfo)</a>
 <div class="block"><span class="deprecationComment">For tests only; to be removed.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/regionserver/HRegion.html#getRegionDir-org.apache.hadoop.fs.Path-java.lang.String-">org.apache.hadoop.hbase.regionserver.HRegion.getRegionDir(Path, String)</a>
 <div class="block"><span class="deprecationComment">For tests only; to be removed.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionLocation.html#getRegionInfo--">org.apache.hadoop.hbase.HRegionLocation.getRegionInfo()</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. Will remove in 3.0.0. Use <a href="org/apache/hadoop/hbase/HRegionLocation.html#getRegion--"><code>HRegionLocation.getRegion()</code></a>} instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormat.TableSnapshotRegionSplit.html#getRegionInfo--">org.apache.hadoop.hbase.mapreduce.TableSnapshotInputFormat.TableSnapshotRegionSplit.getRegionInfo()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormat.TableSnapshotRegionSplit.html#getRegion--"><code>TableSnapshotInputFormat.TableSnapshotRegionSplit.getRegion()</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getRegionNameAsStringForDisplay-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.conf.Configuration-">org.apache.hadoop.hbase.HRegionInfo.getRegionNameAsStringForDisplay(HRegionInfo, Configuration)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use RegionInfoDisplay#getRegionNameAsStringForDisplay(RegionInfo, Configuration)
              over in hbase-server module.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getRegionNameForDisplay-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.conf.Configuration-">org.apache.hadoop.hbase.HRegionInfo.getRegionNameForDisplay(HRegionInfo, Configuration)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use RegionInfoDisplay#getRegionNameForDisplay(RegionInfo, Configuration)
              over in hbase-server module.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getRegionsCount--">org.apache.hadoop.hbase.ClusterStatus.getRegionsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterMetrics.html#getRegionCount--"><code>ClusterMetrics.getRegionCount()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionServerCoprocessors--">org.apache.hadoop.hbase.ServerLoad.getRegionServerCoprocessors()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getCoprocessorNames--"><code>ServerLoad.getCoprocessorNames()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionsLoad--">org.apache.hadoop.hbase.ServerLoad.getRegionsLoad()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getReportTime--">org.apache.hadoop.hbase.ServerLoad.getReportTime()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getReportTimestamp--"><code>ServerLoad.getReportTimestamp()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getRequestsCount--">org.apache.hadoop.hbase.RegionLoad.getRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionMetrics.html#getRequestCount--"><code>RegionMetrics.getRequestCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getRequestsCount--">org.apache.hadoop.hbase.ClusterStatus.getRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterMetrics.html#getRequestCount--"><code>ClusterMetrics.getRequestCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getRequestsPerSecond--">org.apache.hadoop.hbase.ServerLoad.getRequestsPerSecond()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRequestCountPerSecond--"><code>ServerLoad.getRequestCountPerSecond()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getRootIndexSizeKB--">org.apache.hadoop.hbase.ServerLoad.getRootIndexSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getRootIndexSizeKB--">org.apache.hadoop.hbase.RegionLoad.getRootIndexSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreFileRootLevelIndexSize--"><code>RegionLoad.getStoreFileRootLevelIndexSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getRowByte-org.apache.hadoop.hbase.Cell-int-">org.apache.hadoop.hbase.CellUtil.getRowByte(Cell, int)</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Table.html#getRpcTimeout--">org.apache.hadoop.hbase.client.Table.getRpcTimeout()</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Table.html#getReadRpcTimeout-java.util.concurrent.TimeUnit-"><code>Table.getReadRpcTimeout(TimeUnit)</code></a> or
              <a href="org/apache/hadoop/hbase/client/Table.html#getWriteRpcTimeout-java.util.concurrent.TimeUnit-"><code>Table.getWriteRpcTimeout(TimeUnit)</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/HTable.html#getRpcTimeout--">org.apache.hadoop.hbase.client.HTable.getRpcTimeout()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.html#getRpcTimeout--">org.apache.hadoop.hbase.rest.client.RemoteHTable.getRpcTimeout()</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getRsCoprocessors--">org.apache.hadoop.hbase.ServerLoad.getRsCoprocessors()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getCoprocessorNames--"><code>ServerLoad.getCoprocessorNames()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/MetaTableAccessor.html#getScanForTableName-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.TableName-">org.apache.hadoop.hbase.MetaTableAccessor.getScanForTableName(Connection, TableName)</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#getScanMetrics--">org.apache.hadoop.hbase.client.Scan.getScanMetrics()</a>
 <div class="block"><span class="deprecationComment">Use <a href="org/apache/hadoop/hbase/client/ResultScanner.html#getScanMetrics--"><code>ResultScanner.getScanMetrics()</code></a> instead. And notice that, please do not
              use this method and <a href="org/apache/hadoop/hbase/client/ResultScanner.html#getScanMetrics--"><code>ResultScanner.getScanMetrics()</code></a> together, the metrics
              will be messed up.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/regionserver/StoreFileReader.html#getScanner-boolean-boolean-">org.apache.hadoop.hbase.regionserver.StoreFileReader.getScanner(boolean, boolean)</a>
 <div class="block"><span class="deprecationComment">Do not write further code which depends on this call. Instead
    use getStoreFileScanner() which uses the StoreFileScanner class/interface
    which is the preferred way to scan a store with higher level concepts.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/regionserver/StoreFileReader.html#getScanner-boolean-boolean-boolean-">org.apache.hadoop.hbase.regionserver.StoreFileReader.getScanner(boolean, boolean, boolean)</a>
 <div class="block"><span class="deprecationComment">Do not write further code which depends on this call. Instead
    use getStoreFileScanner() which uses the StoreFileScanner class/interface
    which is the preferred way to scan a store with higher level concepts.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/Cell.html#getSequenceId--">org.apache.hadoop.hbase.Cell.getSequenceId()</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerName.html#getServerName-java.lang.String-int-long-">org.apache.hadoop.hbase.ServerName.getServerName(String, int, long)</a>
 <div class="block"><span class="deprecationComment">Since 2.0. Use <a href="org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-int-long-"><code>ServerName.valueOf(String, int, long)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerName.html#getServerName-java.lang.String-long-">org.apache.hadoop.hbase.ServerName.getServerName(String, long)</a>
 <div class="block"><span class="deprecationComment">Since 2.0. Use <a href="org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-long-"><code>ServerName.valueOf(String, long)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerName.html#getServerNameLessStartCode-java.lang.String-">org.apache.hadoop.hbase.ServerName.getServerNameLessStartCode(String)</a>
 <div class="block"><span class="deprecationComment">Since 2.0. Use <a href="org/apache/hadoop/hbase/ServerName.html#getAddress--"><code>ServerName.getAddress()</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getServers--">org.apache.hadoop.hbase.ClusterStatus.getServers()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getLiveServerMetrics--"><code>ClusterStatus.getLiveServerMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getServersSize--">org.apache.hadoop.hbase.ClusterStatus.getServersSize()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ClusterStatus.html#getLiveServerMetrics--"><code>ClusterStatus.getLiveServerMetrics()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerName.html#getServerStartcodeFromServerName-java.lang.String-">org.apache.hadoop.hbase.ServerName.getServerStartcodeFromServerName(String)</a>
 <div class="block"><span class="deprecationComment">Since 2.0. Use instance of ServerName to pull out start code.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/KeyValue.KVComparator.html#getShortMidpointKey-byte:A-byte:A-">org.apache.hadoop.hbase.KeyValue.KVComparator.getShortMidpointKey(byte[], byte[])</a>
 <div class="block"><span class="deprecationComment">Since 0.99.2;</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getShortNameToLog-org.apache.hadoop.hbase.HRegionInfo...-">org.apache.hadoop.hbase.HRegionInfo.getShortNameToLog(HRegionInfo...)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#getShortNameToLog-org.apache.hadoop.hbase.client.RegionInfo...-"><code>RegionInfo.getShortNameToLog(RegionInfo...)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getShortNameToLog-java.util.List-">org.apache.hadoop.hbase.HRegionInfo.getShortNameToLog(List&lt;HRegionInfo&gt;)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#getShortNameToLog-java.util.List-"><code>RegionInfo.getShortNameToLog(List)</code></a>)}.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/util/Bytes.html#getSize--">org.apache.hadoop.hbase.util.Bytes.getSize()</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/util/Bytes.html#getLength--"><code>Bytes.getLength()</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/io/ImmutableBytesWritable.html#getSize--">org.apache.hadoop.hbase.io.ImmutableBytesWritable.getSize()</a>
 <div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/io/ImmutableBytesWritable.html#getLength--"><code>ImmutableBytesWritable.getLength()</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getStartKey-byte:A-">org.apache.hadoop.hbase.HRegionInfo.getStartKey(byte[])</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#getStartKey-byte:A-"><code>RegionInfo.getStartKey(byte[])</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getStartKeyForDisplay-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.conf.Configuration-">org.apache.hadoop.hbase.HRegionInfo.getStartKeyForDisplay(HRegionInfo, Configuration)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use RegionInfoDisplay#getStartKeyForDisplay(RegionInfo, Configuration)
              over in hbase-server module.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreCompleteSequenceId--">org.apache.hadoop.hbase.RegionLoad.getStoreCompleteSequenceId()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreSequenceId--"><code>RegionLoad.getStoreSequenceId()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStorefileIndexSizeInMB--">org.apache.hadoop.hbase.ServerLoad.getStorefileIndexSizeInMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStorefileIndexSizeKB--">org.apache.hadoop.hbase.ServerLoad.getStorefileIndexSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStorefileIndexSizeKB--">org.apache.hadoop.hbase.RegionLoad.getStorefileIndexSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreFileRootLevelIndexSize--"><code>RegionLoad.getStoreFileRootLevelIndexSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStorefileIndexSizeMB--">org.apache.hadoop.hbase.RegionLoad.getStorefileIndexSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              ((<a href="https://issues.apache.org/jira/browse/HBASE-3935">HBASE-3935</a>)).
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreFileRootLevelIndexSize--"><code>RegionLoad.getStoreFileRootLevelIndexSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStorefiles--">org.apache.hadoop.hbase.ServerLoad.getStorefiles()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStorefiles--">org.apache.hadoop.hbase.RegionLoad.getStorefiles()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreFileCount--"><code>RegionLoad.getStoreFileCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStorefileSizeInMB--">org.apache.hadoop.hbase.ServerLoad.getStorefileSizeInMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStorefileSizeMB--">org.apache.hadoop.hbase.ServerLoad.getStorefileSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStorefileSizeMB--">org.apache.hadoop.hbase.RegionLoad.getStorefileSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreFileSize--"><code>RegionLoad.getStoreFileSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.client.RegionInfo-byte:A-">org.apache.hadoop.hbase.regionserver.HStore.getStoreHomedir(Path, RegionInfo, byte[])</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir-org.apache.hadoop.fs.Path-java.lang.String-byte:A-">org.apache.hadoop.hbase.regionserver.HStore.getStoreHomedir(Path, String, byte[])</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStores--">org.apache.hadoop.hbase.ServerLoad.getStores()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStores--">org.apache.hadoop.hbase.RegionLoad.getStores()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreCount--"><code>RegionLoad.getStoreCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getStoreUncompressedSizeMB--">org.apache.hadoop.hbase.ServerLoad.getStoreUncompressedSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreUncompressedSizeMB--">org.apache.hadoop.hbase.RegionLoad.getStoreUncompressedSizeMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getUncompressedStoreFileSize--"><code>RegionLoad.getUncompressedStoreFileSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/SnapshotDescription.html#getTable--">org.apache.hadoop.hbase.client.SnapshotDescription.getTable()</a>
 <div class="block"><span class="deprecationComment">Use getTableName() or getTableNameAsString() instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/HRegionInfo.html#getTable-byte:A-">org.apache.hadoop.hbase.HRegionInfo.getTable(byte[])</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#getTable-byte:A-"><code>RegionInfo.getTable(byte[])</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Table.html#getTableDescriptor--">org.apache.hadoop.hbase.client.Table.getTableDescriptor()</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Table.html#getDescriptor--"><code>Table.getDescriptor()</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/HTable.html#getTableDescriptor--">org.apache.hadoop.hbase.client.HTable.getTableDescriptor()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.html#getTableDescriptor--">org.apache.hadoop.hbase.rest.client.RemoteHTable.getTableDescriptor()</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getTableDescriptor-org.apache.hadoop.hbase.TableName-">org.apache.hadoop.hbase.client.Admin.getTableDescriptor(TableName)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#getDescriptor-org.apache.hadoop.hbase.TableName-"><code>Admin.getDescriptor(TableName)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getTableDescriptors-java.util.List-">org.apache.hadoop.hbase.client.Admin.getTableDescriptors(List&lt;String&gt;)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.List-"><code>Admin.listTableDescriptors(List)</code></a></span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getTableDescriptorsByTableName-java.util.List-">org.apache.hadoop.hbase.client.Admin.getTableDescriptorsByTableName(List&lt;TableName&gt;)</a>
 <div class="block"><span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="org/apache/hadoop/hbase/client/Admin.html#listTableDescriptors-java.util.List-"><code>Admin.listTableDescriptors(List)</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Admin.html#getTableRegions-org.apache.hadoop.hbase.TableName-">org.apache.hadoop.hbase.client.Admin.getTableRegions(TableName)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              (<a href="https://issues.apache.org/jira/browse/HBASE-17980">HBASE-17980</a>).
              Use <a href="org/apache/hadoop/hbase/client/Admin.html#getRegions-org.apache.hadoop.hbase.TableName-"><code>Admin.getRegions(TableName)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableRegions-org.apache.hadoop.hbase.TableName-">org.apache.hadoop.hbase.client.HBaseAdmin.getTableRegions(TableName)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/client/HBaseAdmin.html#getRegions-org.apache.hadoop.hbase.TableName-"><code>HBaseAdmin.getRegions(TableName)</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/util/ZKDataMigrator.html#getTableState-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.hbase.TableName-">org.apache.hadoop.hbase.util.ZKDataMigrator.getTableState(ZKWatcher, TableName)</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. To be removed in hbase-3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getTag-org.apache.hadoop.hbase.Cell-byte-">org.apache.hadoop.hbase.CellUtil.getTag(Cell, byte)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/RawCell.html#getTag-byte-"><code>RawCell.getTag(byte)</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getTagArray-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.getTagArray(Cell)</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getTags-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.getTags(Cell)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/RawCell.html#getTags--"><code>RawCell.getTags()</code></a></span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/Cell.html#getTagsArray--">org.apache.hadoop.hbase.Cell.getTagsArray()</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0. Tags are are now internal.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/Cell.html#getTagsLength--">org.apache.hadoop.hbase.Cell.getTagsLength()</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0. Tags are are now internal.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/Cell.html#getTagsOffset--">org.apache.hadoop.hbase.Cell.getTagsOffset()</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0. Tags are are now internal.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Mutation.html#getTimeStamp--">org.apache.hadoop.hbase.client.Mutation.getTimeStamp()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/client/Mutation.html#getTimestamp--"><code>Mutation.getTimestamp()</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html#getTimeStampOfLastAppliedOp--">org.apache.hadoop.hbase.replication.regionserver.MetricsSink.getTimeStampOfLastAppliedOp()</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. Will be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationLoadSource.html#getTimeStampOfLastShippedOp--">org.apache.hadoop.hbase.replication.ReplicationLoadSource.getTimeStampOfLastShippedOp()</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. Will be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#getTimeStampOfLastShippedOp--">org.apache.hadoop.hbase.replication.regionserver.MetricsSource.getTimeStampOfLastShippedOp()</a>
 <div class="block"><span class="deprecationComment">Since 2.0.0. Removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationLoadSink.html#getTimeStampsOfLastAppliedOp--">org.apache.hadoop.hbase.replication.ReplicationLoadSink.getTimeStampsOfLastAppliedOp()</a>
 <div class="block"><span class="deprecationComment">Since hbase-2.0.0. Will be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getTotalCompactingKVs--">org.apache.hadoop.hbase.ServerLoad.getTotalCompactingKVs()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getTotalCompactingKVs--">org.apache.hadoop.hbase.RegionLoad.getTotalCompactingKVs()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getCompactingCellCount--"><code>RegionLoad.getCompactingCellCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getTotalNumberOfRequests--">org.apache.hadoop.hbase.ServerLoad.getTotalNumberOfRequests()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRequestCount--"><code>ServerLoad.getRequestCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getTotalStaticBloomSizeKB--">org.apache.hadoop.hbase.ServerLoad.getTotalStaticBloomSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getTotalStaticBloomSizeKB--">org.apache.hadoop.hbase.RegionLoad.getTotalStaticBloomSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getBloomFilterSize--"><code>RegionLoad.getBloomFilterSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getTotalStaticIndexSizeKB--">org.apache.hadoop.hbase.ServerLoad.getTotalStaticIndexSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getTotalStaticIndexSizeKB--">org.apache.hadoop.hbase.RegionLoad.getTotalStaticIndexSizeKB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getStoreFileUncompressedDataIndexSize--"><code>RegionLoad.getStoreFileUncompressedDataIndexSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/Cell.html#getTypeByte--">org.apache.hadoop.hbase.Cell.getTypeByte()</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in HBase-3.0. Use <a href="org/apache/hadoop/hbase/Cell.html#getType--"><code>Cell.getType()</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getUsedHeapMB--">org.apache.hadoop.hbase.ServerLoad.getUsedHeapMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getUsedHeapSize--"><code>ServerLoad.getUsedHeapSize()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/CellUtil.html#getValueBufferShallowCopy-org.apache.hadoop.hbase.Cell-">org.apache.hadoop.hbase.CellUtil.getValueBufferShallowCopy(Cell)</a>
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in 3.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/io/hfile/HFileScanner.html#getValueString--">org.apache.hadoop.hbase.io.hfile.HFileScanner.getValueString()</a>
 <div class="block"><span class="deprecationComment">Since hbase-2.0.0</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getVersion--">org.apache.hadoop.hbase.ClusterStatus.getVersion()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#getWriteRequestsCount--">org.apache.hadoop.hbase.ServerLoad.getWriteRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
      Use <a href="org/apache/hadoop/hbase/ServerLoad.html#getRegionMetrics--"><code>ServerLoad.getRegionMetrics()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/RegionLoad.html#getWriteRequestsCount--">org.apache.hadoop.hbase.RegionLoad.getWriteRequestsCount()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              Use <a href="org/apache/hadoop/hbase/RegionLoad.html#getWriteRequestCount--"><code>RegionLoad.getWriteRequestCount()</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Table.html#getWriteRpcTimeout--">org.apache.hadoop.hbase.client.Table.getWriteRpcTimeout()</a>
 <div class="block"><span class="deprecationComment">since 2.0 and will be removed in 3.0 version
              use <a href="org/apache/hadoop/hbase/client/Table.html#getWriteRpcTimeout-java.util.concurrent.TimeUnit-"><code>Table.getWriteRpcTimeout(TimeUnit)</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/HTable.html#getWriteRpcTimeout--">org.apache.hadoop.hbase.client.HTable.getWriteRpcTimeout()</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.html#getWriteRpcTimeout--">org.apache.hadoop.hbase.rest.client.RemoteHTable.getWriteRpcTimeout()</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Increment.html#hashCode--">org.apache.hadoop.hbase.client.Increment.hashCode()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              No replacement.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/RowMutations.html#hashCode--">org.apache.hadoop.hbase.client.RowMutations.hashCode()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              No replacement</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/ServerLoad.html#hasMaxHeapMB--">org.apache.hadoop.hbase.ServerLoad.hasMaxHeapMB()</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0
              No flag in 2.0</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColo

<TRUNCATED>

[06/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html
index 1ad6fc7..99b6bf2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html
@@ -54,1964 +54,1980 @@
 <span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import org.apache.hadoop.conf.Configuration;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.CallQueueTooBigException;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HConstants;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.ServerName;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.TableNotEnabledException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicy;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicyFactory;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.exceptions.ClientExceptionsUtil;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.exceptions.RegionMovedException;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.ipc.RpcClientFactory;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.security.User;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.ExceptionUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.zookeeper.KeeperException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.slf4j.Logger;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.slf4j.LoggerFactory;<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.com.google.common.base.Throwables;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersRequest;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledRequest;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesRequest;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesRequest;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateRequest;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateResponse;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>/**<a name="line.132"></a>
-<span class="sourceLineNo">133</span> * Main implementation of {@link Connection} and {@link ClusterConnection} interfaces.<a name="line.133"></a>
-<span class="sourceLineNo">134</span> * Encapsulates connection to zookeeper and regionservers.<a name="line.134"></a>
-<span class="sourceLineNo">135</span> */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    value="AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION",<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    justification="Access to the conncurrent hash map is under a lock so should be fine.")<a name="line.138"></a>
-<span class="sourceLineNo">139</span>@InterfaceAudience.Private<a name="line.139"></a>
-<span class="sourceLineNo">140</span>class ConnectionImplementation implements ClusterConnection, Closeable {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  public static final String RETRIES_BY_SERVER_KEY = "hbase.client.retries.by.server";<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private static final Logger LOG = LoggerFactory.getLogger(ConnectionImplementation.class);<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private static final String RESOLVE_HOSTNAME_ON_FAIL_KEY = "hbase.resolve.hostnames.on.failure";<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final boolean hostnamesCanChange;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private final long pause;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private final long pauseForCQTBE;// pause for CallQueueTooBigException, if specified<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private boolean useMetaReplicas;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private final int metaReplicaCallTimeoutScanInMicroSecond;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private final int numTries;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  final int rpcTimeout;<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>   * Global nonceGenerator shared per client.Currently there's no reason to limit its scope.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Once it's set under nonceGeneratorCreateLock, it is never unset or changed.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  private static volatile NonceGenerator nonceGenerator = null;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  /** The nonce generator lock. Only taken when creating Connection, which gets a private copy. */<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  private static final Object nonceGeneratorCreateLock = new Object();<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private final AsyncProcess asyncProcess;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  // single tracker per connection<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  private final ServerStatisticTracker stats;<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  private volatile boolean closed;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  private volatile boolean aborted;<a name="line.167"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.CallQueueTooBigException;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HConstants;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.ServerName;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.TableName;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.TableNotEnabledException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicy;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicyFactory;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.exceptions.ClientExceptionsUtil;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.exceptions.RegionMovedException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.ipc.RpcClientFactory;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.security.User;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.util.ExceptionUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.zookeeper.KeeperException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.slf4j.Logger;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.slf4j.LoggerFactory;<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.common.base.Throwables;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersRequest;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledRequest;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesRequest;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesRequest;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateRequest;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateResponse;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse;<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> * Main implementation of {@link Connection} and {@link ClusterConnection} interfaces.<a name="line.136"></a>
+<span class="sourceLineNo">137</span> * Encapsulates connection to zookeeper and regionservers.<a name="line.137"></a>
+<span class="sourceLineNo">138</span> */<a name="line.138"></a>
+<span class="sourceLineNo">139</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    value="AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION",<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    justification="Access to the conncurrent hash map is under a lock so should be fine.")<a name="line.141"></a>
+<span class="sourceLineNo">142</span>@InterfaceAudience.Private<a name="line.142"></a>
+<span class="sourceLineNo">143</span>class ConnectionImplementation implements ClusterConnection, Closeable {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public static final String RETRIES_BY_SERVER_KEY = "hbase.client.retries.by.server";<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private static final Logger LOG = LoggerFactory.getLogger(ConnectionImplementation.class);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private static final String RESOLVE_HOSTNAME_ON_FAIL_KEY = "hbase.resolve.hostnames.on.failure";<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private final boolean hostnamesCanChange;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private final long pause;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  private final long pauseForCQTBE;// pause for CallQueueTooBigException, if specified<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private boolean useMetaReplicas;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  private final int metaReplicaCallTimeoutScanInMicroSecond;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  private final int numTries;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  final int rpcTimeout;<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>   * Global nonceGenerator shared per client.Currently there's no reason to limit its scope.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * Once it's set under nonceGeneratorCreateLock, it is never unset or changed.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  private static volatile NonceGenerator nonceGenerator = null;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  /** The nonce generator lock. Only taken when creating Connection, which gets a private copy. */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private static final Object nonceGeneratorCreateLock = new Object();<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>  private final AsyncProcess asyncProcess;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  // single tracker per connection<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private final ServerStatisticTracker stats;<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  // package protected for the tests<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  ClusterStatusListener clusterStatusListener;<a name="line.170"></a>
+<span class="sourceLineNo">169</span>  private volatile boolean closed;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  private volatile boolean aborted;<a name="line.170"></a>
 <span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  private final Object metaRegionLock = new Object();<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  private final Object masterLock = new Object();<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  // thread executor shared by all Table instances created<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // by this connection<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  private volatile ExecutorService batchPool = null;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  // meta thread executor shared by all Table instances created<a name="line.179"></a>
+<span class="sourceLineNo">172</span>  // package protected for the tests<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  ClusterStatusListener clusterStatusListener;<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private final Object metaRegionLock = new Object();<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private final Object masterLock = new Object();<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  // thread executor shared by all Table instances created<a name="line.179"></a>
 <span class="sourceLineNo">180</span>  // by this connection<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  private volatile ExecutorService metaLookupPool = null;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  private volatile boolean cleanupPool = false;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  private final Configuration conf;<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  // cache the configuration value for tables so that we can avoid calling<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  // the expensive Configuration to fetch the value multiple times.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  private final ConnectionConfiguration connectionConfig;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  // Client rpc instance.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  private final RpcClient rpcClient;<a name="line.191"></a>
+<span class="sourceLineNo">181</span>  private volatile ExecutorService batchPool = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  // meta thread executor shared by all Table instances created<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  // by this connection<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  private volatile ExecutorService metaLookupPool = null;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private volatile boolean cleanupPool = false;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private final Configuration conf;<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  // cache the configuration value for tables so that we can avoid calling<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  // the expensive Configuration to fetch the value multiple times.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  private final ConnectionConfiguration connectionConfig;<a name="line.191"></a>
 <span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>  private final MetaCache metaCache;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  private final MetricsConnection metrics;<a name="line.194"></a>
+<span class="sourceLineNo">193</span>  // Client rpc instance.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  private final RpcClient rpcClient;<a name="line.194"></a>
 <span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  protected User user;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private final RpcRetryingCallerFactory rpcCallerFactory;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  private final RpcControllerFactory rpcControllerFactory;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private final RetryingCallerInterceptor interceptor;<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>   * Cluster registry of basic info such as clusterid and meta region location.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  private final AsyncRegistry registry;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  private final ClientBackoffPolicy backoffPolicy;<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>   * Allow setting an alternate BufferedMutator implementation via<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * config. If null, use default.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private final String alternateBufferedMutatorClassName;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /** lock guards against multiple threads trying to query the meta region at the same time */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  private final ReentrantLock userRegionLock = new ReentrantLock();<a name="line.218"></a>
+<span class="sourceLineNo">196</span>  private final MetaCache metaCache;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  private final MetricsConnection metrics;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  protected User user;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private final RpcRetryingCallerFactory rpcCallerFactory;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private final RpcControllerFactory rpcControllerFactory;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private final RetryingCallerInterceptor interceptor;<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>   * Cluster registry of basic info such as clusterid and meta region location.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  private final AsyncRegistry registry;<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private final ClientBackoffPolicy backoffPolicy;<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  /**<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * Allow setting an alternate BufferedMutator implementation via<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * config. If null, use default.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  private final String alternateBufferedMutatorClassName;<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>   * constructor<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param conf Configuration object<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   */<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  ConnectionImplementation(Configuration conf,<a name="line.224"></a>
-<span class="sourceLineNo">225</span>                           ExecutorService pool, User user) throws IOException {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    this.conf = conf;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    this.user = user;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    this.batchPool = pool;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    this.connectionConfig = new ConnectionConfiguration(conf);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    this.closed = false;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    this.pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    long configuredPauseForCQTBE = conf.getLong(HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE, pause);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    if (configuredPauseForCQTBE &lt; pause) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      LOG.warn("The " + HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE + " setting: "<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          + configuredPauseForCQTBE + " is smaller than " + HConstants.HBASE_CLIENT_PAUSE<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          + ", will use " + pause + " instead.");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      this.pauseForCQTBE = pause;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    } else {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      this.pauseForCQTBE = configuredPauseForCQTBE;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    this.useMetaReplicas = conf.getBoolean(HConstants.USE_META_REPLICAS,<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      HConstants.DEFAULT_USE_META_REPLICAS);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.metaReplicaCallTimeoutScanInMicroSecond =<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        connectionConfig.getMetaReplicaCallTimeoutMicroSecondScan();<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // how many times to try, one more than max *retry* time<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    this.numTries = retries2Attempts(connectionConfig.getRetriesNumber());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    this.rpcTimeout = conf.getInt(<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    if (conf.getBoolean(NonceGenerator.CLIENT_NONCES_ENABLED_KEY, true)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      synchronized (nonceGeneratorCreateLock) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        if (nonceGenerator == null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          nonceGenerator = PerClientRandomNonceGenerator.get();<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>    } else {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      nonceGenerator = NO_NONCE_GENERATOR;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span><a name="line.261"></a>
-<span class="sourceLineNo">262</span>    this.stats = ServerStatisticTracker.create(conf);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    this.interceptor = (new RetryingCallerInterceptorFactory(conf)).build();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    this.rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf, interceptor, this.stats);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    this.backoffPolicy = ClientBackoffPolicyFactory.create(conf);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    this.asyncProcess = new AsyncProcess(this, conf, rpcCallerFactory, rpcControllerFactory);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    if (conf.getBoolean(CLIENT_SIDE_METRICS_ENABLED_KEY, false)) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      this.metrics = new MetricsConnection(this);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    } else {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.metrics = null;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    this.metaCache = new MetaCache(this.metrics);<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean shouldListen = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    this.hostnamesCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Class&lt;? extends ClusterStatusListener.Listener&gt; listenerClass =<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        conf.getClass(ClusterStatusListener.STATUS_LISTENER_CLASS,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>            ClusterStatusListener.DEFAULT_STATUS_LISTENER_CLASS,<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            ClusterStatusListener.Listener.class);<a name="line.281"></a>
+<span class="sourceLineNo">220</span>  /** lock guards against multiple threads trying to query the meta region at the same time */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  private final ReentrantLock userRegionLock = new ReentrantLock();<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  private ChoreService authService;<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>   * constructor<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param conf Configuration object<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  ConnectionImplementation(Configuration conf,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>                           ExecutorService pool, User user) throws IOException {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    this.conf = conf;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    this.user = user;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    if (user != null &amp;&amp; user.isLoginFromKeytab()) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      spawnRenewalChore(user.getUGI());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    this.batchPool = pool;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    this.connectionConfig = new ConnectionConfiguration(conf);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this.closed = false;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    this.pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    long configuredPauseForCQTBE = conf.getLong(HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE, pause);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    if (configuredPauseForCQTBE &lt; pause) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      LOG.warn("The " + HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE + " setting: "<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          + configuredPauseForCQTBE + " is smaller than " + HConstants.HBASE_CLIENT_PAUSE<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          + ", will use " + pause + " instead.");<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      this.pauseForCQTBE = pause;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    } else {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      this.pauseForCQTBE = configuredPauseForCQTBE;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    this.useMetaReplicas = conf.getBoolean(HConstants.USE_META_REPLICAS,<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      HConstants.DEFAULT_USE_META_REPLICAS);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    this.metaReplicaCallTimeoutScanInMicroSecond =<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        connectionConfig.getMetaReplicaCallTimeoutMicroSecondScan();<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span>    // how many times to try, one more than max *retry* time<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    this.numTries = retries2Attempts(connectionConfig.getRetriesNumber());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    this.rpcTimeout = conf.getInt(<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    if (conf.getBoolean(NonceGenerator.CLIENT_NONCES_ENABLED_KEY, true)) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      synchronized (nonceGeneratorCreateLock) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        if (nonceGenerator == null) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          nonceGenerator = PerClientRandomNonceGenerator.get();<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>    } else {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      nonceGenerator = NO_NONCE_GENERATOR;<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>    this.stats = ServerStatisticTracker.create(conf);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    this.interceptor = (new RetryingCallerInterceptorFactory(conf)).build();<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    this.rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf, interceptor, this.stats);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    this.backoffPolicy = ClientBackoffPolicyFactory.create(conf);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    this.asyncProcess = new AsyncProcess(this, conf, rpcCallerFactory, rpcControllerFactory);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    if (conf.getBoolean(CLIENT_SIDE_METRICS_ENABLED_KEY, false)) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      this.metrics = new MetricsConnection(this);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.metrics = null;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    this.metaCache = new MetaCache(this.metrics);<a name="line.281"></a>
 <span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>    // Is there an alternate BufferedMutator to use?<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    this.alternateBufferedMutatorClassName =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        this.conf.get(BufferedMutator.CLASSNAME_KEY);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>    try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      this.registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      retrieveClusterId();<a name="line.289"></a>
+<span class="sourceLineNo">283</span>    boolean shouldListen = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    this.hostnamesCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    Class&lt;? extends ClusterStatusListener.Listener&gt; listenerClass =<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        conf.getClass(ClusterStatusListener.STATUS_LISTENER_CLASS,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            ClusterStatusListener.DEFAULT_STATUS_LISTENER_CLASS,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            ClusterStatusListener.Listener.class);<a name="line.289"></a>
 <span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>      this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId, this.metrics);<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>      // Do we publish the status?<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      if (shouldListen) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        if (listenerClass == null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.296"></a>
-<span class="sourceLineNo">297</span>              ClusterStatusListener.STATUS_LISTENER_CLASS + " is not set - not listening status");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        } else {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          clusterStatusListener = new ClusterStatusListener(<a name="line.299"></a>
-<span class="sourceLineNo">300</span>              new ClusterStatusListener.DeadServerHandler() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>                @Override<a name="line.301"></a>
-<span class="sourceLineNo">302</span>                public void newDead(ServerName sn) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>                  clearCaches(sn);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>                  rpcClient.cancelConnections(sn);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>                }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>              }, conf, listenerClass);<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>    } catch (Throwable e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // avoid leaks: registry, rpcClient, ...<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      LOG.debug("connection construction failed", e);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      close();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      throw e;<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>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * @param useMetaReplicas<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  @VisibleForTesting<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  void setUseMetaReplicas(final boolean useMetaReplicas) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    this.useMetaReplicas = useMetaReplicas;<a name="line.322"></a>
+<span class="sourceLineNo">291</span>    // Is there an alternate BufferedMutator to use?<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    this.alternateBufferedMutatorClassName =<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        this.conf.get(BufferedMutator.CLASSNAME_KEY);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      this.registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      retrieveClusterId();<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>      this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId, this.metrics);<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>      // Do we publish the status?<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      if (shouldListen) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        if (listenerClass == null) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>          LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.304"></a>
+<span class="sourceLineNo">305</span>              ClusterStatusListener.STATUS_LISTENER_CLASS + " is not set - not listening status");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        } else {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          clusterStatusListener = new ClusterStatusListener(<a name="line.307"></a>
+<span class="sourceLineNo">308</span>              new ClusterStatusListener.DeadServerHandler() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>                @Override<a name="line.309"></a>
+<span class="sourceLineNo">310</span>                public void newDead(ServerName sn) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>                  clearCaches(sn);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>                  rpcClient.cancelConnections(sn);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>                }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>              }, conf, listenerClass);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } catch (Throwable e) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      // avoid leaks: registry, rpcClient, ...<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      LOG.debug("connection construction failed", e);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      close();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw e;<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>   * @param conn The connection for which to replace the generator.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @param cnm Replaces the nonce generator used, for testing.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @return old nonce generator.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   */<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  @VisibleForTesting<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  static NonceGenerator injectNonceGeneratorForTesting(<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      ClusterConnection conn, NonceGenerator cnm) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    ConnectionImplementation connImpl = (ConnectionImplementation)conn;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    NonceGenerator ng = connImpl.getNonceGenerator();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    LOG.warn("Nonce generator is being replaced by test code for "<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      + cnm.getClass().getName());<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    nonceGenerator = cnm;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return ng;<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>  @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public Table getTable(TableName tableName) throws IOException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    return getTable(tableName, getBatchPool());<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>  @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public TableBuilder getTableBuilder(TableName tableName, ExecutorService pool) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return new TableBuilderBase(tableName, connectionConfig) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>      @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      public Table build() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        return new HTable(ConnectionImplementation.this, this, rpcCallerFactory,<a name="line.352"></a>
-<span class="sourceLineNo">353</span>            rpcControllerFactory, pool);<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>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  @Override<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  public BufferedMutator getBufferedMutator(BufferedMutatorParams params) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (params.getTableName() == null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      throw new IllegalArgumentException("TableName cannot be null.");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (params.getPool() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      params.pool(HTable.getDefaultExecutor(getConfiguration()));<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    if (params.getWriteBufferSize() == BufferedMutatorParams.UNSET) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      params.writeBufferSize(connectionConfig.getWriteBufferSize());<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    if (params.getWriteBufferPeriodicFlushTimeoutMs() == BufferedMutatorParams.UNSET) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      params.setWriteBufferPeriodicFlushTimeoutMs(<a name="line.370"></a>
-<span class="sourceLineNo">371</span>              connectionConfig.getWriteBufferPeriodicFlushTimeoutMs());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    if (params.getWriteBufferPeriodicFlushTimerTickMs() == BufferedMutatorParams.UNSET) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      params.setWriteBufferPeriodicFlushTimerTickMs(<a name="line.374"></a>
-<span class="sourceLineNo">375</span>              connectionConfig.getWriteBufferPeriodicFlushTimerTickMs());<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (params.getMaxKeyValueSize() == BufferedMutatorParams.UNSET) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      params.maxKeyValueSize(connectionConfig.getMaxKeyValueSize());<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    // Look to see if an alternate BufferedMutation implementation is wanted.<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    // Look in params and in config. If null, use default.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    String implementationClassName = params.getImplementationClassName();<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (implementationClassName == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      implementationClassName = this.alternateBufferedMutatorClassName;<a name="line.384"></a>
+<span class="sourceLineNo">325</span>  private void spawnRenewalChore(final UserGroupInformation user) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    authService = new ChoreService("Relogin service");<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    authService.scheduleChore(AuthUtil.getAuthRenewalChore(user));<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>   * @param useMetaReplicas<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  @VisibleForTesting<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  void setUseMetaReplicas(final boolean useMetaReplicas) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    this.useMetaReplicas = useMetaReplicas;<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>   * @param conn The connection for which to replace the generator.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * @param cnm Replaces the nonce generator used, for testing.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * @return old nonce generator.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  @VisibleForTesting<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  static NonceGenerator injectNonceGeneratorForTesting(<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      ClusterConnection conn, NonceGenerator cnm) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    ConnectionImplementation connImpl = (ConnectionImplementation)conn;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    NonceGenerator ng = connImpl.getNonceGenerator();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    LOG.warn("Nonce generator is being replaced by test code for "<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      + cnm.getClass().getName());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    nonceGenerator = cnm;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return ng;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  @Override<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  public Table getTable(TableName tableName) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return getTable(tableName, getBatchPool());<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>  @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  public TableBuilder getTableBuilder(TableName tableName, ExecutorService pool) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    return new TableBuilderBase(tableName, connectionConfig) {<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 Table build() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        return new HTable(ConnectionImplementation.this, this, rpcCallerFactory,<a name="line.365"></a>
+<span class="sourceLineNo">366</span>            rpcControllerFactory, pool);<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>  }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>  @Override<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  public BufferedMutator getBufferedMutator(BufferedMutatorParams params) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    if (params.getTableName() == null) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      throw new IllegalArgumentException("TableName cannot be null.");<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    if (params.getPool() == null) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      params.pool(HTable.getDefaultExecutor(getConfiguration()));<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    if (params.getWriteBufferSize() == BufferedMutatorParams.UNSET) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      params.writeBufferSize(connectionConfig.getWriteBufferSize());<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (params.getWriteBufferPeriodicFlushTimeoutMs() == BufferedMutatorParams.UNSET) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      params.setWriteBufferPeriodicFlushTimeoutMs(<a name="line.383"></a>
+<span class="sourceLineNo">384</span>              connectionConfig.getWriteBufferPeriodicFlushTimeoutMs());<a name="line.384"></a>
 <span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    if (implementationClassName == null) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return new BufferedMutatorImpl(this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    try {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      return (BufferedMutator)ReflectionUtils.newInstance(Class.forName(implementationClassName),<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    } catch (ClassNotFoundException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      throw new RuntimeException(e);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public BufferedMutator getBufferedMutator(TableName tableName) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    return getBufferedMutator(new BufferedMutatorParams(tableName));<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>  @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public RegionLocator getRegionLocator(TableName tableName) throws IOException {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    return new HRegionLocator(tableName, this);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>  @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public Admin getAdmin() throws IOException {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return new HBaseAdmin(this);<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 MetricsConnection getConnectionMetrics() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    return this.metrics;<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>  private ExecutorService getBatchPool() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    if (batchPool == null) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      synchronized (this) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        if (batchPool == null) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          int threads = conf.getInt("hbase.hconnection.threads.max", 256);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          this.batchPool = getThreadPool(threads, threads, "-shared", null);<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          this.cleanupPool = true;<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>    return this.batchPool;<a name="line.427"></a>
+<span class="sourceLineNo">386</span>    if (params.getWriteBufferPeriodicFlushTimerTickMs() == BufferedMutatorParams.UNSET) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      params.setWriteBufferPeriodicFlushTimerTickMs(<a name="line.387"></a>
+<span class="sourceLineNo">388</span>              connectionConfig.getWriteBufferPeriodicFlushTimerTickMs());<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    if (params.getMaxKeyValueSize() == BufferedMutatorParams.UNSET) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      params.maxKeyValueSize(connectionConfig.getMaxKeyValueSize());<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    // Look to see if an alternate BufferedMutation implementation is wanted.<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    // Look in params and in config. If null, use default.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    String implementationClassName = params.getImplementationClassName();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    if (implementationClassName == null) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      implementationClassName = this.alternateBufferedMutatorClassName;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    if (implementationClassName == null) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return new BufferedMutatorImpl(this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    try {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      return (BufferedMutator)ReflectionUtils.newInstance(Class.forName(implementationClassName),<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    } catch (ClassNotFoundException e) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      throw new RuntimeException(e);<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>  @Override<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  public BufferedMutator getBufferedMutator(TableName tableName) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    return getBufferedMutator(new BufferedMutatorParams(tableName));<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>  @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  public RegionLocator getRegionLocator(TableName tableName) throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    return new HRegionLocator(tableName, this);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>  @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public Admin getAdmin() throws IOException {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    return new HBaseAdmin(this);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>  @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>  public MetricsConnection getConnectionMetrics() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    return this.metrics;<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>  private ExecutorService getThreadPool(int maxThreads, int coreThreads, String nameHint,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      BlockingQueue&lt;Runnable&gt; passedWorkQueue) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    // shared HTable thread executor not yet initialized<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    if (maxThreads == 0) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      maxThreads = Runtime.getRuntime().availableProcessors() * 8;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    if (coreThreads == 0) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      coreThreads = Runtime.getRuntime().availableProcessors() * 8;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    long keepAliveTime = conf.getLong("hbase.hconnection.threads.keepalivetime", 60);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    BlockingQueue&lt;Runnable&gt; workQueue = passedWorkQueue;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    if (workQueue == null) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      workQueue =<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        new LinkedBlockingQueue&lt;&gt;(maxThreads *<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            conf.getInt(HConstants.HBASE_CLIENT_MAX_TOTAL_TASKS,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>                HConstants.DEFAULT_HBASE_CLIENT_MAX_TOTAL_TASKS));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      coreThreads = maxThreads;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    ThreadPoolExecutor tpe = new ThreadPoolExecutor(<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        coreThreads,<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        maxThreads,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        keepAliveTime,<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        TimeUnit.SECONDS,<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        workQueue,<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        Threads.newDaemonThreadFactory(toString() + nameHint));<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    tpe.allowCoreThreadTimeOut(true);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    return tpe;<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>  private ExecutorService getMetaLookupPool() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    if (this.metaLookupPool == null) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      synchronized (this) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        if (this.metaLookupPool == null) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          //Some of the threads would be used for meta replicas<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          //To start with, threads.max.core threads can hit the meta (including replicas).<a name="line.464"></a>
-<span class="sourceLineNo">465</span>          //After that, requests will get queued up in the passed queue, and only after<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          //the queue is full, a new thread will be started<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          int threads = conf.getInt("hbase.hconnection.meta.lookup.threads.max", 128);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>          this.metaLookupPool = getThreadPool(<a name="line.468"></a>
-<span class="sourceLineNo">469</span>             threads,<a name="line.469"></a>
-<span class="sourceLineNo">470</span>             threads,<a name="line.470"></a>
-<span class="sourceLineNo">471</span>             "-metaLookup-shared-", new LinkedBlockingQueue&lt;&gt;());<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    return this.metaLookupPool;<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>  protected ExecutorService getCurrentMetaLookupPool() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    return metaLookupPool;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>  protected ExecutorService getCurrentBatchPool() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    return batchPool;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  private void shutdownPools() {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    if (this.cleanupPool &amp;&amp; this.batchPool != null &amp;&amp; !this.batchPool.isShutdown()) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      shutdownBatchPool(this.batchPool);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (this.metaLookupPool != null &amp;&amp; !this.metaLookupPool.isShutdown()) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      shutdownBatchPool(this.metaLookupPool);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
+<span class="sourceLineNo">430</span>  private ExecutorService getBatchPool() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    if (batchPool == null) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      synchronized (this) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        if (batchPool == null) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          int threads = conf.getInt("hbase.hconnection.threads.max", 256);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          this.batchPool = getThreadPool(threads, threads, "-shared", null);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          this.cleanupPool = true;<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>    return this.batchPool;<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>  private ExecutorService getThreadPool(int maxThreads, int coreThreads, String nameHint,<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      BlockingQueue&lt;Runnable&gt; passedWorkQueue) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    // shared HTable thread executor not yet initialized<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    if (maxThreads == 0) {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>

<TRUNCATED>

[05/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html
index ec5ba00..997f52f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html
@@ -35,357 +35,404 @@
 <span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.ExecutionException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span><a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.util.Methods;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.security.Groups;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.security.SecurityUtil;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.security.token.Token;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.security.token.TokenIdentifier;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache;<a name="line.41"></a>
+<span class="sourceLineNo">030</span>import java.util.Optional;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.ExecutionException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Methods;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.security.Groups;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.security.SecurityUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.security.token.Token;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.security.token.TokenIdentifier;<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><a name="line.42"></a>
-<span class="sourceLineNo">043</span>/**<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * Wrapper to abstract out usage of user and group information in HBase.<a name="line.44"></a>
-<span class="sourceLineNo">045</span> *<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * &lt;p&gt;<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * This class provides a common interface for interacting with user and group<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * information across changing APIs in different versions of Hadoop.  It only<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * provides access to the common set of functionality in<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link org.apache.hadoop.security.UserGroupInformation} currently needed by<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * HBase, but can be extended as needs change.<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * &lt;/p&gt;<a name="line.52"></a>
-<span class="sourceLineNo">053</span> */<a name="line.53"></a>
-<span class="sourceLineNo">054</span>@InterfaceAudience.Public<a name="line.54"></a>
-<span class="sourceLineNo">055</span>public abstract class User {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  public static final String HBASE_SECURITY_CONF_KEY =<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      "hbase.security.authentication";<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public static final String HBASE_SECURITY_AUTHORIZATION_CONF_KEY =<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      "hbase.security.authorization";<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  protected UserGroupInformation ugi;<a name="line.61"></a>
+<span class="sourceLineNo">043</span>import org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache;<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> * Wrapper to abstract out usage of user and group information in HBase.<a name="line.46"></a>
+<span class="sourceLineNo">047</span> *<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * This class provides a common interface for interacting with user and group<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * information across changing APIs in different versions of Hadoop.  It only<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * provides access to the common set of functionality in<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * {@link org.apache.hadoop.security.UserGroupInformation} currently needed by<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * HBase, but can be extended as needs change.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * &lt;/p&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> */<a name="line.55"></a>
+<span class="sourceLineNo">056</span>@InterfaceAudience.Public<a name="line.56"></a>
+<span class="sourceLineNo">057</span>public abstract class User {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  public static final String HBASE_SECURITY_CONF_KEY =<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      "hbase.security.authentication";<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public static final String HBASE_SECURITY_AUTHORIZATION_CONF_KEY =<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      "hbase.security.authorization";<a name="line.61"></a>
 <span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public UserGroupInformation getUGI() {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    return ugi;<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>   * Returns the full user name.  For Kerberos principals this will include<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   * the host and realm portions of the principal name.<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   *<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * @return User full name.<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public String getName() {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    return ugi.getUserName();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<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>   * Returns the list of groups of which this user is a member.  On secure<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * Hadoop this returns the group information for the user as resolved on the<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * server.  For 0.20 based Hadoop, the group names are passed from the client.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   */<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public String[] getGroupNames() {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    return ugi.getGroupNames();<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>  /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * Returns the shortened version of the user name -- the portion that maps<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * to an operating system user name.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   *<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * @return Short name<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public abstract String getShortName();<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>   * Executes the given action within the context of this user.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public abstract &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action);<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>   * Executes the given action within the context of this user.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public abstract &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      throws IOException, InterruptedException;<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>   * Returns the Token of the specified kind associated with this user,<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * or null if the Token is not present.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   *<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * @param kind the kind of token<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param service service on which the token is supposed to be used<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @return the token of the specified kind.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public Token&lt;?&gt; getToken(String kind, String service) throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    for (Token&lt;?&gt; token : ugi.getTokens()) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      if (token.getKind().toString().equals(kind) &amp;&amp;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>          (service != null &amp;&amp; token.getService().toString().equals(service))) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        return token;<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>    return null;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * Returns all the tokens stored in the user's credentials.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public Collection&lt;Token&lt;? extends TokenIdentifier&gt;&gt; getTokens() {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    return ugi.getTokens();<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>   * Adds the given Token to the user's credentials.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   *<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * @param token the token to add<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  public void addToken(Token&lt;? extends TokenIdentifier&gt; token) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    ugi.addToken(token);<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>  @Override<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public boolean equals(Object o) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    if (this == o) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return true;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    if (o == null || getClass() != o.getClass()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return false;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return ugi.equals(((User) o).ugi);<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>  @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public int hashCode() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return ugi.hashCode();<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 String toString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    return ugi.toString();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  }<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>   * Returns the {@code User} instance within current execution context.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  public static User getCurrent() throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    User user = new SecureHadoopUser();<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    if (user.getUGI() == null) {<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>    return user;<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>   * Executes the given action as the login user<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * @param action<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @return the result of the action<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @throws IOException<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  public static &lt;T&gt; T runAsLoginUser(PrivilegedExceptionAction&lt;T&gt; action) throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    try {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      Class c = Class.forName("org.apache.hadoop.security.SecurityUtil");<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      Class [] types = new Class[]{PrivilegedExceptionAction.class};<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      Object[] args = new Object[]{action};<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      return (T) Methods.call(c, null, "doAsLoginUser", types, args);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    } catch (Throwable e) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      throw new IOException(e);<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><a name="line.188"></a>
-<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * Wraps an underlying {@code UserGroupInformation} instance.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param ugi The base Hadoop user<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @return User<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public static User create(UserGroupInformation ugi) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    if (ugi == null) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    return new SecureHadoopUser(ugi);<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>   * Generates a new {@code User} instance specifically for use in test code.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * @param name the full username<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param groups the group names to which the test user will belong<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @return a new &lt;code&gt;User&lt;/code&gt; instance<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public static User createUserForTesting(Configuration conf,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      String name, String[] groups) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    User userForTesting = SecureHadoopUser.createUserForTesting(conf, name, groups);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    return userForTesting;<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>  /**<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * Log in the current process using the given configuration keys for the<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * credential file and login principal.<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   *<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * &lt;p&gt;&lt;strong&gt;This is only applicable when<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * running on secure Hadoop&lt;/strong&gt; -- see<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * org.apache.hadoop.security.SecurityUtil#login(Configuration,String,String,String).<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * On regular Hadoop (without security features), this will safely be ignored.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * &lt;/p&gt;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   *<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param conf The configuration data to use<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param fileConfKey Property key used to configure path to the credential file<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param principalConfKey Property key used to configure login principal<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param localhost Current hostname to use in any credentials<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @throws IOException underlying exception from SecurityUtil.login() call<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  public static void login(Configuration conf, String fileConfKey,<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      String principalConfKey, String localhost) throws IOException {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    SecureHadoopUser.login(conf, fileConfKey, principalConfKey, localhost);<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>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * Returns whether or not Kerberos authentication is configured for Hadoop.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * For non-secure Hadoop, this always returns &lt;code&gt;false&lt;/code&gt;.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * For secure Hadoop, it will return the value from<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  public static boolean isSecurityEnabled() {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    return SecureHadoopUser.isSecurityEnabled();<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>   * Returns whether or not secure authentication is enabled for HBase. Note that<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * HBase security requires HDFS security to provide any guarantees, so it is<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * recommended that secure HBase should run on secure HDFS.<a name="line.247"></a>
+<span class="sourceLineNo">063</span>  protected UserGroupInformation ugi;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  public UserGroupInformation getUGI() {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    return ugi;<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>   * Returns the full user name.  For Kerberos principals this will include<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * the host and realm portions of the principal name.<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   *<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * @return User full name.<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   */<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public String getName() {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    return ugi.getUserName();<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>   * Returns the list of groups of which this user is a member.  On secure<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * Hadoop this returns the group information for the user as resolved on the<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * server.  For 0.20 based Hadoop, the group names are passed from the client.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public String[] getGroupNames() {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return ugi.getGroupNames();<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Returns the shortened version of the user name -- the portion that maps<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * to an operating system user name.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   *<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * @return Short name<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   */<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public abstract String getShortName();<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>   * Executes the given action within the context of this user.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public abstract &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action);<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>   * Executes the given action within the context of this user.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   */<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public abstract &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      throws IOException, InterruptedException;<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>   * Returns the Token of the specified kind associated with this user,<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * or null if the Token is not present.<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @param kind the kind of token<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * @param service service on which the token is supposed to be used<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * @return the token of the specified kind.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public Token&lt;?&gt; getToken(String kind, String service) throws IOException {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    for (Token&lt;?&gt; token : ugi.getTokens()) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      if (token.getKind().toString().equals(kind) &amp;&amp;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          (service != null &amp;&amp; token.getService().toString().equals(service))) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        return token;<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>    return null;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<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>   * Returns all the tokens stored in the user's credentials.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public Collection&lt;Token&lt;? extends TokenIdentifier&gt;&gt; getTokens() {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    return ugi.getTokens();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  /**<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   * Adds the given Token to the user's credentials.<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   *<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * @param token the token to add<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   */<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public void addToken(Token&lt;? extends TokenIdentifier&gt; token) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    ugi.addToken(token);<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>   * @return true if user credentials are obtained from keytab.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public boolean isLoginFromKeytab() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return ugi.isFromKeytab();<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>  @Override<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  public boolean equals(Object o) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (this == o) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return true;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    if (o == null || getClass() != o.getClass()) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      return false;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return ugi.equals(((User) o).ugi);<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>  @Override<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public int hashCode() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    return ugi.hashCode();<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>  public String toString() {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return ugi.toString();<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>   * Returns the {@code User} instance within current execution context.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  public static User getCurrent() throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    User user = new SecureHadoopUser();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    if (user.getUGI() == null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      return null;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    return user;<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>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Executes the given action as the login user<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @param action<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @return the result of the action<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @throws IOException<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public static &lt;T&gt; T runAsLoginUser(PrivilegedExceptionAction&lt;T&gt; action) throws IOException {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      Class c = Class.forName("org.apache.hadoop.security.SecurityUtil");<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      Class [] types = new Class[]{PrivilegedExceptionAction.class};<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      Object[] args = new Object[]{action};<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return (T) Methods.call(c, null, "doAsLoginUser", types, args);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (Throwable e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      throw new IOException(e);<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><a name="line.197"></a>
+<span class="sourceLineNo">198</span>  /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * Wraps an underlying {@code UserGroupInformation} instance.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * @param ugi The base Hadoop user<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * @return User<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   */<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  public static User create(UserGroupInformation ugi) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (ugi == null) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      return null;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    return new SecureHadoopUser(ugi);<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>  /**<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * Generates a new {@code User} instance specifically for use in test code.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @param name the full username<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * @param groups the group names to which the test user will belong<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * @return a new &lt;code&gt;User&lt;/code&gt; instance<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  public static User createUserForTesting(Configuration conf,<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      String name, String[] groups) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    User userForTesting = SecureHadoopUser.createUserForTesting(conf, name, groups);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    return userForTesting;<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>   * Log in the current process using the given configuration keys for the<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * credential file and login principal.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   *<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * &lt;p&gt;&lt;strong&gt;This is only applicable when<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * running on secure Hadoop&lt;/strong&gt; -- see<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * org.apache.hadoop.security.SecurityUtil#login(Configuration,String,String,String).<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * On regular Hadoop (without security features), this will safely be ignored.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * &lt;/p&gt;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   *<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @param conf The configuration data to use<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @param fileConfKey Property key used to configure path to the credential file<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @param principalConfKey Property key used to configure login principal<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * @param localhost Current hostname to use in any credentials<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * @throws IOException underlying exception from SecurityUtil.login() call<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  public static void login(Configuration conf, String fileConfKey,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      String principalConfKey, String localhost) throws IOException {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SecureHadoopUser.login(conf, fileConfKey, principalConfKey, localhost);<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>   * Login with the given keytab and principal.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * @param keytabLocation path of keytab<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @param pricipalName login principal<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * @throws IOException underlying exception from UserGroupInformation.loginUserFromKeytab<a name="line.247"></a>
 <span class="sourceLineNo">248</span>   */<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  public static boolean isHBaseSecurityEnabled(Configuration conf) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    return "kerberos".equalsIgnoreCase(conf.get(HBASE_SECURITY_CONF_KEY));<a name="line.250"></a>
+<span class="sourceLineNo">249</span>  public static void login(String keytabLocation, String pricipalName) throws IOException {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    SecureHadoopUser.login(keytabLocation, pricipalName);<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>  /* Concrete implementations */<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>   * Bridges {@code User} invocations to underlying calls to<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * {@link org.apache.hadoop.security.UserGroupInformation} for secure Hadoop<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * 0.20 and versions 0.21 and above.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  @InterfaceAudience.Private<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   public static final class SecureHadoopUser extends User {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    private String shortName;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private LoadingCache&lt;String, String[]&gt; cache;<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    public SecureHadoopUser() throws IOException {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      ugi = UserGroupInformation.getCurrentUser();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      this.cache = null;<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>    public SecureHadoopUser(UserGroupInformation ugi) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.ugi = ugi;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      this.cache = null;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    public SecureHadoopUser(UserGroupInformation ugi,<a name="line.275"></a>
-<span class="sourceLineNo">276</span>                            LoadingCache&lt;String, String[]&gt; cache) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.ugi = ugi;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      this.cache = cache;<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>    @Override<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    public String getShortName() {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      if (shortName != null) return shortName;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        shortName = ugi.getShortUserName();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        return shortName;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      } catch (Exception e) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        throw new RuntimeException("Unexpected error getting user short name",<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          e);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>    @Override<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    public String[] getGroupNames() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      if (cache != null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        try {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          return this.cache.get(getShortName());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        } catch (ExecutionException e) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          return new String[0];<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>      return ugi.getGroupNames();<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>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    public &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      return ugi.doAs(action);<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>    @Override<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    public &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        throws IOException, InterruptedException {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      return ugi.doAs(action);<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>
-<span class="sourceLineNo">316</span>    /** @see User#createUserForTesting(org.apache.hadoop.conf.Configuration, String, String[]) */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    public static User createUserForTesting(Configuration conf,<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        String name, String[] groups) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      synchronized (UserProvider.class) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        if (!(UserProvider.groups instanceof TestingGroups)) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          UserProvider.groups = new TestingGroups(UserProvider.groups);<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>      ((TestingGroups)UserProvider.groups).setUserGroups(name, groups);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      return new SecureHadoopUser(UserGroupInformation.createUserForTesting(name, groups));<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>     * Obtain credentials for the current process using the configured<a name="line.330"></a>
-<span class="sourceLineNo">331</span>     * Kerberos keytab file and principal.<a name="line.331"></a>
-<span class="sourceLineNo">332</span>     * @see User#login(org.apache.hadoop.conf.Configuration, String, String, String)<a name="line.332"></a>
-<span class="sourceLineNo">333</span>     *<a name="line.333"></a>
-<span class="sourceLineNo">334</span>     * @param conf the Configuration to use<a name="line.334"></a>
-<span class="sourceLineNo">335</span>     * @param fileConfKey Configuration property key used to store the path<a name="line.335"></a>
-<span class="sourceLineNo">336</span>     * to the keytab file<a name="line.336"></a>
-<span class="sourceLineNo">337</span>     * @param principalConfKey Configuration property key used to store the<a name="line.337"></a>
-<span class="sourceLineNo">338</span>     * principal name to login as<a name="line.338"></a>
-<span class="sourceLineNo">339</span>     * @param localhost the local hostname<a name="line.339"></a>
-<span class="sourceLineNo">340</span>     */<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public static void login(Configuration conf, String fileConfKey,<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        String principalConfKey, String localhost) throws IOException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      if (isSecurityEnabled()) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        SecurityUtil.login(conf, fileConfKey, principalConfKey, localhost);<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><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     * Returns the result of {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>     */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    public static boolean isSecurityEnabled() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      return UserGroupInformation.isSecurityEnabled();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    }<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>  static class TestingGroups extends Groups {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    private final Map&lt;String, List&lt;String&gt;&gt; userToGroupsMapping = new HashMap&lt;&gt;();<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    private Groups underlyingImplementation;<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    TestingGroups(Groups underlyingImplementation) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      super(new Configuration());<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      this.underlyingImplementation = underlyingImplementation;<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>    @Override<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    public List&lt;String&gt; getGroups(String user) throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      List&lt;String&gt; result = userToGroupsMapping.get(user);<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>      if (result == null) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        result = underlyingImplementation.getGroups(user);<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 result;<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 void setUserGroups(String user, String[] groups) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      userToGroupsMapping.put(user, Arrays.asList(groups));<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">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Returns whether or not Kerberos authentication is configured for Hadoop.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * For non-secure Hadoop, this always returns &lt;code&gt;false&lt;/code&gt;.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * For secure Hadoop, it will return the value from<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  public static boolean isSecurityEnabled() {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    return SecureHadoopUser.isSecurityEnabled();<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>  /**<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * Returns whether or not secure authentication is enabled for HBase. Note that<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * HBase security requires HDFS security to provide any guarantees, so it is<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * recommended that secure HBase should run on secure HDFS.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public static boolean isHBaseSecurityEnabled(Configuration conf) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    return "kerberos".equalsIgnoreCase(conf.get(HBASE_SECURITY_CONF_KEY));<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>   * In secure environment, if a user specified his keytab and principal,<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * a hbase client will try to login with them. Otherwise, hbase client will try to obtain<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * ticket(through kinit) from system.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @param conf configuration file<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @return true if keytab and principal are configured<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public static boolean shouldLoginFromKeytab(Configuration conf) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    Optional&lt;String&gt; keytab =<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      Optional.ofNullable(conf.get(AuthUtil.HBASE_CLIENT_KEYTAB_FILE));<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    Optional&lt;String&gt; principal =<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      Optional.ofNullable(conf.get(AuthUtil.HBASE_CLIENT_KERBEROS_PRINCIPAL));<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    return keytab.isPresent() &amp;&amp; principal.isPresent();<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>  /* Concrete implementations */<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>   * Bridges {@code User} invocations to underlying calls to<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * {@link org.apache.hadoop.security.UserGroupInformation} for secure Hadoop<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * 0.20 and versions 0.21 and above.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  @InterfaceAudience.Private<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   public static final class SecureHadoopUser extends User {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    private String shortName;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    private LoadingCache&lt;String, String[]&gt; cache;<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    public SecureHadoopUser() throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      ugi = UserGroupInformation.getCurrentUser();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      this.cache = null;<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>    public SecureHadoopUser(UserGroupInformation ugi) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      this.ugi = ugi;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      this.cache = null;<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>    public SecureHadoopUser(UserGroupInformation ugi,<a name="line.309"></a>
+<span class="sourceLineNo">310</span>                            LoadingCache&lt;String, String[]&gt; cache) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      this.ugi = ugi;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      this.cache = cache;<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>    @Override<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    public String getShortName() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      if (shortName != null) return shortName;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      try {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        shortName = ugi.getShortUserName();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        return shortName;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      } catch (Exception e) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        throw new RuntimeException("Unexpected error getting user short name",<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          e);<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>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public String[] getGroupNames() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      if (cache != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          return this.cache.get(getShortName());<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        } catch (ExecutionException e) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          return new String[0];<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>      return ugi.getGroupNames();<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>    @Override<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    public &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return ugi.doAs(action);<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 &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        throws IOException, InterruptedException {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      return ugi.doAs(action);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    /** @see User#createUserForTesting(org.apache.hadoop.conf.Configuration, String, String[]) */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public static User createUserForTesting(Configuration conf,<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        String name, String[] groups) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      synchronized (UserProvider.class) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        if (!(UserProvider.groups instanceof TestingGroups)) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          UserProvider.groups = new TestingGroups(UserProvider.groups);<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">359</span>      ((TestingGroups)UserProvider.groups).setUserGroups(name, groups);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      return new SecureHadoopUser(UserGroupInformation.createUserForTesting(name, groups));<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>     * Obtain credentials for the current process using the configured<a name="line.364"></a>
+<span class="sourceLineNo">365</span>     * Kerberos keytab file and principal.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>     * @see User#login(org.apache.hadoop.conf.Configuration, String, String, String)<a name="line.366"></a>
+<span class="sourceLineNo">367</span>     *<a name="line.367"></a>
+<span class="sourceLineNo">368</span>     * @param conf the Configuration to use<a name="line.368"></a>
+<span class="sourceLineNo">369</span>     * @param fileConfKey Configuration property key used to store the path<a name="line.369"></a>
+<span class="sourceLineNo">370</span>     * to the keytab file<a name="line.370"></a>
+<span class="sourceLineNo">371</span>     * @param principalConfKey Configuration property key used to store the<a name="line.371"></a>
+<span class="sourceLineNo">372</span>     * principal name to login as<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * @param localhost the local hostname<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    public static void login(Configuration conf, String fileConfKey,<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        String principalConfKey, String localhost) throws IOException {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      if (isSecurityEnabled()) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        SecurityUtil.login(conf, fileConfKey, principalConfKey, localhost);<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>    /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span>     * Login through configured keytab and pricipal.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>     * @param keytabLocation location of keytab<a name="line.384"></a>
+<span class="sourceLineNo">385</span>     * @param principalName principal in keytab<a name="line.385"></a>
+<span class="sourceLineNo">386</span>     * @throws IOException exception from UserGroupInformation.loginUserFromKeytab<a name="line.386"></a>
+<span class="sourceLineNo">387</span>     */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    public static void login(String keytabLocation, String principalName)<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        throws IOException {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      if (isSecurityEnabled()) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        UserGroupInformation.loginUserFromKeytab(principalName, keytabLocation);<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>    /**<a name="line.395"></a>
+<span class="sourceLineNo">396</span>     * Returns the result of {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>     */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    public static boolean isSecurityEnabled() {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      return UserGroupInformation.isSecurityEnabled();<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>  static class TestingGroups extends Groups {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    private final Map&lt;String, List&lt;String&gt;&gt; userToGroupsMapping = new HashMap&lt;&gt;();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    private Groups underlyingImplementation;<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>    TestingGroups(Groups underlyingImplementation) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      super(new Configuration());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      this.underlyingImplementation = underlyingImplementation;<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 List&lt;String&gt; getGroups(String user) throws IOException {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      List&lt;String&gt; result = userToGroupsMapping.get(user);<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>      if (result == null) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        result = underlyingImplementation.getGroups(user);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>      return result;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    private void setUserGroups(String user, String[] groups) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      userToGroupsMapping.put(user, Arrays.asList(groups));<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>}<a name="line.427"></a>
 
 
 


[21/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 8ec744e..8fa3078 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
       <title>File: 3697,
-             Errors: 15629,
+             Errors: 15627,
              Warnings: 0,
              Infos: 0
       </title>
@@ -29777,7 +29777,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index d0903ac..17ec608 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -375,7 +375,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 2a9e916..e1706d9 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 9748874..397fefc 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -905,7 +905,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index b7a769e..101ba34 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -313,7 +313,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index d94248e..a22cd86 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -1005,7 +1005,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 200fe3f..27db464 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -116,6 +116,20 @@
 <td><code><a href="org/apache/hadoop/hbase/AuthUtil.html#GROUP_PREFIX">GROUP_PREFIX</a></code></td>
 <td class="colLast"><code>"@"</code></td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.AuthUtil.HBASE_CLIENT_KERBEROS_PRINCIPAL">
+<!--   -->
+</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/AuthUtil.html#HBASE_CLIENT_KERBEROS_PRINCIPAL">HBASE_CLIENT_KERBEROS_PRINCIPAL</a></code></td>
+<td class="colLast"><code>"hbase.client.keytab.principal"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.AuthUtil.HBASE_CLIENT_KEYTAB_FILE">
+<!--   -->
+</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/AuthUtil.html#HBASE_CLIENT_KEYTAB_FILE">HBASE_CLIENT_KEYTAB_FILE</a></code></td>
+<td class="colLast"><code>"hbase.client.keytab.file"</code></td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -3789,21 +3803,21 @@
 <!--   -->
 </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>"Mon Jul 30 14:39:44 UTC 2018"</code></td>
+<td class="colLast"><code>"Tue Jul 31 14:39:51 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </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#revision">revision</a></code></td>
-<td class="colLast"><code>"c075f33fc72fa0e959845fb0f381fdafffbaf8f0"</code></td>
+<td class="colLast"><code>"a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </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>"7bd486154ac85e85ee3e2de1c6cc54de"</code></td>
+<td class="colLast"><code>"c2a84e90859b2952d20d4ce32262b078"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">


[18/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html
index b3b0861..b4d2a85 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncConnectionImpl.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};
+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 tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.62">AsyncConnectionImpl</a>
+class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.65">AsyncConnectionImpl</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="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a></pre>
 <div class="block">The implementation of AsyncConnection.</div>
@@ -141,70 +141,74 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#adminSubs">adminSubs</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#authService">authService</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/AsyncRpcRetryingCallerFactory.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCallerFactory</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#callerFactory">callerFactory</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <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/client/AsyncConnectionImpl.html#conf">conf</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionConfiguration.html" title="class in org.apache.hadoop.hbase.client">AsyncConnectionConfiguration</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#connConf">connConf</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#hostnameCanChange">hostnameCanChange</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/AsyncRegionLocator.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionLocator</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#locator">locator</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.slf4j.Logger</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#masterStub">masterStub</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#masterStubMakeFuture">masterStubMakeFuture</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/NonceGenerator.html" title="interface in org.apache.hadoop.hbase.client">NonceGenerator</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#nonceGenerator">nonceGenerator</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/AsyncRegistry.html" title="interface in org.apache.hadoop.hbase.client">AsyncRegistry</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#registry">registry</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private 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/client/AsyncConnectionImpl.html#RESOLVE_HOSTNAME_ON_FAIL_KEY">RESOLVE_HOSTNAME_ON_FAIL_KEY</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static org.apache.hbase.thirdparty.io.netty.util.HashedWheelTimer</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#RETRY_TIMER">RETRY_TIMER</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc">RpcClient</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#rpcClient">rpcClient</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcControllerFactory.html" title="class in org.apache.hadoop.hbase.ipc">RpcControllerFactory</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#rpcControllerFactory">rpcControllerFactory</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#rpcTimeout">rpcTimeout</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</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.ClientProtos.ClientService.Interface&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#rsStubs">rsStubs</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#user">user</a></span></code>&nbsp;</td>
 </tr>
@@ -337,6 +341,10 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#makeMasterStub-java.util.concurrent.CompletableFuture-">makeMasterStub</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&gt;&nbsp;future)</code>&nbsp;</td>
 </tr>
+<tr id="i19" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#spawnRenewalChore-org.apache.hadoop.security.UserGroupInformation-">spawnRenewalChore</a></span>(org.apache.hadoop.security.UserGroupInformation&nbsp;user)</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -372,7 +380,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <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/client/AsyncConnectionImpl.html#line.64">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.67">LOG</a></pre>
 </li>
 </ul>
 <a name="RETRY_TIMER">
@@ -381,7 +389,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>RETRY_TIMER</h4>
-<pre>static final&nbsp;org.apache.hbase.thirdparty.io.netty.util.HashedWheelTimer <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.67">RETRY_TIMER</a></pre>
+<pre>static final&nbsp;org.apache.hbase.thirdparty.io.netty.util.HashedWheelTimer <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.70">RETRY_TIMER</a></pre>
 </li>
 </ul>
 <a name="RESOLVE_HOSTNAME_ON_FAIL_KEY">
@@ -390,7 +398,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>RESOLVE_HOSTNAME_ON_FAIL_KEY</h4>
-<pre>private static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.70">RESOLVE_HOSTNAME_ON_FAIL_KEY</a></pre>
+<pre>private static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.73">RESOLVE_HOSTNAME_ON_FAIL_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.AsyncConnectionImpl.RESOLVE_HOSTNAME_ON_FAIL_KEY">Constant Field Values</a></dd>
@@ -403,7 +411,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <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/client/AsyncConnectionImpl.html#line.72">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.75">conf</a></pre>
 </li>
 </ul>
 <a name="connConf">
@@ -412,7 +420,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>connConf</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionConfiguration.html" title="class in org.apache.hadoop.hbase.client">AsyncConnectionConfiguration</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.74">connConf</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionConfiguration.html" title="class in org.apache.hadoop.hbase.client">AsyncConnectionConfiguration</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.77">connConf</a></pre>
 </li>
 </ul>
 <a name="user">
@@ -421,7 +429,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>user</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.76">user</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.79">user</a></pre>
 </li>
 </ul>
 <a name="registry">
@@ -430,7 +438,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>registry</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRegistry.html" title="interface in org.apache.hadoop.hbase.client">AsyncRegistry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.78">registry</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRegistry.html" title="interface in org.apache.hadoop.hbase.client">AsyncRegistry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.81">registry</a></pre>
 </li>
 </ul>
 <a name="rpcTimeout">
@@ -439,7 +447,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcTimeout</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.80">rpcTimeout</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.83">rpcTimeout</a></pre>
 </li>
 </ul>
 <a name="rpcClient">
@@ -448,7 +456,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcClient</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc">RpcClient</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.82">rpcClient</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc">RpcClient</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.85">rpcClient</a></pre>
 </li>
 </ul>
 <a name="rpcControllerFactory">
@@ -457,7 +465,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcControllerFactory</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcControllerFactory.html" title="class in org.apache.hadoop.hbase.ipc">RpcControllerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.84">rpcControllerFactory</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcControllerFactory.html" title="class in org.apache.hadoop.hbase.ipc">RpcControllerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.87">rpcControllerFactory</a></pre>
 </li>
 </ul>
 <a name="hostnameCanChange">
@@ -466,7 +474,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>hostnameCanChange</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.86">hostnameCanChange</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.89">hostnameCanChange</a></pre>
 </li>
 </ul>
 <a name="locator">
@@ -475,7 +483,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>locator</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRegionLocator.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionLocator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.88">locator</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRegionLocator.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionLocator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.91">locator</a></pre>
 </li>
 </ul>
 <a name="callerFactory">
@@ -484,7 +492,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>callerFactory</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRpcRetryingCallerFactory.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCallerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.90">callerFactory</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRpcRetryingCallerFactory.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCallerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.93">callerFactory</a></pre>
 </li>
 </ul>
 <a name="nonceGenerator">
@@ -493,7 +501,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>nonceGenerator</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/NonceGenerator.html" title="interface in org.apache.hadoop.hbase.client">NonceGenerator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.92">nonceGenerator</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/NonceGenerator.html" title="interface in org.apache.hadoop.hbase.client">NonceGenerator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.95">nonceGenerator</a></pre>
 </li>
 </ul>
 <a name="rsStubs">
@@ -502,7 +510,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>rsStubs</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</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.ClientProtos.ClientService.Interface&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.94">rsStubs</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</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.ClientProtos.ClientService.Interface&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.97">rsStubs</a></pre>
 </li>
 </ul>
 <a name="adminSubs">
@@ -511,7 +519,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>adminSubs</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</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.AdminProtos.AdminService.Interface&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.95">adminSubs</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</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.AdminProtos.AdminService.Interface&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.98">adminSubs</a></pre>
 </li>
 </ul>
 <a name="masterStub">
@@ -520,16 +528,25 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>masterStub</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.97">masterStub</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.100">masterStub</a></pre>
 </li>
 </ul>
 <a name="masterStubMakeFuture">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>masterStubMakeFuture</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.99">masterStubMakeFuture</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.102">masterStubMakeFuture</a></pre>
+</li>
+</ul>
+<a name="authService">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>authService</h4>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.105">authService</a></pre>
 </li>
 </ul>
 </li>
@@ -546,7 +563,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AsyncConnectionImpl</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.102">AsyncConnectionImpl</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.107">AsyncConnectionImpl</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                            <a href="../../../../../org/apache/hadoop/hbase/client/AsyncRegistry.html" title="interface in org.apache.hadoop.hbase.client">AsyncRegistry</a>&nbsp;registry,
                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;clusterId,
                            <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</pre>
@@ -560,13 +577,22 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="spawnRenewalChore-org.apache.hadoop.security.UserGroupInformation-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>spawnRenewalChore</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.130">spawnRenewalChore</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;user)</pre>
+</li>
+</ul>
 <a name="getConfiguration--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.123">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.136">getConfiguration</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html#getConfiguration--">AsyncConnection</a></code></span></div>
 <div class="block">Returns the <code>Configuration</code> object used by this instance.
  <p>
@@ -583,7 +609,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.128">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.141">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>
@@ -598,7 +624,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLocator</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncTableRegionLocator.html" title="interface in org.apache.hadoop.hbase.client">AsyncTableRegionLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.134">getRegionLocator</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncTableRegionLocator.html" title="interface in org.apache.hadoop.hbase.client">AsyncTableRegionLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.150">getRegionLocator</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html#getRegionLocator-org.apache.hadoop.hbase.TableName-">AsyncConnection</a></code></span></div>
 <div class="block">Retrieve a AsyncRegionLocator implementation to inspect region information on a table. The
  returned AsyncRegionLocator is not thread-safe, so a new instance should be created for each
@@ -620,7 +646,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>getLocator</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/AsyncRegionLocator.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.140">getLocator</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/AsyncRegionLocator.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.156">getLocator</a>()</pre>
 </li>
 </ul>
 <a name="getNonceGenerator--">
@@ -629,7 +655,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>getNonceGenerator</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/NonceGenerator.html" title="interface in org.apache.hadoop.hbase.client">NonceGenerator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.146">getNonceGenerator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/NonceGenerator.html" title="interface in org.apache.hadoop.hbase.client">NonceGenerator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.162">getNonceGenerator</a>()</pre>
 </li>
 </ul>
 <a name="createRegionServerStub-org.apache.hadoop.hbase.ServerName-">
@@ -638,7 +664,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionServerStub</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.150">createRegionServerStub</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.166">createRegionServerStub</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
                                                                                                                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>
@@ -652,7 +678,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerStub</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.154">getRegionServerStub</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.170">getRegionServerStub</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
                                                                                                     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>
@@ -666,7 +692,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>createMasterStub</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.160">createMasterStub</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.176">createMasterStub</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
                                                                                                          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>
@@ -680,7 +706,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>createAdminServerStub</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.Interface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.164">createAdminServerStub</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.Interface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.180">createAdminServerStub</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
                                                                                                             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>
@@ -694,7 +720,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>getAdminStub</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.Interface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.168">getAdminStub</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.Interface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.184">getAdminStub</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
                                                                                            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>
@@ -708,7 +734,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>makeMasterStub</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.174">makeMasterStub</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&gt;&nbsp;future)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.190">makeMasterStub</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&gt;&nbsp;future)</pre>
 </li>
 </ul>
 <a name="getMasterStub--">
@@ -717,7 +743,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterStub</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.208">getMasterStub</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.Interface&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.224">getMasterStub</a>()</pre>
 </li>
 </ul>
 <a name="getRpcController--">
@@ -726,7 +752,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcController</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.250">getRpcController</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.266">getRpcController</a>()</pre>
 </li>
 </ul>
 <a name="getTableBuilder-org.apache.hadoop.hbase.TableName-">
@@ -735,7 +761,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableBuilder</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncTableBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncTableBuilder</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AdvancedScanResultConsumer.html" title="interface in org.apache.hadoop.hbase.client">AdvancedScanResultConsumer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.257">getTableBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncTableBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncTableBuilder</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AdvancedScanResultConsumer.html" title="interface in org.apache.hadoop.hbase.client">AdvancedScanResultConsumer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.273">getTableBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html#getTableBuilder-org.apache.hadoop.hbase.TableName-">AsyncConnection</a></code></span></div>
 <div class="block">Returns an <a href="../../../../../org/apache/hadoop/hbase/client/AsyncTableBuilder.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncTableBuilder</code></a> for creating <a href="../../../../../org/apache/hadoop/hbase/client/AsyncTable.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncTable</code></a>.
  <p>
@@ -755,7 +781,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableBuilder</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncTableBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncTableBuilder</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/ScanResultConsumer.html" title="interface in org.apache.hadoop.hbase.client">ScanResultConsumer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.268">getTableBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncTableBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncTableBuilder</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/ScanResultConsumer.html" title="interface in org.apache.hadoop.hbase.client">ScanResultConsumer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.284">getTableBuilder</a>(<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/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html#getTableBuilder-org.apache.hadoop.hbase.TableName-java.util.concurrent.ExecutorService-">AsyncConnection</a></code></span></div>
 <div class="block">Returns an <a href="../../../../../org/apache/hadoop/hbase/client/AsyncTableBuilder.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncTableBuilder</code></a> for creating <a href="../../../../../org/apache/hadoop/hbase/client/AsyncTable.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncTable</code></a>.
@@ -777,7 +803,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>getAdminBuilder</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdminBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdminBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.281">getAdminBuilder</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdminBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdminBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.297">getAdminBuilder</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html#getAdminBuilder--">AsyncConnection</a></code></span></div>
 <div class="block">Returns an <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdminBuilder.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncAdminBuilder</code></a> for creating <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncAdmin</code></a>.
  <p>
@@ -796,7 +822,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>getAdminBuilder</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdminBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdminBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.291">getAdminBuilder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdminBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdminBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.307">getAdminBuilder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html#getAdminBuilder-java.util.concurrent.ExecutorService-">AsyncConnection</a></code></span></div>
 <div class="block">Returns an <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdminBuilder.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncAdminBuilder</code></a> for creating <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncAdmin</code></a>.</div>
 <dl>
@@ -813,7 +839,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockList">
 <li class="blockList">
 <h4>getBufferedMutatorBuilder</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutatorBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncBufferedMutatorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.303">getBufferedMutatorBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutatorBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncBufferedMutatorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.319">getBufferedMutatorBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html#getBufferedMutatorBuilder-org.apache.hadoop.hbase.TableName-">AsyncConnection</a></code></span></div>
 <div class="block">Returns an <a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutatorBuilder.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncBufferedMutatorBuilder</code></a> for creating <a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutator.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncBufferedMutator</code></a>.</div>
 <dl>
@@ -830,7 +856,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectio
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getBufferedMutatorBuilder</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutatorBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncBufferedMutatorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.308">getBufferedMutatorBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutatorBuilder.html" title="interface in org.apache.hadoop.hbase.client">AsyncBufferedMutatorBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#line.324">getBufferedMutatorBuilder</a>(<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/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html#getBufferedMutatorBuilder-org.apache.hadoop.hbase.TableName-java.util.concurrent.ExecutorService-">AsyncConnection</a></code></span></div>
 <div class="block">Returns an <a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutatorBuilder.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncBufferedMutatorBuilder</code></a> for creating <a href="../../../../../org/apache/hadoop/hbase/client/AsyncBufferedMutator.html" title="interface in org.apache.hadoop.hbase.client"><code>AsyncBufferedMutator</code></a>.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/client/ConnectionFactory.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ConnectionFactory.html b/devapidocs/org/apache/hadoop/hbase/client/ConnectionFactory.html
index 3183fe0..c725c56 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ConnectionFactory.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ConnectionFactory.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.56">ConnectionFactory</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.68">ConnectionFactory</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">A non-instantiable class that manages creation of <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client"><code>Connection</code></a>s. Managing the lifecycle of
  the <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client"><code>Connection</code></a>s to the cluster is the responsibility of the caller. From a
@@ -128,6 +128,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  }
  </pre>
 
+ Since 2.2.0, Connection created by ConnectionFactory can contain user-specified kerberos
+ credentials if caller has following two configurations set:
+ <ul>
+   <li>hbase.client.keytab.file, points to a valid keytab on the local filesystem
+   <li>hbase.client.kerberos.principal, gives the Kerberos principal to use
+ </ul>
+ By this way, caller can directly connect to kerberized cluster without caring login and
+ credentials renewal logic in application.
+ <pre>
+ </pre>
  Similarly, <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client"><code>Connection</code></a> also returns <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client"><code>Admin</code></a> and <a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionLocator</code></a>
  implementations.</div>
 <dl>
@@ -276,7 +286,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HBASE_CLIENT_ASYNC_CONNECTION_IMPL</h4>
-<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.58">HBASE_CLIENT_ASYNC_CONNECTION_IMPL</a></pre>
+<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.70">HBASE_CLIENT_ASYNC_CONNECTION_IMPL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.ConnectionFactory.HBASE_CLIENT_ASYNC_CONNECTION_IMPL">Constant Field Values</a></dd>
@@ -297,7 +307,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ConnectionFactory</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.61">ConnectionFactory</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.73">ConnectionFactory</a>()</pre>
 <div class="block">No public c.tors</div>
 </li>
 </ul>
@@ -315,7 +325,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createConnection</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.86">createConnection</a>()
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.98">createConnection</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">Create a new Connection instance using default HBaseConfiguration. Connection encapsulates all
  housekeeping for a connection to the cluster. All tables and interfaces created from returned
@@ -349,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>createConnection</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.113">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.126">createConnection</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">Create a new Connection instance using the passed <code>conf</code> instance. Connection
  encapsulates all housekeeping for a connection to the cluster. All tables and interfaces
@@ -385,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>createConnection</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.141">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.154">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)
                                    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 a new Connection instance using the passed <code>conf</code> instance. Connection
@@ -423,7 +433,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createConnection</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.170">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.183">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                           <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</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>
 <div class="block">Create a new Connection instance using the passed <code>conf</code> instance. Connection
@@ -461,7 +471,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createConnection</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.199">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.212">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool,
                                           <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</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>
@@ -501,7 +511,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createAsyncConnection</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.230">createAsyncConnection</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.240">createAsyncConnection</a>()</pre>
 <div class="block">Call <a href="../../../../../org/apache/hadoop/hbase/client/ConnectionFactory.html#createAsyncConnection-org.apache.hadoop.conf.Configuration-"><code>createAsyncConnection(Configuration)</code></a> using default HBaseConfiguration.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -517,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>createAsyncConnection</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.243">createAsyncConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.253">createAsyncConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Call <a href="../../../../../org/apache/hadoop/hbase/client/ConnectionFactory.html#createAsyncConnection-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.security.User-"><code>createAsyncConnection(Configuration, User)</code></a> using the given <code>conf</code> and a
  User object created by <a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security"><code>UserProvider</code></a>. The given <code>conf</code> will also be used to
  initialize the <a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security"><code>UserProvider</code></a>.</div>
@@ -538,7 +548,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createAsyncConnection</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.271">createAsyncConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.281">createAsyncConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                        <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</pre>
 <div class="block">Create a new AsyncConnection instance using the passed <code>conf</code> and <code>user</code>.
  AsyncConnection encapsulates all housekeeping for a connection to the cluster. All tables and

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html b/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html
index 18c887d..4b673f5 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.987">ConnectionImplementation.MasterServiceState</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1000">ConnectionImplementation.MasterServiceState</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">State of the MasterService connection/setup.</div>
 </li>
@@ -222,7 +222,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>connection</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.988">connection</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.1001">connection</a></pre>
 </li>
 </ul>
 <a name="stub">
@@ -231,7 +231,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>stub</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.990">stub</a></pre>
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.1003">stub</a></pre>
 </li>
 </ul>
 <a name="userCount">
@@ -240,7 +240,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>userCount</h4>
-<pre>int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.991">userCount</a></pre>
+<pre>int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.1004">userCount</a></pre>
 </li>
 </ul>
 </li>
@@ -257,7 +257,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MasterServiceState</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.993">MasterServiceState</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.1006">MasterServiceState</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection)</pre>
 </li>
 </ul>
 </li>
@@ -274,7 +274,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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/client/ConnectionImplementation.MasterServiceState.html#line.999">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/client/ConnectionImplementation.MasterServiceState.html#line.1012">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>
@@ -287,7 +287,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getStub</h4>
-<pre><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;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.1003">getStub</a>()</pre>
+<pre><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;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.1016">getStub</a>()</pre>
 </li>
 </ul>
 <a name="clearStub--">
@@ -296,7 +296,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>clearStub</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.1007">clearStub</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.1020">clearStub</a>()</pre>
 </li>
 </ul>
 <a name="isMasterRunning--">
@@ -305,7 +305,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isMasterRunning</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.1011">isMasterRunning</a>()
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.1024">isMasterRunning</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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html b/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html
index 115cae2..264baa7 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1102">ConnectionImplementation.MasterServiceStubMaker</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1115">ConnectionImplementation.MasterServiceStubMaker</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">Class to make a MasterServiceStubMaker stub.</div>
 </li>
@@ -197,7 +197,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MasterServiceStubMaker</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html#line.1102">MasterServiceStubMaker</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html#line.1115">MasterServiceStubMaker</a>()</pre>
 </li>
 </ul>
 </li>
@@ -214,7 +214,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isMasterRunning</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html#line.1104">isMasterRunning</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.BlockingInterface&nbsp;stub)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html#line.1117">isMasterRunning</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.BlockingInterface&nbsp;stub)
                       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>
@@ -228,7 +228,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>makeStubNoRetries</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.BlockingInterface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html#line.1118">makeStubNoRetries</a>()
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.BlockingInterface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html#line.1131">makeStubNoRetries</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>,
                                                                                                                          org.apache.zookeeper.KeeperException</pre>
 <div class="block">Create a stub. Try once only. It is not typed because there is no common type to protobuf
@@ -248,7 +248,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>makeStub</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.BlockingInterface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html#line.1146">makeStub</a>()
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService.BlockingInterface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html#line.1159">makeStub</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">Create a stub against the master. Retry if necessary.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html b/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html
index 51e4aa3..a8d481c 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1086">ConnectionImplementation.ServerErrorTracker.ServerErrors</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1099">ConnectionImplementation.ServerErrorTracker.ServerErrors</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">The record of errors for a server.</div>
 </li>
@@ -208,7 +208,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>retries</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html#line.1087">retries</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html#line.1100">retries</a></pre>
 </li>
 </ul>
 </li>
@@ -225,7 +225,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ServerErrors</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html#line.1086">ServerErrors</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html#line.1099">ServerErrors</a>()</pre>
 </li>
 </ul>
 </li>
@@ -242,7 +242,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html#line.1089">getCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html#line.1102">getCount</a>()</pre>
 </li>
 </ul>
 <a name="addError--">
@@ -251,7 +251,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>addError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html#line.1093">addError</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html#line.1106">addError</a>()</pre>
 </li>
 </ul>
 </li>


[16/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.html b/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.html
index 7927fbf..5ba6cd6 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.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":9,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":9,"i48":10,"i49":10,"i50":10,"i51":10,"i52":42,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":9,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":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":9,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":9,"i48":10,"i49":10,"i50":10,"i51":10,"i52":42,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":9,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.140">ConnectionImplementation</a>
+class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.143">ConnectionImplementation</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="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>, <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">Main implementation of <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client"><code>Connection</code></a> and <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client"><code>ClusterConnection</code></a> interfaces.
@@ -190,148 +190,152 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#asyncProcess">asyncProcess</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#authService">authService</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/backoff/ClientBackoffPolicy.html" title="interface in org.apache.hadoop.hbase.client.backoff">ClientBackoffPolicy</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#backoffPolicy">backoffPolicy</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#batchPool">batchPool</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#cleanupPool">cleanupPool</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#closed">closed</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <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/client/ConnectionImplementation.html#clusterId">clusterId</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/ClusterStatusListener.html" title="class in org.apache.hadoop.hbase.client">ClusterStatusListener</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#clusterStatusListener">clusterStatusListener</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<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/client/ConnectionImplementation.html#conf">conf</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/ConnectionConfiguration.html" title="class in org.apache.hadoop.hbase.client">ConnectionConfiguration</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#connectionConfig">connectionConfig</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#hostnamesCanChange">hostnamesCanChange</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallerInterceptor.html" title="class in org.apache.hadoop.hbase.client">RetryingCallerInterceptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#interceptor">interceptor</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<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/client/ConnectionImplementation.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<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/client/ConnectionImplementation.html#masterLock">masterLock</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html" title="class in org.apache.hadoop.hbase.client">ConnectionImplementation.MasterServiceState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#masterServiceState">masterServiceState</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html" title="class in org.apache.hadoop.hbase.client">MetaCache</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#metaCache">metaCache</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#metaLookupPool">metaLookupPool</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<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/client/ConnectionImplementation.html#metaRegionLock">metaRegionLock</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#metaReplicaCallTimeoutScanInMicroSecond">metaReplicaCallTimeoutScanInMicroSecond</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/MetricsConnection.html" title="class in org.apache.hadoop.hbase.client">MetricsConnection</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#metrics">metrics</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/client/NonceGenerator.html" title="interface in org.apache.hadoop.hbase.client">NonceGenerator</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#nonceGenerator">nonceGenerator</a></span></code>
 <div class="block">Global nonceGenerator shared per client.Currently there's no reason to limit its scope.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <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/client/ConnectionImplementation.html#nonceGeneratorCreateLock">nonceGeneratorCreateLock</a></span></code>
 <div class="block">The nonce generator lock.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#numTries">numTries</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#pause">pause</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#pauseForCQTBE">pauseForCQTBE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/AsyncRegistry.html" title="interface in org.apache.hadoop.hbase.client">AsyncRegistry</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#registry">registry</a></span></code>
 <div class="block">Cluster registry of basic info such as clusterid and meta region location.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private 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/client/ConnectionImplementation.html#RESOLVE_HOSTNAME_ON_FAIL_KEY">RESOLVE_HOSTNAME_ON_FAIL_KEY</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <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/client/ConnectionImplementation.html#RETRIES_BY_SERVER_KEY">RETRIES_BY_SERVER_KEY</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/RpcRetryingCallerFactory.html" title="class in org.apache.hadoop.hbase.client">RpcRetryingCallerFactory</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#rpcCallerFactory">rpcCallerFactory</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc">RpcClient</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#rpcClient">rpcClient</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcControllerFactory.html" title="class in org.apache.hadoop.hbase.ipc">RpcControllerFactory</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#rpcControllerFactory">rpcControllerFactory</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#rpcTimeout">rpcTimeout</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/ServerStatisticTracker.html" title="class in org.apache.hadoop.hbase.client">ServerStatisticTracker</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#stats">stats</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</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/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#stubs">stubs</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#useMetaReplicas">useMetaReplicas</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#user">user</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#userRegionLock">userRegionLock</a></span></code>
 <div class="block">lock guards against multiple threads trying to query the meta region at the same time</div>
@@ -789,19 +793,23 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#shutdownPools--">shutdownPools</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i73" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#spawnRenewalChore-org.apache.hadoop.security.UserGroupInformation-">spawnRenewalChore</a></span>(org.apache.hadoop.security.UserGroupInformation&nbsp;user)</code>&nbsp;</td>
+</tr>
+<tr id="i74" 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/client/ConnectionImplementation.html#toString--">toString</a></span>()</code>
 <div class="block">An identifier that will remain the same for a given connection.</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#updateCachedLocation-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.ServerName-long-">updateCachedLocation</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                     <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;source,
                     <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                     long&nbsp;seqNum)</code>&nbsp;</td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#updateCachedLocations-org.apache.hadoop.hbase.TableName-byte:A-byte:A-java.lang.Object-org.apache.hadoop.hbase.ServerName-">updateCachedLocations</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                      byte[]&nbsp;regionName,
@@ -847,7 +855,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>RETRIES_BY_SERVER_KEY</h4>
-<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.141">RETRIES_BY_SERVER_KEY</a></pre>
+<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.144">RETRIES_BY_SERVER_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.ConnectionImplementation.RETRIES_BY_SERVER_KEY">Constant Field Values</a></dd>
@@ -860,7 +868,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <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/client/ConnectionImplementation.html#line.142">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.145">LOG</a></pre>
 </li>
 </ul>
 <a name="RESOLVE_HOSTNAME_ON_FAIL_KEY">
@@ -869,7 +877,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>RESOLVE_HOSTNAME_ON_FAIL_KEY</h4>
-<pre>private static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.144">RESOLVE_HOSTNAME_ON_FAIL_KEY</a></pre>
+<pre>private static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.147">RESOLVE_HOSTNAME_ON_FAIL_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.ConnectionImplementation.RESOLVE_HOSTNAME_ON_FAIL_KEY">Constant Field Values</a></dd>
@@ -882,7 +890,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>hostnamesCanChange</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.146">hostnamesCanChange</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.149">hostnamesCanChange</a></pre>
 </li>
 </ul>
 <a name="pause">
@@ -891,7 +899,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>pause</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.147">pause</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.150">pause</a></pre>
 </li>
 </ul>
 <a name="pauseForCQTBE">
@@ -900,7 +908,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>pauseForCQTBE</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.148">pauseForCQTBE</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.151">pauseForCQTBE</a></pre>
 </li>
 </ul>
 <a name="useMetaReplicas">
@@ -909,7 +917,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>useMetaReplicas</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.149">useMetaReplicas</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.152">useMetaReplicas</a></pre>
 </li>
 </ul>
 <a name="metaReplicaCallTimeoutScanInMicroSecond">
@@ -918,7 +926,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>metaReplicaCallTimeoutScanInMicroSecond</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.150">metaReplicaCallTimeoutScanInMicroSecond</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.153">metaReplicaCallTimeoutScanInMicroSecond</a></pre>
 </li>
 </ul>
 <a name="numTries">
@@ -927,7 +935,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>numTries</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.151">numTries</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.154">numTries</a></pre>
 </li>
 </ul>
 <a name="rpcTimeout">
@@ -936,7 +944,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcTimeout</h4>
-<pre>final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.152">rpcTimeout</a></pre>
+<pre>final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.155">rpcTimeout</a></pre>
 </li>
 </ul>
 <a name="nonceGenerator">
@@ -945,7 +953,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>nonceGenerator</h4>
-<pre>private static volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/NonceGenerator.html" title="interface in org.apache.hadoop.hbase.client">NonceGenerator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.158">nonceGenerator</a></pre>
+<pre>private static volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/NonceGenerator.html" title="interface in org.apache.hadoop.hbase.client">NonceGenerator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.161">nonceGenerator</a></pre>
 <div class="block">Global nonceGenerator shared per client.Currently there's no reason to limit its scope.
  Once it's set under nonceGeneratorCreateLock, it is never unset or changed.</div>
 </li>
@@ -956,7 +964,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>nonceGeneratorCreateLock</h4>
-<pre>private static 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/client/ConnectionImplementation.html#line.160">nonceGeneratorCreateLock</a></pre>
+<pre>private static 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/client/ConnectionImplementation.html#line.163">nonceGeneratorCreateLock</a></pre>
 <div class="block">The nonce generator lock. Only taken when creating Connection, which gets a private copy.</div>
 </li>
 </ul>
@@ -966,7 +974,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>asyncProcess</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.html" title="class in org.apache.hadoop.hbase.client">AsyncProcess</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.162">asyncProcess</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.html" title="class in org.apache.hadoop.hbase.client">AsyncProcess</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.165">asyncProcess</a></pre>
 </li>
 </ul>
 <a name="stats">
@@ -975,7 +983,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>stats</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ServerStatisticTracker.html" title="class in org.apache.hadoop.hbase.client">ServerStatisticTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.164">stats</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ServerStatisticTracker.html" title="class in org.apache.hadoop.hbase.client">ServerStatisticTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.167">stats</a></pre>
 </li>
 </ul>
 <a name="closed">
@@ -984,7 +992,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>closed</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.166">closed</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.169">closed</a></pre>
 </li>
 </ul>
 <a name="aborted">
@@ -993,7 +1001,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>aborted</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.167">aborted</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.170">aborted</a></pre>
 </li>
 </ul>
 <a name="clusterStatusListener">
@@ -1002,7 +1010,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterStatusListener</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/ClusterStatusListener.html" title="class in org.apache.hadoop.hbase.client">ClusterStatusListener</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.170">clusterStatusListener</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/ClusterStatusListener.html" title="class in org.apache.hadoop.hbase.client">ClusterStatusListener</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.173">clusterStatusListener</a></pre>
 </li>
 </ul>
 <a name="metaRegionLock">
@@ -1011,7 +1019,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>metaRegionLock</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/client/ConnectionImplementation.html#line.172">metaRegionLock</a></pre>
+<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/client/ConnectionImplementation.html#line.175">metaRegionLock</a></pre>
 </li>
 </ul>
 <a name="masterLock">
@@ -1020,7 +1028,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>masterLock</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/client/ConnectionImplementation.html#line.174">masterLock</a></pre>
+<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/client/ConnectionImplementation.html#line.177">masterLock</a></pre>
 </li>
 </ul>
 <a name="batchPool">
@@ -1029,7 +1037,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>batchPool</h4>
-<pre>private volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.178">batchPool</a></pre>
+<pre>private volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.181">batchPool</a></pre>
 </li>
 </ul>
 <a name="metaLookupPool">
@@ -1038,7 +1046,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>metaLookupPool</h4>
-<pre>private volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.181">metaLookupPool</a></pre>
+<pre>private volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.184">metaLookupPool</a></pre>
 </li>
 </ul>
 <a name="cleanupPool">
@@ -1047,7 +1055,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupPool</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.182">cleanupPool</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.185">cleanupPool</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -1056,7 +1064,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <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/client/ConnectionImplementation.html#line.184">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.187">conf</a></pre>
 </li>
 </ul>
 <a name="connectionConfig">
@@ -1065,7 +1073,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>connectionConfig</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ConnectionConfiguration.html" title="class in org.apache.hadoop.hbase.client">ConnectionConfiguration</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.188">connectionConfig</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ConnectionConfiguration.html" title="class in org.apache.hadoop.hbase.client">ConnectionConfiguration</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.191">connectionConfig</a></pre>
 </li>
 </ul>
 <a name="rpcClient">
@@ -1074,7 +1082,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcClient</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc">RpcClient</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.191">rpcClient</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc">RpcClient</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.194">rpcClient</a></pre>
 </li>
 </ul>
 <a name="metaCache">
@@ -1083,7 +1091,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>metaCache</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html" title="class in org.apache.hadoop.hbase.client">MetaCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.193">metaCache</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html" title="class in org.apache.hadoop.hbase.client">MetaCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.196">metaCache</a></pre>
 </li>
 </ul>
 <a name="metrics">
@@ -1092,7 +1100,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>metrics</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/MetricsConnection.html" title="class in org.apache.hadoop.hbase.client">MetricsConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.194">metrics</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/MetricsConnection.html" title="class in org.apache.hadoop.hbase.client">MetricsConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.197">metrics</a></pre>
 </li>
 </ul>
 <a name="user">
@@ -1101,7 +1109,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>user</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.196">user</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.199">user</a></pre>
 </li>
 </ul>
 <a name="rpcCallerFactory">
@@ -1110,7 +1118,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcCallerFactory</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RpcRetryingCallerFactory.html" title="class in org.apache.hadoop.hbase.client">RpcRetryingCallerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.198">rpcCallerFactory</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RpcRetryingCallerFactory.html" title="class in org.apache.hadoop.hbase.client">RpcRetryingCallerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.201">rpcCallerFactory</a></pre>
 </li>
 </ul>
 <a name="rpcControllerFactory">
@@ -1119,7 +1127,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcControllerFactory</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcControllerFactory.html" title="class in org.apache.hadoop.hbase.ipc">RpcControllerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.200">rpcControllerFactory</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcControllerFactory.html" title="class in org.apache.hadoop.hbase.ipc">RpcControllerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.203">rpcControllerFactory</a></pre>
 </li>
 </ul>
 <a name="interceptor">
@@ -1128,7 +1136,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>interceptor</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallerInterceptor.html" title="class in org.apache.hadoop.hbase.client">RetryingCallerInterceptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.202">interceptor</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RetryingCallerInterceptor.html" title="class in org.apache.hadoop.hbase.client">RetryingCallerInterceptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.205">interceptor</a></pre>
 </li>
 </ul>
 <a name="registry">
@@ -1137,7 +1145,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>registry</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRegistry.html" title="interface in org.apache.hadoop.hbase.client">AsyncRegistry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.207">registry</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRegistry.html" title="interface in org.apache.hadoop.hbase.client">AsyncRegistry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.210">registry</a></pre>
 <div class="block">Cluster registry of basic info such as clusterid and meta region location.</div>
 </li>
 </ul>
@@ -1147,7 +1155,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>backoffPolicy</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/backoff/ClientBackoffPolicy.html" title="interface in org.apache.hadoop.hbase.client.backoff">ClientBackoffPolicy</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.209">backoffPolicy</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/backoff/ClientBackoffPolicy.html" title="interface in org.apache.hadoop.hbase.client.backoff">ClientBackoffPolicy</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.212">backoffPolicy</a></pre>
 </li>
 </ul>
 <a name="alternateBufferedMutatorClassName">
@@ -1156,7 +1164,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>alternateBufferedMutatorClassName</h4>
-<pre>private 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.215">alternateBufferedMutatorClassName</a></pre>
+<pre>private 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.218">alternateBufferedMutatorClassName</a></pre>
 <div class="block">Allow setting an alternate BufferedMutator implementation via
  config. If null, use default.</div>
 </li>
@@ -1167,17 +1175,26 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>userRegionLock</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.218">userRegionLock</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.221">userRegionLock</a></pre>
 <div class="block">lock guards against multiple threads trying to query the meta region at the same time</div>
 </li>
 </ul>
+<a name="authService">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>authService</h4>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.223">authService</a></pre>
+</li>
+</ul>
 <a name="clusterId">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterId</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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.522">clusterId</a></pre>
+<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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.535">clusterId</a></pre>
 </li>
 </ul>
 <a name="stubs">
@@ -1186,7 +1203,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>stubs</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</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/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.982">stubs</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</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/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.995">stubs</a></pre>
 </li>
 </ul>
 <a name="masterServiceState">
@@ -1195,7 +1212,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockListLast">
 <li class="blockList">
 <h4>masterServiceState</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html" title="class in org.apache.hadoop.hbase.client">ConnectionImplementation.MasterServiceState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1203">masterServiceState</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html" title="class in org.apache.hadoop.hbase.client">ConnectionImplementation.MasterServiceState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1216">masterServiceState</a></pre>
 </li>
 </ul>
 </li>
@@ -1212,7 +1229,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ConnectionImplementation</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.224">ConnectionImplementation</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.229">ConnectionImplementation</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool,
                          <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</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>
@@ -1233,13 +1250,22 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="spawnRenewalChore-org.apache.hadoop.security.UserGroupInformation-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>spawnRenewalChore</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.325">spawnRenewalChore</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;user)</pre>
+</li>
+</ul>
 <a name="setUseMetaReplicas-boolean-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setUseMetaReplicas</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.321">setUseMetaReplicas</a>(boolean&nbsp;useMetaReplicas)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.334">setUseMetaReplicas</a>(boolean&nbsp;useMetaReplicas)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>useMetaReplicas</code> - </dd>
@@ -1252,7 +1278,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>injectNonceGeneratorForTesting</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/NonceGenerator.html" title="interface in org.apache.hadoop.hbase.client">NonceGenerator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.331">injectNonceGeneratorForTesting</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;conn,
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/NonceGenerator.html" title="interface in org.apache.hadoop.hbase.client">NonceGenerator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.344">injectNonceGeneratorForTesting</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;conn,
                                                      <a href="../../../../../org/apache/hadoop/hbase/client/NonceGenerator.html" title="interface in org.apache.hadoop.hbase.client">NonceGenerator</a>&nbsp;cnm)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1269,7 +1295,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getTable</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.342">getTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.355">getTable</a>(<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/client/Connection.html#getTable-org.apache.hadoop.hbase.TableName-">Connection</a></code></span></div>
 <div class="block">Retrieve a Table implementation for accessing a table.
@@ -1301,7 +1327,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableBuilder</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableBuilder.html" title="interface in org.apache.hadoop.hbase.client">TableBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.347">getTableBuilder</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableBuilder.html" title="interface in org.apache.hadoop.hbase.client">TableBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.360">getTableBuilder</a>(<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/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getTableBuilder-org.apache.hadoop.hbase.TableName-java.util.concurrent.ExecutorService-">Connection</a></code></span></div>
 <div class="block">Returns an <a href="../../../../../org/apache/hadoop/hbase/client/TableBuilder.html" title="interface in org.apache.hadoop.hbase.client"><code>TableBuilder</code></a> for creating <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client"><code>Table</code></a>.</div>
@@ -1320,7 +1346,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getBufferedMutator</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">BufferedMutator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.359">getBufferedMutator</a>(<a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutatorParams.html" title="class in org.apache.hadoop.hbase.client">BufferedMutatorParams</a>&nbsp;params)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">BufferedMutator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.372">getBufferedMutator</a>(<a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutatorParams.html" title="class in org.apache.hadoop.hbase.client">BufferedMutatorParams</a>&nbsp;params)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getBufferedMutator-org.apache.hadoop.hbase.client.BufferedMutatorParams-">Connection</a></code></span></div>
 <div class="block">Retrieve a <a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client"><code>BufferedMutator</code></a> for performing client-side buffering of writes. The
  <a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client"><code>BufferedMutator</code></a> returned by this method is thread-safe. This object can be used for
@@ -1342,7 +1368,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getBufferedMutator</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">BufferedMutator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.398">getBufferedMutator</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">BufferedMutator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.411">getBufferedMutator</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getBufferedMutator-org.apache.hadoop.hbase.TableName-">Connection</a></code></span></div>
 <div class="block"><p>
  Retrieve a <a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client"><code>BufferedMutator</code></a> for performing client-side buffering of writes. The
@@ -1372,7 +1398,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLocator</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.403">getRegionLocator</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.416">getRegionLocator</a>(<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/client/Connection.html#getRegionLocator-org.apache.hadoop.hbase.TableName-">Connection</a></code></span></div>
 <div class="block">Retrieve a RegionLocator implementation to inspect region information on a table. The returned
@@ -1403,7 +1429,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getAdmin</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.408">getAdmin</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.421">getAdmin</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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getAdmin--">Connection</a></code></span></div>
 <div class="block">Retrieve an Admin implementation to administer an HBase cluster.
@@ -1429,7 +1455,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnectionMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/MetricsConnection.html" title="class in org.apache.hadoop.hbase.client">MetricsConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.413">getConnectionMetrics</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/MetricsConnection.html" title="class in org.apache.hadoop.hbase.client">MetricsConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.426">getConnectionMetrics</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html#getConnectionMetrics--">getConnectionMetrics</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a></code></dd>
@@ -1444,7 +1470,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getBatchPool</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.417">getBatchPool</a>()</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.430">getBatchPool</a>()</pre>
 </li>
 </ul>
 <a name="getThreadPool-int-int-java.lang.String-java.util.concurrent.BlockingQueue-">
@@ -1453,7 +1479,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getThreadPool</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.430">getThreadPool</a>(int&nbsp;maxThreads,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.443">getThreadPool</a>(int&nbsp;maxThreads,
                                       int&nbsp;coreThreads,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;nameHint,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<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>&gt;&nbsp;passedWorkQueue)</pre>
@@ -1465,7 +1491,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaLookupPool</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.459">getMetaLookupPool</a>()</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.472">getMetaLookupPool</a>()</pre>
 </li>
 </ul>
 <a name="getCurrentMetaLookupPool--">
@@ -1474,7 +1500,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentMetaLookupPool</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.478">getCurrentMetaLookupPool</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.491">getCurrentMetaLookupPool</a>()</pre>
 </li>
 </ul>
 <a name="getCurrentBatchPool--">
@@ -1483,7 +1509,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentBatchPool</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.482">getCurrentBatchPool</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.495">getCurrentBatchPool</a>()</pre>
 </li>
 </ul>
 <a name="shutdownPools--">
@@ -1492,7 +1518,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownPools</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.486">shutdownPools</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.499">shutdownPools</a>()</pre>
 </li>
 </ul>
 <a name="shutdownBatchPool-java.util.concurrent.ExecutorService-">
@@ -1501,7 +1527,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownBatchPool</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.495">shutdownBatchPool</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.508">shutdownBatchPool</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</pre>
 </li>
 </ul>
 <a name="getRpcClient--">
@@ -1510,7 +1536,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcClient</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc">RpcClient</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.510">getRpcClient</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc">RpcClient</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.523">getRpcClient</a>()</pre>
 <div class="block">For tests only.</div>
 </li>
 </ul>
@@ -1520,7 +1546,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <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/client/ConnectionImplementation.html#line.518">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/client/ConnectionImplementation.html#line.531">toString</a>()</pre>
 <div class="block">An identifier that will remain the same for a given connection.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -1534,7 +1560,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>retrieveClusterId</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.524">retrieveClusterId</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.537">retrieveClusterId</a>()</pre>
 </li>
 </ul>
 <a name="getConfiguration--">
@@ -1543,7 +1569,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.540">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.553">getConfiguration</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getConfiguration--">getConfiguration</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a></code></dd>
@@ -1558,7 +1584,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>checkClosed</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.544">checkClosed</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.557">checkClosed</a>()
                   throws <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1573,7 +1599,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <li class="blockList">
 <h4>isMasterRunning</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.557">isMasterRunning</a>()
+public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.570">isMasterRunning</a>()
                                     throws <a href="../../../../../org/apache/hadoop/hbase/MasterNotRunningException.html" title="class in org.apache.hadoop.hbase">MasterNotRunningException</a>,
                                            <a href="../../../../../org/apache/hadoop/hbase/ZooKeeperConnectionException.html" title="class in org.apache.hadoop.hbase">ZooKeeperConnectionException</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">this has been deprecated without a replacement</span></div>
@@ -1594,7 +1620,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLocation</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.572">getRegionLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.585">getRegionLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                          byte[]&nbsp;row,
                                          boolean&nbsp;reload)
                                   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>
@@ -1620,7 +1646,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isTableEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.579">isTableEnabled</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.592">isTableEnabled</a>(<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/client/ClusterConnection.html#isTableEnabled-org.apache.hadoop.hbase.TableName-">ClusterConnection</a></code></span></div>
 <div class="block">A table that isTableEnabled == false and isTableDisabled == false
@@ -1644,7 +1670,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isTableDisabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.584">isTableDisabled</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.597">isTableDisabled</a>(<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="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1664,7 +1690,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isTableAvailable</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.589">isTableAvailable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.602">isTableAvailable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                 @Nullable
                                 byte[][]&nbsp;splitKeys)
                          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>
@@ -1690,7 +1716,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>locateRegion</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.648">locateRegion</a>(byte[]&nbsp;regionName)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.661">locateRegion</a>(byte[]&nbsp;regionName)
                              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/client/ClusterConnection.html#locateRegion-byte:A-">ClusterConnection</a></code></span></div>
 <div class="block">Gets the location of the region of <i>regionName</i>.</div>
@@ -1713,7 +1739,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isDeadServer</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.654">isDeadServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.667">isDeadServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 </li>
 </ul>
 <a name="locateRegions-org.apache.hadoop.hbase.TableName-">
@@ -1722,7 +1748,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>locateRegions</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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.663">locateRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.676">locateRegions</a>(<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/client/ClusterConnection.html#locateRegions-org.apache.hadoop.hbase.TableName-">ClusterConnection</a></code></span></div>
 <div class="block">Gets the locations of all regions in the specified table, <i>tableName</i>.</div>
@@ -1744,7 +1770,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>locateRegions</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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.668">locateRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.681">locateRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                            boolean&nbsp;useCache,
                                            boolean&nbsp;offlined)
                                     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>
@@ -1771,7 +1797,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>locateRegion</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.694">locateRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.707">locateRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     byte[]&nbsp;row)
                              throws <a href="https://docs.oracle.com/javas

<TRUNCATED>

[09/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html
index 1ad6fc7..99b6bf2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html
@@ -54,1964 +54,1980 @@
 <span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import org.apache.hadoop.conf.Configuration;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.CallQueueTooBigException;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HConstants;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.ServerName;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.TableNotEnabledException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicy;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicyFactory;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.exceptions.ClientExceptionsUtil;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.exceptions.RegionMovedException;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.ipc.RpcClientFactory;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.security.User;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.ExceptionUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.zookeeper.KeeperException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.slf4j.Logger;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.slf4j.LoggerFactory;<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.com.google.common.base.Throwables;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersRequest;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledRequest;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesRequest;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesRequest;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateRequest;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateResponse;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>/**<a name="line.132"></a>
-<span class="sourceLineNo">133</span> * Main implementation of {@link Connection} and {@link ClusterConnection} interfaces.<a name="line.133"></a>
-<span class="sourceLineNo">134</span> * Encapsulates connection to zookeeper and regionservers.<a name="line.134"></a>
-<span class="sourceLineNo">135</span> */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    value="AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION",<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    justification="Access to the conncurrent hash map is under a lock so should be fine.")<a name="line.138"></a>
-<span class="sourceLineNo">139</span>@InterfaceAudience.Private<a name="line.139"></a>
-<span class="sourceLineNo">140</span>class ConnectionImplementation implements ClusterConnection, Closeable {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  public static final String RETRIES_BY_SERVER_KEY = "hbase.client.retries.by.server";<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private static final Logger LOG = LoggerFactory.getLogger(ConnectionImplementation.class);<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private static final String RESOLVE_HOSTNAME_ON_FAIL_KEY = "hbase.resolve.hostnames.on.failure";<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final boolean hostnamesCanChange;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private final long pause;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private final long pauseForCQTBE;// pause for CallQueueTooBigException, if specified<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private boolean useMetaReplicas;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private final int metaReplicaCallTimeoutScanInMicroSecond;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private final int numTries;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  final int rpcTimeout;<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>   * Global nonceGenerator shared per client.Currently there's no reason to limit its scope.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Once it's set under nonceGeneratorCreateLock, it is never unset or changed.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  private static volatile NonceGenerator nonceGenerator = null;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  /** The nonce generator lock. Only taken when creating Connection, which gets a private copy. */<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  private static final Object nonceGeneratorCreateLock = new Object();<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private final AsyncProcess asyncProcess;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  // single tracker per connection<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  private final ServerStatisticTracker stats;<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  private volatile boolean closed;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  private volatile boolean aborted;<a name="line.167"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.CallQueueTooBigException;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HConstants;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.ServerName;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.TableName;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.TableNotEnabledException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicy;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicyFactory;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.exceptions.ClientExceptionsUtil;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.exceptions.RegionMovedException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.ipc.RpcClientFactory;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.security.User;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.util.ExceptionUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.zookeeper.KeeperException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.slf4j.Logger;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.slf4j.LoggerFactory;<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.common.base.Throwables;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersRequest;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledRequest;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesRequest;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesRequest;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateRequest;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateResponse;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse;<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> * Main implementation of {@link Connection} and {@link ClusterConnection} interfaces.<a name="line.136"></a>
+<span class="sourceLineNo">137</span> * Encapsulates connection to zookeeper and regionservers.<a name="line.137"></a>
+<span class="sourceLineNo">138</span> */<a name="line.138"></a>
+<span class="sourceLineNo">139</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    value="AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION",<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    justification="Access to the conncurrent hash map is under a lock so should be fine.")<a name="line.141"></a>
+<span class="sourceLineNo">142</span>@InterfaceAudience.Private<a name="line.142"></a>
+<span class="sourceLineNo">143</span>class ConnectionImplementation implements ClusterConnection, Closeable {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public static final String RETRIES_BY_SERVER_KEY = "hbase.client.retries.by.server";<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private static final Logger LOG = LoggerFactory.getLogger(ConnectionImplementation.class);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private static final String RESOLVE_HOSTNAME_ON_FAIL_KEY = "hbase.resolve.hostnames.on.failure";<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private final boolean hostnamesCanChange;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private final long pause;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  private final long pauseForCQTBE;// pause for CallQueueTooBigException, if specified<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private boolean useMetaReplicas;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  private final int metaReplicaCallTimeoutScanInMicroSecond;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  private final int numTries;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  final int rpcTimeout;<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>   * Global nonceGenerator shared per client.Currently there's no reason to limit its scope.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * Once it's set under nonceGeneratorCreateLock, it is never unset or changed.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  private static volatile NonceGenerator nonceGenerator = null;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  /** The nonce generator lock. Only taken when creating Connection, which gets a private copy. */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private static final Object nonceGeneratorCreateLock = new Object();<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>  private final AsyncProcess asyncProcess;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  // single tracker per connection<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private final ServerStatisticTracker stats;<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  // package protected for the tests<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  ClusterStatusListener clusterStatusListener;<a name="line.170"></a>
+<span class="sourceLineNo">169</span>  private volatile boolean closed;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  private volatile boolean aborted;<a name="line.170"></a>
 <span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  private final Object metaRegionLock = new Object();<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  private final Object masterLock = new Object();<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  // thread executor shared by all Table instances created<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // by this connection<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  private volatile ExecutorService batchPool = null;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  // meta thread executor shared by all Table instances created<a name="line.179"></a>
+<span class="sourceLineNo">172</span>  // package protected for the tests<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  ClusterStatusListener clusterStatusListener;<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private final Object metaRegionLock = new Object();<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private final Object masterLock = new Object();<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  // thread executor shared by all Table instances created<a name="line.179"></a>
 <span class="sourceLineNo">180</span>  // by this connection<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  private volatile ExecutorService metaLookupPool = null;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  private volatile boolean cleanupPool = false;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  private final Configuration conf;<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  // cache the configuration value for tables so that we can avoid calling<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  // the expensive Configuration to fetch the value multiple times.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  private final ConnectionConfiguration connectionConfig;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  // Client rpc instance.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  private final RpcClient rpcClient;<a name="line.191"></a>
+<span class="sourceLineNo">181</span>  private volatile ExecutorService batchPool = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  // meta thread executor shared by all Table instances created<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  // by this connection<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  private volatile ExecutorService metaLookupPool = null;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private volatile boolean cleanupPool = false;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private final Configuration conf;<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  // cache the configuration value for tables so that we can avoid calling<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  // the expensive Configuration to fetch the value multiple times.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  private final ConnectionConfiguration connectionConfig;<a name="line.191"></a>
 <span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>  private final MetaCache metaCache;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  private final MetricsConnection metrics;<a name="line.194"></a>
+<span class="sourceLineNo">193</span>  // Client rpc instance.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  private final RpcClient rpcClient;<a name="line.194"></a>
 <span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  protected User user;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private final RpcRetryingCallerFactory rpcCallerFactory;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  private final RpcControllerFactory rpcControllerFactory;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private final RetryingCallerInterceptor interceptor;<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>   * Cluster registry of basic info such as clusterid and meta region location.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  private final AsyncRegistry registry;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  private final ClientBackoffPolicy backoffPolicy;<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>   * Allow setting an alternate BufferedMutator implementation via<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * config. If null, use default.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private final String alternateBufferedMutatorClassName;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /** lock guards against multiple threads trying to query the meta region at the same time */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  private final ReentrantLock userRegionLock = new ReentrantLock();<a name="line.218"></a>
+<span class="sourceLineNo">196</span>  private final MetaCache metaCache;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  private final MetricsConnection metrics;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  protected User user;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private final RpcRetryingCallerFactory rpcCallerFactory;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private final RpcControllerFactory rpcControllerFactory;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private final RetryingCallerInterceptor interceptor;<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>   * Cluster registry of basic info such as clusterid and meta region location.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  private final AsyncRegistry registry;<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private final ClientBackoffPolicy backoffPolicy;<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  /**<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * Allow setting an alternate BufferedMutator implementation via<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * config. If null, use default.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  private final String alternateBufferedMutatorClassName;<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>   * constructor<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param conf Configuration object<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   */<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  ConnectionImplementation(Configuration conf,<a name="line.224"></a>
-<span class="sourceLineNo">225</span>                           ExecutorService pool, User user) throws IOException {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    this.conf = conf;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    this.user = user;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    this.batchPool = pool;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    this.connectionConfig = new ConnectionConfiguration(conf);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    this.closed = false;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    this.pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    long configuredPauseForCQTBE = conf.getLong(HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE, pause);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    if (configuredPauseForCQTBE &lt; pause) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      LOG.warn("The " + HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE + " setting: "<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          + configuredPauseForCQTBE + " is smaller than " + HConstants.HBASE_CLIENT_PAUSE<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          + ", will use " + pause + " instead.");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      this.pauseForCQTBE = pause;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    } else {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      this.pauseForCQTBE = configuredPauseForCQTBE;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    this.useMetaReplicas = conf.getBoolean(HConstants.USE_META_REPLICAS,<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      HConstants.DEFAULT_USE_META_REPLICAS);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.metaReplicaCallTimeoutScanInMicroSecond =<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        connectionConfig.getMetaReplicaCallTimeoutMicroSecondScan();<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // how many times to try, one more than max *retry* time<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    this.numTries = retries2Attempts(connectionConfig.getRetriesNumber());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    this.rpcTimeout = conf.getInt(<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    if (conf.getBoolean(NonceGenerator.CLIENT_NONCES_ENABLED_KEY, true)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      synchronized (nonceGeneratorCreateLock) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        if (nonceGenerator == null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          nonceGenerator = PerClientRandomNonceGenerator.get();<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>    } else {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      nonceGenerator = NO_NONCE_GENERATOR;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span><a name="line.261"></a>
-<span class="sourceLineNo">262</span>    this.stats = ServerStatisticTracker.create(conf);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    this.interceptor = (new RetryingCallerInterceptorFactory(conf)).build();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    this.rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf, interceptor, this.stats);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    this.backoffPolicy = ClientBackoffPolicyFactory.create(conf);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    this.asyncProcess = new AsyncProcess(this, conf, rpcCallerFactory, rpcControllerFactory);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    if (conf.getBoolean(CLIENT_SIDE_METRICS_ENABLED_KEY, false)) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      this.metrics = new MetricsConnection(this);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    } else {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.metrics = null;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    this.metaCache = new MetaCache(this.metrics);<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean shouldListen = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    this.hostnamesCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Class&lt;? extends ClusterStatusListener.Listener&gt; listenerClass =<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        conf.getClass(ClusterStatusListener.STATUS_LISTENER_CLASS,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>            ClusterStatusListener.DEFAULT_STATUS_LISTENER_CLASS,<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            ClusterStatusListener.Listener.class);<a name="line.281"></a>
+<span class="sourceLineNo">220</span>  /** lock guards against multiple threads trying to query the meta region at the same time */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  private final ReentrantLock userRegionLock = new ReentrantLock();<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  private ChoreService authService;<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>   * constructor<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param conf Configuration object<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  ConnectionImplementation(Configuration conf,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>                           ExecutorService pool, User user) throws IOException {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    this.conf = conf;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    this.user = user;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    if (user != null &amp;&amp; user.isLoginFromKeytab()) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      spawnRenewalChore(user.getUGI());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    this.batchPool = pool;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    this.connectionConfig = new ConnectionConfiguration(conf);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this.closed = false;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    this.pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    long configuredPauseForCQTBE = conf.getLong(HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE, pause);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    if (configuredPauseForCQTBE &lt; pause) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      LOG.warn("The " + HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE + " setting: "<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          + configuredPauseForCQTBE + " is smaller than " + HConstants.HBASE_CLIENT_PAUSE<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          + ", will use " + pause + " instead.");<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      this.pauseForCQTBE = pause;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    } else {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      this.pauseForCQTBE = configuredPauseForCQTBE;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    this.useMetaReplicas = conf.getBoolean(HConstants.USE_META_REPLICAS,<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      HConstants.DEFAULT_USE_META_REPLICAS);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    this.metaReplicaCallTimeoutScanInMicroSecond =<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        connectionConfig.getMetaReplicaCallTimeoutMicroSecondScan();<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span>    // how many times to try, one more than max *retry* time<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    this.numTries = retries2Attempts(connectionConfig.getRetriesNumber());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    this.rpcTimeout = conf.getInt(<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    if (conf.getBoolean(NonceGenerator.CLIENT_NONCES_ENABLED_KEY, true)) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      synchronized (nonceGeneratorCreateLock) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        if (nonceGenerator == null) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          nonceGenerator = PerClientRandomNonceGenerator.get();<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>    } else {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      nonceGenerator = NO_NONCE_GENERATOR;<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>    this.stats = ServerStatisticTracker.create(conf);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    this.interceptor = (new RetryingCallerInterceptorFactory(conf)).build();<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    this.rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf, interceptor, this.stats);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    this.backoffPolicy = ClientBackoffPolicyFactory.create(conf);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    this.asyncProcess = new AsyncProcess(this, conf, rpcCallerFactory, rpcControllerFactory);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    if (conf.getBoolean(CLIENT_SIDE_METRICS_ENABLED_KEY, false)) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      this.metrics = new MetricsConnection(this);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.metrics = null;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    this.metaCache = new MetaCache(this.metrics);<a name="line.281"></a>
 <span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>    // Is there an alternate BufferedMutator to use?<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    this.alternateBufferedMutatorClassName =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        this.conf.get(BufferedMutator.CLASSNAME_KEY);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>    try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      this.registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      retrieveClusterId();<a name="line.289"></a>
+<span class="sourceLineNo">283</span>    boolean shouldListen = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    this.hostnamesCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    Class&lt;? extends ClusterStatusListener.Listener&gt; listenerClass =<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        conf.getClass(ClusterStatusListener.STATUS_LISTENER_CLASS,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            ClusterStatusListener.DEFAULT_STATUS_LISTENER_CLASS,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            ClusterStatusListener.Listener.class);<a name="line.289"></a>
 <span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>      this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId, this.metrics);<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>      // Do we publish the status?<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      if (shouldListen) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        if (listenerClass == null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.296"></a>
-<span class="sourceLineNo">297</span>              ClusterStatusListener.STATUS_LISTENER_CLASS + " is not set - not listening status");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        } else {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          clusterStatusListener = new ClusterStatusListener(<a name="line.299"></a>
-<span class="sourceLineNo">300</span>              new ClusterStatusListener.DeadServerHandler() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>                @Override<a name="line.301"></a>
-<span class="sourceLineNo">302</span>                public void newDead(ServerName sn) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>                  clearCaches(sn);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>                  rpcClient.cancelConnections(sn);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>                }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>              }, conf, listenerClass);<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>    } catch (Throwable e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // avoid leaks: registry, rpcClient, ...<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      LOG.debug("connection construction failed", e);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      close();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      throw e;<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>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * @param useMetaReplicas<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  @VisibleForTesting<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  void setUseMetaReplicas(final boolean useMetaReplicas) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    this.useMetaReplicas = useMetaReplicas;<a name="line.322"></a>
+<span class="sourceLineNo">291</span>    // Is there an alternate BufferedMutator to use?<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    this.alternateBufferedMutatorClassName =<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        this.conf.get(BufferedMutator.CLASSNAME_KEY);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      this.registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      retrieveClusterId();<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>      this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId, this.metrics);<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>      // Do we publish the status?<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      if (shouldListen) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        if (listenerClass == null) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>          LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.304"></a>
+<span class="sourceLineNo">305</span>              ClusterStatusListener.STATUS_LISTENER_CLASS + " is not set - not listening status");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        } else {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          clusterStatusListener = new ClusterStatusListener(<a name="line.307"></a>
+<span class="sourceLineNo">308</span>              new ClusterStatusListener.DeadServerHandler() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>                @Override<a name="line.309"></a>
+<span class="sourceLineNo">310</span>                public void newDead(ServerName sn) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>                  clearCaches(sn);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>                  rpcClient.cancelConnections(sn);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>                }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>              }, conf, listenerClass);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } catch (Throwable e) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      // avoid leaks: registry, rpcClient, ...<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      LOG.debug("connection construction failed", e);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      close();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw e;<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>   * @param conn The connection for which to replace the generator.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @param cnm Replaces the nonce generator used, for testing.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @return old nonce generator.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   */<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  @VisibleForTesting<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  static NonceGenerator injectNonceGeneratorForTesting(<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      ClusterConnection conn, NonceGenerator cnm) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    ConnectionImplementation connImpl = (ConnectionImplementation)conn;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    NonceGenerator ng = connImpl.getNonceGenerator();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    LOG.warn("Nonce generator is being replaced by test code for "<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      + cnm.getClass().getName());<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    nonceGenerator = cnm;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return ng;<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>  @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public Table getTable(TableName tableName) throws IOException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    return getTable(tableName, getBatchPool());<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>  @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public TableBuilder getTableBuilder(TableName tableName, ExecutorService pool) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return new TableBuilderBase(tableName, connectionConfig) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>      @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      public Table build() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        return new HTable(ConnectionImplementation.this, this, rpcCallerFactory,<a name="line.352"></a>
-<span class="sourceLineNo">353</span>            rpcControllerFactory, pool);<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>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  @Override<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  public BufferedMutator getBufferedMutator(BufferedMutatorParams params) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (params.getTableName() == null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      throw new IllegalArgumentException("TableName cannot be null.");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (params.getPool() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      params.pool(HTable.getDefaultExecutor(getConfiguration()));<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    if (params.getWriteBufferSize() == BufferedMutatorParams.UNSET) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      params.writeBufferSize(connectionConfig.getWriteBufferSize());<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    if (params.getWriteBufferPeriodicFlushTimeoutMs() == BufferedMutatorParams.UNSET) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      params.setWriteBufferPeriodicFlushTimeoutMs(<a name="line.370"></a>
-<span class="sourceLineNo">371</span>              connectionConfig.getWriteBufferPeriodicFlushTimeoutMs());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    if (params.getWriteBufferPeriodicFlushTimerTickMs() == BufferedMutatorParams.UNSET) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      params.setWriteBufferPeriodicFlushTimerTickMs(<a name="line.374"></a>
-<span class="sourceLineNo">375</span>              connectionConfig.getWriteBufferPeriodicFlushTimerTickMs());<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (params.getMaxKeyValueSize() == BufferedMutatorParams.UNSET) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      params.maxKeyValueSize(connectionConfig.getMaxKeyValueSize());<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    // Look to see if an alternate BufferedMutation implementation is wanted.<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    // Look in params and in config. If null, use default.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    String implementationClassName = params.getImplementationClassName();<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (implementationClassName == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      implementationClassName = this.alternateBufferedMutatorClassName;<a name="line.384"></a>
+<span class="sourceLineNo">325</span>  private void spawnRenewalChore(final UserGroupInformation user) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    authService = new ChoreService("Relogin service");<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    authService.scheduleChore(AuthUtil.getAuthRenewalChore(user));<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>   * @param useMetaReplicas<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  @VisibleForTesting<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  void setUseMetaReplicas(final boolean useMetaReplicas) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    this.useMetaReplicas = useMetaReplicas;<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>   * @param conn The connection for which to replace the generator.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * @param cnm Replaces the nonce generator used, for testing.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * @return old nonce generator.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  @VisibleForTesting<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  static NonceGenerator injectNonceGeneratorForTesting(<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      ClusterConnection conn, NonceGenerator cnm) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    ConnectionImplementation connImpl = (ConnectionImplementation)conn;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    NonceGenerator ng = connImpl.getNonceGenerator();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    LOG.warn("Nonce generator is being replaced by test code for "<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      + cnm.getClass().getName());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    nonceGenerator = cnm;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return ng;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  @Override<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  public Table getTable(TableName tableName) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return getTable(tableName, getBatchPool());<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>  @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  public TableBuilder getTableBuilder(TableName tableName, ExecutorService pool) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    return new TableBuilderBase(tableName, connectionConfig) {<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 Table build() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        return new HTable(ConnectionImplementation.this, this, rpcCallerFactory,<a name="line.365"></a>
+<span class="sourceLineNo">366</span>            rpcControllerFactory, pool);<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>  }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>  @Override<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  public BufferedMutator getBufferedMutator(BufferedMutatorParams params) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    if (params.getTableName() == null) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      throw new IllegalArgumentException("TableName cannot be null.");<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    if (params.getPool() == null) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      params.pool(HTable.getDefaultExecutor(getConfiguration()));<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    if (params.getWriteBufferSize() == BufferedMutatorParams.UNSET) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      params.writeBufferSize(connectionConfig.getWriteBufferSize());<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (params.getWriteBufferPeriodicFlushTimeoutMs() == BufferedMutatorParams.UNSET) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      params.setWriteBufferPeriodicFlushTimeoutMs(<a name="line.383"></a>
+<span class="sourceLineNo">384</span>              connectionConfig.getWriteBufferPeriodicFlushTimeoutMs());<a name="line.384"></a>
 <span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    if (implementationClassName == null) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return new BufferedMutatorImpl(this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    try {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      return (BufferedMutator)ReflectionUtils.newInstance(Class.forName(implementationClassName),<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    } catch (ClassNotFoundException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      throw new RuntimeException(e);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public BufferedMutator getBufferedMutator(TableName tableName) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    return getBufferedMutator(new BufferedMutatorParams(tableName));<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>  @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public RegionLocator getRegionLocator(TableName tableName) throws IOException {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    return new HRegionLocator(tableName, this);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>  @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public Admin getAdmin() throws IOException {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return new HBaseAdmin(this);<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 MetricsConnection getConnectionMetrics() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    return this.metrics;<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>  private ExecutorService getBatchPool() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    if (batchPool == null) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      synchronized (this) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        if (batchPool == null) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          int threads = conf.getInt("hbase.hconnection.threads.max", 256);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          this.batchPool = getThreadPool(threads, threads, "-shared", null);<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          this.cleanupPool = true;<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>    return this.batchPool;<a name="line.427"></a>
+<span class="sourceLineNo">386</span>    if (params.getWriteBufferPeriodicFlushTimerTickMs() == BufferedMutatorParams.UNSET) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      params.setWriteBufferPeriodicFlushTimerTickMs(<a name="line.387"></a>
+<span class="sourceLineNo">388</span>              connectionConfig.getWriteBufferPeriodicFlushTimerTickMs());<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    if (params.getMaxKeyValueSize() == BufferedMutatorParams.UNSET) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      params.maxKeyValueSize(connectionConfig.getMaxKeyValueSize());<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    // Look to see if an alternate BufferedMutation implementation is wanted.<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    // Look in params and in config. If null, use default.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    String implementationClassName = params.getImplementationClassName();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    if (implementationClassName == null) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      implementationClassName = this.alternateBufferedMutatorClassName;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    if (implementationClassName == null) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return new BufferedMutatorImpl(this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    try {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      return (BufferedMutator)ReflectionUtils.newInstance(Class.forName(implementationClassName),<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    } catch (ClassNotFoundException e) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      throw new RuntimeException(e);<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>  @Override<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  public BufferedMutator getBufferedMutator(TableName tableName) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    return getBufferedMutator(new BufferedMutatorParams(tableName));<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>  @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  public RegionLocator getRegionLocator(TableName tableName) throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    return new HRegionLocator(tableName, this);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>  @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public Admin getAdmin() throws IOException {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    return new HBaseAdmin(this);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>  @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>  public MetricsConnection getConnectionMetrics() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    return this.metrics;<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>  private ExecutorService getThreadPool(int maxThreads, int coreThreads, String nameHint,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      BlockingQueue&lt;Runnable&gt; passedWorkQueue) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    // shared HTable thread executor not yet initialized<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    if (maxThreads == 0) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      maxThreads = Runtime.getRuntime().availableProcessors() * 8;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    if (coreThreads == 0) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      coreThreads = Runtime.getRuntime().availableProcessors() * 8;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    long keepAliveTime = conf.getLong("hbase.hconnection.threads.keepalivetime", 60);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    BlockingQueue&lt;Runnable&gt; workQueue = passedWorkQueue;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    if (workQueue == null) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      workQueue =<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        new LinkedBlockingQueue&lt;&gt;(maxThreads *<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            conf.getInt(HConstants.HBASE_CLIENT_MAX_TOTAL_TASKS,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>                HConstants.DEFAULT_HBASE_CLIENT_MAX_TOTAL_TASKS));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      coreThreads = maxThreads;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    ThreadPoolExecutor tpe = new ThreadPoolExecutor(<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        coreThreads,<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        maxThreads,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        keepAliveTime,<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        TimeUnit.SECONDS,<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        workQueue,<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        Threads.newDaemonThreadFactory(toString() + nameHint));<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    tpe.allowCoreThreadTimeOut(true);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    return tpe;<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>  private ExecutorService getMetaLookupPool() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    if (this.metaLookupPool == null) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      synchronized (this) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        if (this.metaLookupPool == null) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          //Some of the threads would be used for meta replicas<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          //To start with, threads.max.core threads can hit the meta (including replicas).<a name="line.464"></a>
-<span class="sourceLineNo">465</span>          //After that, requests will get queued up in the passed queue, and only after<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          //the queue is full, a new thread will be started<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          int threads = conf.getInt("hbase.hconnection.meta.lookup.threads.max", 128);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>          this.metaLookupPool = getThreadPool(<a name="line.468"></a>
-<span class="sourceLineNo">469</span>             threads,<a name="line.469"></a>
-<span class="sourceLineNo">470</span>             threads,<a name="line.470"></a>
-<span class="sourceLineNo">471</span>             "-metaLookup-shared-", new LinkedBlockingQueue&lt;&gt;());<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    return this.metaLookupPool;<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>  protected ExecutorService getCurrentMetaLookupPool() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    return metaLookupPool;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>  protected ExecutorService getCurrentBatchPool() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    return batchPool;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  private void shutdownPools() {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    if (this.cleanupPool &amp;&amp; this.batchPool != null &amp;&amp; !this.batchPool.isShutdown()) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      shutdownBatchPool(this.batchPool);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (this.metaLookupPool != null &amp;&amp; !this.metaLookupPool.isShutdown()) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      shutdownBatchPool(this.metaLookupPool);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
+<span class="sourceLineNo">430</span>  private ExecutorService getBatchPool() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    if (batchPool == null) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      synchronized (this) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        if (batchPool == null) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          int threads = conf.getInt("hbase.hconnection.threads.max", 256);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          this.batchPool = getThreadPool(threads, threads, "-shared", null);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          this.cleanupPool = true;<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>    return this.batchPool;<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>  private ExecutorService getThreadPool(int maxThreads, int coreThreads, String nameHint,<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      BlockingQueue&lt;Runnable&gt; passedWorkQueue) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    // shared HTable thread executor not yet initialized<a name="line.445"></a>
+<span clas

<TRUNCATED>

[11/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html
index ec93431..8cbaf76 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html
@@ -28,278 +28,291 @@
 <span class="sourceLineNo">020</span><a name="line.20"></a>
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.lang.reflect.Constructor;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.concurrent.CompletableFuture;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.concurrent.ExecutorService;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseConfiguration;<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.apache.hadoop.hbase.security.User;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>/**<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * A non-instantiable class that manages creation of {@link Connection}s. Managing the lifecycle of<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * the {@link Connection}s to the cluster is the responsibility of the caller. From a<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * {@link Connection}, {@link Table} implementations are retrieved with<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * {@link Connection#getTable(org.apache.hadoop.hbase.TableName)}. Example:<a name="line.37"></a>
-<span class="sourceLineNo">038</span> *<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * &lt;pre&gt;<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * Connection connection = ConnectionFactory.createConnection(config);<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * Table table = connection.getTable(TableName.valueOf("table1"));<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * try {<a name="line.42"></a>
-<span class="sourceLineNo">043</span> *   // Use the table as needed, for a single operation and a single thread<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * } finally {<a name="line.44"></a>
-<span class="sourceLineNo">045</span> *   table.close();<a name="line.45"></a>
-<span class="sourceLineNo">046</span> *   connection.close();<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * }<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * &lt;/pre&gt;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> *<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * Similarly, {@link Connection} also returns {@link Admin} and {@link RegionLocator}<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * implementations.<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * @see Connection<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * @since 0.99.0<a name="line.53"></a>
-<span class="sourceLineNo">054</span> */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>@InterfaceAudience.Public<a name="line.55"></a>
-<span class="sourceLineNo">056</span>public class ConnectionFactory {<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public static final String HBASE_CLIENT_ASYNC_CONNECTION_IMPL = "hbase.client.async.connection.impl";<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  /** No public c.tors */<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  protected ConnectionFactory() {<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>   * Create a new Connection instance using default HBaseConfiguration. Connection encapsulates all<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * housekeeping for a connection to the cluster. All tables and interfaces created from returned<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * connection share zookeeper connection, meta cache, and connections to region servers and<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * masters. &lt;br&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   * instance. Typical usage:<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   *<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * &lt;pre&gt;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * Connection connection = ConnectionFactory.createConnection();<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * Table table = connection.getTable(TableName.valueOf("mytable"));<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * try {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   *   table.get(...);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   *   ...<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * } finally {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   *   table.close();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   *   connection.close();<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * }<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * &lt;/pre&gt;<a name="line.82"></a>
+<span class="sourceLineNo">023</span>import java.security.PrivilegedExceptionAction;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.concurrent.CompletableFuture;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.ExecutorService;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><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.AuthUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.security.User;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<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> * A non-instantiable class that manages creation of {@link Connection}s. Managing the lifecycle of<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * the {@link Connection}s to the cluster is the responsibility of the caller. From a<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * {@link Connection}, {@link Table} implementations are retrieved with<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * {@link Connection#getTable(org.apache.hadoop.hbase.TableName)}. Example:<a name="line.39"></a>
+<span class="sourceLineNo">040</span> *<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * &lt;pre&gt;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Connection connection = ConnectionFactory.createConnection(config);<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * Table table = connection.getTable(TableName.valueOf("table1"));<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * try {<a name="line.44"></a>
+<span class="sourceLineNo">045</span> *   // Use the table as needed, for a single operation and a single thread<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * } finally {<a name="line.46"></a>
+<span class="sourceLineNo">047</span> *   table.close();<a name="line.47"></a>
+<span class="sourceLineNo">048</span> *   connection.close();<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * }<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * &lt;/pre&gt;<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Since 2.2.0, Connection created by ConnectionFactory can contain user-specified kerberos<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * credentials if caller has following two configurations set:<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * &lt;ul&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *   &lt;li&gt;hbase.client.keytab.file, points to a valid keytab on the local filesystem<a name="line.55"></a>
+<span class="sourceLineNo">056</span> *   &lt;li&gt;hbase.client.kerberos.principal, gives the Kerberos principal to use<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;/ul&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * By this way, caller can directly connect to kerberized cluster without caring login and<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * credentials renewal logic in application.<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * &lt;pre&gt;<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * &lt;/pre&gt;<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * Similarly, {@link Connection} also returns {@link Admin} and {@link RegionLocator}<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * implementations.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * @see Connection<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * @since 0.99.0<a name="line.65"></a>
+<span class="sourceLineNo">066</span> */<a name="line.66"></a>
+<span class="sourceLineNo">067</span>@InterfaceAudience.Public<a name="line.67"></a>
+<span class="sourceLineNo">068</span>public class ConnectionFactory {<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  public static final String HBASE_CLIENT_ASYNC_CONNECTION_IMPL = "hbase.client.async.connection.impl";<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  /** No public c.tors */<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  protected ConnectionFactory() {<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>  /**<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * Create a new Connection instance using default HBaseConfiguration. Connection encapsulates all<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * housekeeping for a connection to the cluster. All tables and interfaces created from returned<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * connection share zookeeper connection, meta cache, and connections to region servers and<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * masters. &lt;br&gt;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * instance. Typical usage:<a name="line.82"></a>
 <span class="sourceLineNo">083</span>   *<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  public static Connection createConnection() throws IOException {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    return createConnection(HBaseConfiguration.create(), null, null);<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>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * region servers and masters. &lt;br&gt;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * instance. Typical usage:<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   *<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * &lt;pre&gt;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * Table table = connection.getTable(TableName.valueOf("mytable"));<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   * try {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   *   table.get(...);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   *   ...<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * } finally {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   *   table.close();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   *   connection.close();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * &lt;/pre&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   *<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param conf configuration<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static Connection createConnection(Configuration conf) throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    return createConnection(conf, null, null);<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>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * region servers and masters. &lt;br&gt;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * instance. Typical usage:<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   *<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * &lt;pre&gt;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * Table table = connection.getTable(TableName.valueOf("mytable"));<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * try {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   *   table.get(...);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   *   ...<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * } finally {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   *   table.close();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   *   connection.close();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * &lt;/pre&gt;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   *<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * @param conf configuration<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * @param pool the thread pool to use for batch operations<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  public static Connection createConnection(Configuration conf, ExecutorService pool)<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      throws IOException {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return createConnection(conf, pool, null);<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>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * region servers and masters. &lt;br&gt;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * instance. Typical usage:<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   *<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * &lt;pre&gt;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Table table = connection.getTable(TableName.valueOf("table1"));<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * try {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   *   table.get(...);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   *   ...<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * } finally {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   *   table.close();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   *   connection.close();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * &lt;/pre&gt;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   *<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * @param conf configuration<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * @param user the user the connection is for<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public static Connection createConnection(Configuration conf, User user) throws IOException {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return createConnection(conf, null, user);<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>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * region servers and masters. &lt;br&gt;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * instance. Typical usage:<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   *<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * &lt;pre&gt;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   * Table table = connection.getTable(TableName.valueOf("table1"));<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * try {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   *   table.get(...);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   *   ...<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * } finally {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   *   table.close();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   *   connection.close();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * &lt;/pre&gt;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   *<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * @param conf configuration<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   * @param user the user the connection is for<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * @param pool the thread pool to use for batch operations<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   */<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  public static Connection createConnection(Configuration conf, ExecutorService pool, User user)<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throws IOException {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    if (user == null) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      UserProvider provider = UserProvider.instantiate(conf);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      user = provider.getCurrent();<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>    String className = conf.get(ClusterConnection.HBASE_CLIENT_CONNECTION_IMPL,<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      ConnectionImplementation.class.getName());<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    Class&lt;?&gt; clazz;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      clazz = Class.forName(className);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    } catch (ClassNotFoundException e) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      throw new IOException(e);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    try {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      // Default HCM#HCI is not accessible; make it so before invoking.<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      Constructor&lt;?&gt; constructor = clazz.getDeclaredConstructor(Configuration.class,<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        ExecutorService.class, User.class);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      constructor.setAccessible(true);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      return (Connection) constructor.newInstance(conf, pool, user);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    } catch (Exception e) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      throw new IOException(e);<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><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * Call {@link #createAsyncConnection(Configuration)} using default HBaseConfiguration.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @see #createAsyncConnection(Configuration)<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return AsyncConnection object wrapped by CompletableFuture<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  public static CompletableFuture&lt;AsyncConnection&gt; createAsyncConnection() {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return createAsyncConnection(HBaseConfiguration.create());<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>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * Call {@link #createAsyncConnection(Configuration, User)} using the given {@code conf} and a<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * User object created by {@link UserProvider}. The given {@code conf} will also be used to<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * initialize the {@link UserProvider}.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param conf configuration<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @return AsyncConnection object wrapped by CompletableFuture<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @see #createAsyncConnection(Configuration, User)<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * @see UserProvider<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   */<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static CompletableFuture&lt;AsyncConnection&gt; createAsyncConnection(Configuration conf) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    User user;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    try {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      user = UserProvider.instantiate(conf).getCurrent();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    } catch (IOException e) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      CompletableFuture&lt;AsyncConnection&gt; future = new CompletableFuture&lt;&gt;();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      future.completeExceptionally(e);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      return future;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    return createAsyncConnection(conf, user);<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>   * Create a new AsyncConnection instance using the passed {@code conf} and {@code user}.<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * AsyncConnection encapsulates all housekeeping for a connection to the cluster. All tables and<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * interfaces created from returned connection share zookeeper connection, meta cache, and<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * connections to region servers and masters.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * &lt;p&gt;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * The caller is responsible for calling {@link AsyncConnection#close()} on the returned<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * connection instance.<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * &lt;p&gt;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * Usually you should only create one AsyncConnection instance in your code and use it everywhere<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * as it is thread safe.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * @param conf configuration<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * @param user the user the asynchronous connection is for<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @return AsyncConnection object wrapped by CompletableFuture<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * @throws IOException<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  public static CompletableFuture&lt;AsyncConnection&gt; createAsyncConnection(Configuration conf,<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      User user) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    CompletableFuture&lt;AsyncConnection&gt; future = new CompletableFuture&lt;&gt;();<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    AsyncRegistry registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    registry.getClusterId().whenComplete((clusterId, error) -&gt; {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if (error != null) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        future.completeExceptionally(error);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        return;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      if (clusterId == null) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        future.completeExceptionally(new IOException("clusterid came back null"));<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        return;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      Class&lt;? extends AsyncConnection&gt; clazz = conf.getClass(HBASE_CLIENT_ASYNC_CONNECTION_IMPL,<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        AsyncConnectionImpl.class, AsyncConnection.class);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      try {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        future.complete(ReflectionUtils.newInstance(clazz, conf, registry, clusterId, user));<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      } catch (Exception e) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        future.completeExceptionally(e);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    });<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    return future;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
-<span class="sourceLineNo">294</span>}<a name="line.294"></a>
+<span class="sourceLineNo">084</span>   * &lt;pre&gt;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * Connection connection = ConnectionFactory.createConnection();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * Table table = connection.getTable(TableName.valueOf("mytable"));<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * try {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   *   table.get(...);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   *   ...<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * } finally {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   *   table.close();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   *   connection.close();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * }<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * &lt;/pre&gt;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   *<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public static Connection createConnection() throws IOException {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    Configuration conf = HBaseConfiguration.create();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    return createConnection(conf, null, AuthUtil.loginClient(conf));<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>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * region servers and masters. &lt;br&gt;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * instance. Typical usage:<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * &lt;pre&gt;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Table table = connection.getTable(TableName.valueOf("mytable"));<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * try {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   *   table.get(...);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   *   ...<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * } finally {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   *   table.close();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   *   connection.close();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * &lt;/pre&gt;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   *<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * @param conf configuration<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public static Connection createConnection(Configuration conf) throws IOException {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    return createConnection(conf, null, AuthUtil.loginClient(conf));<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>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * region servers and masters. &lt;br&gt;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * instance. Typical usage:<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   *<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * &lt;pre&gt;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * Table table = connection.getTable(TableName.valueOf("mytable"));<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * try {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   *   table.get(...);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   *   ...<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * } finally {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   *   table.close();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   *   connection.close();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * &lt;/pre&gt;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   *<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * @param conf configuration<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @param pool the thread pool to use for batch operations<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public static Connection createConnection(Configuration conf, ExecutorService pool)<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      throws IOException {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return createConnection(conf, pool, AuthUtil.loginClient(conf));<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>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * region servers and masters. &lt;br&gt;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * instance. Typical usage:<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   *<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * &lt;pre&gt;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * Table table = connection.getTable(TableName.valueOf("table1"));<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * try {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   *   table.get(...);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   *   ...<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * } finally {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   *   table.close();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   *   connection.close();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * &lt;/pre&gt;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   *<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   * @param conf configuration<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * @param user the user the connection is for<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public static Connection createConnection(Configuration conf, User user) throws IOException {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    return createConnection(conf, null, user);<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>  /**<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * region servers and masters. &lt;br&gt;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * instance. Typical usage:<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   *<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * &lt;pre&gt;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * Table table = connection.getTable(TableName.valueOf("table1"));<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * try {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   *   table.get(...);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   *   ...<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * } finally {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   *   table.close();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   *   connection.close();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * &lt;/pre&gt;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   *<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @param conf configuration<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * @param user the user the connection is for<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   * @param pool the thread pool to use for batch operations<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   */<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  public static Connection createConnection(Configuration conf, ExecutorService pool,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    final User user) throws IOException {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    String className = conf.get(ClusterConnection.HBASE_CLIENT_CONNECTION_IMPL,<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      ConnectionImplementation.class.getName());<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    Class&lt;?&gt; clazz;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    try {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      clazz = Class.forName(className);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    } catch (ClassNotFoundException e) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      throw new IOException(e);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    try {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      // Default HCM#HCI is not accessible; make it so before invoking.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      Constructor&lt;?&gt; constructor = clazz.getDeclaredConstructor(Configuration.class,<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        ExecutorService.class, User.class);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      constructor.setAccessible(true);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      return user.runAs(<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        (PrivilegedExceptionAction&lt;Connection&gt;)() -&gt;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>          (Connection) constructor.newInstance(conf, pool, user));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    } catch (Exception e) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      throw new IOException(e);<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><a name="line.234"></a>
+<span class="sourceLineNo">235</span>  /**<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * Call {@link #createAsyncConnection(Configuration)} using default HBaseConfiguration.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * @see #createAsyncConnection(Configuration)<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * @return AsyncConnection object wrapped by CompletableFuture<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public static CompletableFuture&lt;AsyncConnection&gt; createAsyncConnection() {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    return createAsyncConnection(HBaseConfiguration.create());<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>   * Call {@link #createAsyncConnection(Configuration, User)} using the given {@code conf} and a<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * User object created by {@link UserProvider}. The given {@code conf} will also be used to<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * initialize the {@link UserProvider}.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * @param conf configuration<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @return AsyncConnection object wrapped by CompletableFuture<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @see #createAsyncConnection(Configuration, User)<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * @see UserProvider<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  public static CompletableFuture&lt;AsyncConnection&gt; createAsyncConnection(Configuration conf) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    User user;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    try {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      user = AuthUtil.loginClient(conf);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    } catch (IOException e) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      CompletableFuture&lt;AsyncConnection&gt; future = new CompletableFuture&lt;&gt;();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      future.completeExceptionally(e);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      return future;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return createAsyncConnection(conf, user);<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>   * Create a new AsyncConnection instance using the passed {@code conf} and {@code user}.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * AsyncConnection encapsulates all housekeeping for a connection to the cluster. All tables and<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   * interfaces created from returned connection share zookeeper connection, meta cache, and<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * connections to region servers and masters.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * &lt;p&gt;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * The caller is responsible for calling {@link AsyncConnection#close()} on the returned<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * connection instance.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * &lt;p&gt;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * Usually you should only create one AsyncConnection instance in your code and use it everywhere<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * as it is thread safe.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @param conf configuration<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @param user the user the asynchronous connection is for<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @return AsyncConnection object wrapped by CompletableFuture<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * @throws IOException<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   */<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public static CompletableFuture&lt;AsyncConnection&gt; createAsyncConnection(Configuration conf,<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      final User user) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    CompletableFuture&lt;AsyncConnection&gt; future = new CompletableFuture&lt;&gt;();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    AsyncRegistry registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    registry.getClusterId().whenComplete((clusterId, error) -&gt; {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      if (error != null) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        future.completeExceptionally(error);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        return;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      if (clusterId == null) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        future.completeExceptionally(new IOException("clusterid came back null"));<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        return;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      Class&lt;? extends AsyncConnection&gt; clazz = conf.getClass(HBASE_CLIENT_ASYNC_CONNECTION_IMPL,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        AsyncConnectionImpl.class, AsyncConnection.class);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      try {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        future.complete(<a name="line.297"></a>
+<span class="sourceLineNo">298</span>          user.runAs((PrivilegedExceptionAction&lt;? extends AsyncConnection&gt;)() -&gt;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>            ReflectionUtils.newInstance(clazz, conf, registry, clusterId, user))<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        );<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      } catch (Exception e) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        future.completeExceptionally(e);<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>    return future;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>}<a name="line.307"></a>
 
 
 


[17/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html b/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html
index c23ee5f..57fdd19 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1025">ConnectionImplementation.ServerErrorTracker</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1038">ConnectionImplementation.ServerErrorTracker</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">The record of errors for servers.</div>
 </li>
@@ -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>errorsByServer</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html" title="class in org.apache.hadoop.hbase.client">ConnectionImplementation.ServerErrorTracker.ServerErrors</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1027">errorsByServer</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html" title="class in org.apache.hadoop.hbase.client">ConnectionImplementation.ServerErrorTracker.ServerErrors</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1040">errorsByServer</a></pre>
 </li>
 </ul>
 <a name="canRetryUntil">
@@ -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>canRetryUntil</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1028">canRetryUntil</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1041">canRetryUntil</a></pre>
 </li>
 </ul>
 <a name="maxTries">
@@ -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>maxTries</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1029">maxTries</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1042">maxTries</a></pre>
 </li>
 </ul>
 <a name="startTrackingTime">
@@ -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>startTrackingTime</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1030">startTrackingTime</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1043">startTrackingTime</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>ServerErrorTracker</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1037">ServerErrorTracker</a>(long&nbsp;timeout,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1050">ServerErrorTracker</a>(long&nbsp;timeout,
                           int&nbsp;maxTries)</pre>
 <div class="block">Constructor</div>
 <dl>
@@ -325,7 +325,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>canTryMore</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1047">canTryMore</a>(int&nbsp;numAttempt)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1060">canTryMore</a>(int&nbsp;numAttempt)</pre>
 <div class="block">We stop to retry when we have exhausted BOTH the number of tries and the time allocated.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -339,7 +339,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>calculateBackoffTime</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1060">calculateBackoffTime</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1073">calculateBackoffTime</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
                           long&nbsp;basePause)</pre>
 <div class="block">Calculates the back-off time for a retrying request to a particular server.</div>
 <dl>
@@ -357,7 +357,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>reportServerError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1075">reportServerError</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1088">reportServerError</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server)</pre>
 <div class="block">Reports that there was an error on the server to do whatever bean-counting necessary.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -371,7 +371,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getStartTrackingTime</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1079">getStartTrackingTime</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1092">getStartTrackingTime</a>()</pre>
 </li>
 </ul>
 </li>


[28/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/apidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/apidocs/constant-values.html b/apidocs/constant-values.html
index 595f2eb..5093a0f 100644
--- a/apidocs/constant-values.html
+++ b/apidocs/constant-values.html
@@ -83,6 +83,32 @@
 <ul class="blockList">
 <li class="blockList">
 <table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">AuthUtil</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.AuthUtil.HBASE_CLIENT_KERBEROS_PRINCIPAL">
+<!--   -->
+</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/AuthUtil.html#HBASE_CLIENT_KERBEROS_PRINCIPAL">HBASE_CLIENT_KERBEROS_PRINCIPAL</a></code></td>
+<td class="colLast"><code>"hbase.client.keytab.principal"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.AuthUtil.HBASE_CLIENT_KEYTAB_FILE">
+<!--   -->
+</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/AuthUtil.html#HBASE_CLIENT_KEYTAB_FILE">HBASE_CLIENT_KEYTAB_FILE</a></code></td>
+<td class="colLast"><code>"hbase.client.keytab.file"</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseInterfaceAudience.html" title="class in org.apache.hadoop.hbase">HBaseInterfaceAudience</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>


[26/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/apidocs/index-all.html
----------------------------------------------------------------------
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index 2d01af1..127fbc5 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -647,7 +647,9 @@
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">AuthUtil</span></a> - Class in <a href="org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></dt>
 <dd>
-<div class="block">Utility methods for helping with security tasks.</div>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>
+<div class="block"><span class="deprecationComment">since 2.2.0, to be removed in hbase-3.0.0.</span></div>
+</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/locking/EntityLock.html#await-long-java.util.concurrent.TimeUnit-">await(long, TimeUnit)</a></span> - Method in class org.apache.hadoop.hbase.client.locking.<a href="org/apache/hadoop/hbase/client/locking/EntityLock.html" title="class in org.apache.hadoop.hbase.client.locking">EntityLock</a></dt>
 <dd>&nbsp;</dd>
@@ -5918,10 +5920,17 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#getAuthChore-org.apache.hadoop.conf.Configuration-">getAuthChore(Configuration)</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>
 <dd>
-<div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>
+<div class="block"><span class="deprecationComment">Deprecated since 2.2.0, this method will be internal use only after 3.0.0.</span></div>
+</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Query.html#getAuthorizations--">getAuthorizations()</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>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#getAuthRenewalChore-org.apache.hadoop.security.UserGroupInformation-">getAuthRenewalChore(UserGroupInformation)</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>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+<div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#getAverageLatencyForEachRegionServer--">getAverageLatencyForEachRegionServer()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.HTableMultiplexerStatus</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ClusterMetrics.html#getAverageLoad--">getAverageLoad()</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a></dt>
@@ -6799,6 +6808,7 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#getGroupName-java.lang.String-">getGroupName(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>
 <dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 <div class="block">Returns the actual name for a group principal (stripped of the
  group prefix).</div>
 </dd>
@@ -9582,6 +9592,16 @@
 <dd>
 <div class="block">Parameter name for HBase client IPC pool type</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#HBASE_CLIENT_KERBEROS_PRINCIPAL">HBASE_CLIENT_KERBEROS_PRINCIPAL</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">AuthUtil</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+<div class="block">Client principal</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#HBASE_CLIENT_KEYTAB_FILE">HBASE_CLIENT_KEYTAB_FILE</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">AuthUtil</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+<div class="block">Client keytab file</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#HBASE_CLIENT_MAX_PERREGION_TASKS">HBASE_CLIENT_MAX_PERREGION_TASKS</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
 <dd>
 <div class="block">The maximum number of concurrent connections the client will maintain to a single
@@ -10790,6 +10810,7 @@
 <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>
 <dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 <div class="block">Returns whether or not the given name should be interpreted as a group
  principal.</div>
 </dd>
@@ -10840,6 +10861,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/locking/EntityLock.html#isLocked--">isLocked()</a></span> - Method in class org.apache.hadoop.hbase.client.locking.<a href="org/apache/hadoop/hbase/client/locking/EntityLock.html" title="class in org.apache.hadoop.hbase.client.locking">EntityLock</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.html#isLoginFromKeytab--">isLoginFromKeytab()</a></span> - Method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#isMasterInMaintenanceMode--">isMasterInMaintenanceMode()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
 <dd>
 <div class="block">Check whether Master is in maintenance mode.</div>
@@ -11805,6 +11828,15 @@
 <div class="block">Log in the current process using the given configuration keys for the
  credential file and login principal.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.html#login-java.lang.String-java.lang.String-">login(String, String)</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></dt>
+<dd>
+<div class="block">Login with the given keytab and principal.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#loginClient-org.apache.hadoop.conf.Configuration-">loginClient(Configuration)</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>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+<div class="block">For kerberized cluster, return login user (from kinit or from keytab if specified).</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/VersionInfo.html#logVersion--">logVersion()</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/VersionInfo.html" title="class in org.apache.hadoop.hbase.util">VersionInfo</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/filter/LongComparator.html" title="class in org.apache.hadoop.hbase.filter"><span class="typeNameLink">LongComparator</span></a> - Class in <a href="org/apache/hadoop/hbase/filter/package-summary.html">org.apache.hadoop.hbase.filter</a></dt>
@@ -17238,6 +17270,11 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/SimplePositionedMutableByteRange.html#shallowCopySubRange-int-int-">shallowCopySubRange(int, int)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/SimplePositionedMutableByteRange.html" title="class in org.apache.hadoop.hbase.util">SimplePositionedMutableByteRange</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.html#shouldLoginFromKeytab-org.apache.hadoop.conf.Configuration-">shouldLoginFromKeytab(Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></dt>
+<dd>
+<div class="block">In secure environment, if a user specified his keytab and principal,
+ a hbase client will try to login with them.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TableInputFormat.html#SHUFFLE_MAPS">SHUFFLE_MAPS</a></span> - Static variable in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TableInputFormat.html" title="class in org.apache.hadoop.hbase.mapreduce">TableInputFormat</a></dt>
 <dd>
 <div class="block">Specify if we have to shuffle the map tasks.</div>
@@ -18701,6 +18738,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#toGroupEntry-java.lang.String-">toGroupEntry(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>
 <dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 <div class="block">Returns the group entry with the group prefix for a group principal.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#toHColumnDescriptor-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">toHColumnDescriptor(ColumnFamilyDescriptor)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 58f6135..30f1281 100644
--- a/apidocs/org/apache/hadoop/hbase/AuthUtil.html
+++ b/apidocs/org/apache/hadoop/hbase/AuthUtil.html
@@ -18,8 +18,8 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":41};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -75,13 +75,13 @@ var activeTableTab = "activeTableTab";
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li>Constr&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="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li>Constr&nbsp;|&nbsp;</li>
 <li><a href="#method.detail">Method</a></li>
 </ul>
@@ -108,9 +108,13 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <hr>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">since 2.2.0, to be removed in hbase-3.0.0.</span></div>
+</div>
 <br>
-<pre>@InterfaceAudience.Public
-public class <a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.70">AuthUtil</a>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
+ @InterfaceAudience.Public
+public final class <a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.79">AuthUtil</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">Utility methods for helping with security tasks. Downstream users
  may rely on this class to handle authenticating via keytab where
@@ -145,13 +149,47 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  </pre>
 
  See the "Running Canary in a Kerberos-enabled Cluster" section of the HBase Reference Guide for
- an example of configuring a user of this Auth Chore to run on a secure cluster.</div>
+ 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
+ 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>
 </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>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/AuthUtil.html#HBASE_CLIENT_KERBEROS_PRINCIPAL">HBASE_CLIENT_KERBEROS_PRINCIPAL</a></span></code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Client principal</div>
+</td>
+</tr>
+<tr class="rowColor">
+<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/AuthUtil.html#HBASE_CLIENT_KEYTAB_FILE">HBASE_CLIENT_KEYTAB_FILE</a></span></code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Client keytab file</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
 <!-- ========== METHOD SUMMARY =========== -->
 <ul class="blockList">
 <li class="blockList"><a name="method.summary">
@@ -159,7 +197,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </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="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<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="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t6" class="tableTab"><span><a href="javascript:show(32);">Deprecated 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>
@@ -167,7 +205,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#getAuthChore-org.apache.hadoop.conf.Configuration-">getAuthChore</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">Deprecated since 2.2.0, this method will be internal use only after 3.0.0.</span></div>
+</div>
 </td>
 </tr>
 </table>
@@ -186,6 +226,44 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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="HBASE_CLIENT_KEYTAB_FILE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>HBASE_CLIENT_KEYTAB_FILE</h4>
+<pre>public static 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> <a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.87">HBASE_CLIENT_KEYTAB_FILE</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Client keytab file</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.AuthUtil.HBASE_CLIENT_KEYTAB_FILE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="HBASE_CLIENT_KERBEROS_PRINCIPAL">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>HBASE_CLIENT_KERBEROS_PRINCIPAL</h4>
+<pre>public static 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> <a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.90">HBASE_CLIENT_KERBEROS_PRINCIPAL</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Client principal</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.AuthUtil.HBASE_CLIENT_KERBEROS_PRINCIPAL">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
 <!-- ============ METHOD DETAIL ========== -->
 <ul class="blockList">
 <li class="blockList"><a name="method.detail">
@@ -198,8 +276,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getAuthChore</h4>
-<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.85">getAuthChore</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><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
+public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.220">getAuthChore</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"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Deprecated since 2.2.0, this method will be internal use only after 3.0.0.</span></div>
 <div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -265,13 +345,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li>Constr&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="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li>Constr&nbsp;|&nbsp;</li>
 <li><a href="#method.detail">Method</a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/apidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html b/apidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
index 9ded7b3..35c844b 100644
--- a/apidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
+++ b/apidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
@@ -105,6 +105,15 @@
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/AuthUtil.html#getAuthChore-org.apache.hadoop.conf.Configuration-">getAuthChore</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">Deprecated since 2.2.0, this method will be internal use only after 3.0.0.</span></div>
+</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AuthUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/AuthUtil.html#getAuthRenewalChore-org.apache.hadoop.security.UserGroupInformation-">getAuthRenewalChore</a></span>(org.apache.hadoop.security.UserGroupInformation&nbsp;user)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
 </td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/apidocs/org/apache/hadoop/hbase/client/ConnectionFactory.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/ConnectionFactory.html b/apidocs/org/apache/hadoop/hbase/client/ConnectionFactory.html
index e3dba54..8a60f70 100644
--- a/apidocs/org/apache/hadoop/hbase/client/ConnectionFactory.html
+++ b/apidocs/org/apache/hadoop/hbase/client/ConnectionFactory.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.56">ConnectionFactory</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.68">ConnectionFactory</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">A non-instantiable class that manages creation of <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client"><code>Connection</code></a>s. Managing the lifecycle of
  the <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client"><code>Connection</code></a>s to the cluster is the responsibility of the caller. From a
@@ -128,6 +128,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  }
  </pre>
 
+ Since 2.2.0, Connection created by ConnectionFactory can contain user-specified kerberos
+ credentials if caller has following two configurations set:
+ <ul>
+   <li>hbase.client.keytab.file, points to a valid keytab on the local filesystem
+   <li>hbase.client.kerberos.principal, gives the Kerberos principal to use
+ </ul>
+ By this way, caller can directly connect to kerberized cluster without caring login and
+ credentials renewal logic in application.
+ <pre>
+ </pre>
  Similarly, <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client"><code>Connection</code></a> also returns <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client"><code>Admin</code></a> and <a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionLocator</code></a>
  implementations.</div>
 <dl>
@@ -276,7 +286,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HBASE_CLIENT_ASYNC_CONNECTION_IMPL</h4>
-<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.58">HBASE_CLIENT_ASYNC_CONNECTION_IMPL</a></pre>
+<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.70">HBASE_CLIENT_ASYNC_CONNECTION_IMPL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.ConnectionFactory.HBASE_CLIENT_ASYNC_CONNECTION_IMPL">Constant Field Values</a></dd>
@@ -297,7 +307,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ConnectionFactory</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.61">ConnectionFactory</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.73">ConnectionFactory</a>()</pre>
 <div class="block">No public c.tors</div>
 </li>
 </ul>
@@ -315,7 +325,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createConnection</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.86">createConnection</a>()
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.98">createConnection</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">Create a new Connection instance using default HBaseConfiguration. Connection encapsulates all
  housekeeping for a connection to the cluster. All tables and interfaces created from returned
@@ -349,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>createConnection</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.113">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.126">createConnection</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">Create a new Connection instance using the passed <code>conf</code> instance. Connection
  encapsulates all housekeeping for a connection to the cluster. All tables and interfaces
@@ -385,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>createConnection</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.141">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.154">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)
                                    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 a new Connection instance using the passed <code>conf</code> instance. Connection
@@ -423,7 +433,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createConnection</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.170">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.183">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                           <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</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>
 <div class="block">Create a new Connection instance using the passed <code>conf</code> instance. Connection
@@ -461,7 +471,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createConnection</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.199">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.212">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool,
                                           <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</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>
@@ -501,7 +511,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createAsyncConnection</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.230">createAsyncConnection</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.240">createAsyncConnection</a>()</pre>
 <div class="block">Call <a href="../../../../../org/apache/hadoop/hbase/client/ConnectionFactory.html#createAsyncConnection-org.apache.hadoop.conf.Configuration-"><code>createAsyncConnection(Configuration)</code></a> using default HBaseConfiguration.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -517,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>createAsyncConnection</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.243">createAsyncConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.253">createAsyncConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Call <a href="../../../../../org/apache/hadoop/hbase/client/ConnectionFactory.html#createAsyncConnection-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.security.User-"><code>createAsyncConnection(Configuration, User)</code></a> using the given <code>conf</code> and a
  User object created by <code>UserProvider</code>. The given <code>conf</code> will also be used to
  initialize the <code>UserProvider</code>.</div>
@@ -538,7 +548,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createAsyncConnection</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.271">createAsyncConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncConnection</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html#line.281">createAsyncConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                        <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</pre>
 <div class="block">Create a new AsyncConnection instance using the passed <code>conf</code> and <code>user</code>.
  AsyncConnection encapsulates all housekeeping for a connection to the cluster. All tables and

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/apidocs/org/apache/hadoop/hbase/package-summary.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/package-summary.html b/apidocs/org/apache/hadoop/hbase/package-summary.html
index 52e1919..0c36ff2 100644
--- a/apidocs/org/apache/hadoop/hbase/package-summary.html
+++ b/apidocs/org/apache/hadoop/hbase/package-summary.html
@@ -151,8 +151,8 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">AuthUtil</a></td>
-<td class="colLast">
-<div class="block">Utility methods for helping with security tasks.</div>
+<td class="colLast">Deprecated
+<div class="block"><span class="deprecationComment">since 2.2.0, to be removed in hbase-3.0.0.</span></div>
 </td>
 </tr>
 <tr class="rowColor">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/apidocs/org/apache/hadoop/hbase/security/User.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/security/User.html b/apidocs/org/apache/hadoop/hbase/security/User.html
index b904c89..19548a2 100644
--- a/apidocs/org/apache/hadoop/hbase/security/User.html
+++ b/apidocs/org/apache/hadoop/hbase/security/User.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":9,"i2":9,"i3":10,"i4":9,"i5":10,"i6":10,"i7":6,"i8":10,"i9":10,"i10":10,"i11":10,"i12":9,"i13":9,"i14":9,"i15":6,"i16":6,"i17":9,"i18":10};
+var methods = {"i0":10,"i1":9,"i2":9,"i3":10,"i4":9,"i5":10,"i6":10,"i7":6,"i8":10,"i9":10,"i10":10,"i11":10,"i12":9,"i13":10,"i14":9,"i15":9,"i16":9,"i17":6,"i18":6,"i19":9,"i20":9,"i21":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.55">User</a>
+public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.57">User</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">Wrapper to abstract out usage of user and group information in HBase.
 
@@ -261,12 +261,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </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/User.html#isLoginFromKeytab--">isLoginFromKeytab</a></span>()</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/User.html#isSecurityEnabled--">isSecurityEnabled</a></span>()</code>
 <div class="block">Returns whether or not Kerberos authentication is configured for Hadoop.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.html#login-org.apache.hadoop.conf.Configuration-java.lang.String-java.lang.String-java.lang.String-">login</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;fileConfKey,
@@ -276,25 +280,39 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  credential file and login principal.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.html#login-java.lang.String-java.lang.String-">login</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;keytabLocation,
+     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pricipalName)</code>
+<div class="block">Login with the given keytab and principal.</div>
+</td>
+</tr>
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>abstract &lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.html#runAs-java.security.PrivilegedAction-">runAs</a></span>(<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;T&gt;&nbsp;action)</code>
 <div class="block">Executes the given action within the context of this user.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>abstract &lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.html#runAs-java.security.PrivilegedExceptionAction-">runAs</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)</code>
 <div class="block">Executes the given action within the context of this user.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>static &lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.html#runAsLoginUser-java.security.PrivilegedExceptionAction-">runAsLoginUser</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)</code>
 <div class="block">Executes the given action as the login user</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i20" class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.html#shouldLoginFromKeytab-org.apache.hadoop.conf.Configuration-">shouldLoginFromKeytab</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block">In secure environment, if a user specified his keytab and principal,
+ a hbase client will try to login with them.</div>
+</td>
+</tr>
+<tr id="i21" 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/User.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
@@ -326,7 +344,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_SECURITY_CONF_KEY</h4>
-<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.56">HBASE_SECURITY_CONF_KEY</a></pre>
+<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.58">HBASE_SECURITY_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.security.User.HBASE_SECURITY_CONF_KEY">Constant Field Values</a></dd>
@@ -339,7 +357,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_SECURITY_AUTHORIZATION_CONF_KEY</h4>
-<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.58">HBASE_SECURITY_AUTHORIZATION_CONF_KEY</a></pre>
+<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.60">HBASE_SECURITY_AUTHORIZATION_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.security.User.HBASE_SECURITY_AUTHORIZATION_CONF_KEY">Constant Field Values</a></dd>
@@ -352,7 +370,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ugi</h4>
-<pre>protected&nbsp;org.apache.hadoop.security.UserGroupInformation <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.61">ugi</a></pre>
+<pre>protected&nbsp;org.apache.hadoop.security.UserGroupInformation <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.63">ugi</a></pre>
 </li>
 </ul>
 </li>
@@ -369,7 +387,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>User</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.55">User</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.57">User</a>()</pre>
 </li>
 </ul>
 </li>
@@ -386,7 +404,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUGI</h4>
-<pre>public&nbsp;org.apache.hadoop.security.UserGroupInformation&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.63">getUGI</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.security.UserGroupInformation&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.65">getUGI</a>()</pre>
 </li>
 </ul>
 <a name="getName--">
@@ -395,7 +413,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getName</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/User.html#line.73">getName</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/User.html#line.75">getName</a>()</pre>
 <div class="block">Returns the full user name.  For Kerberos principals this will include
  the host and realm portions of the principal name.</div>
 <dl>
@@ -410,7 +428,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getGroupNames</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/User.html#line.82">getGroupNames</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/User.html#line.84">getGroupNames</a>()</pre>
 <div class="block">Returns the list of groups of which this user is a member.  On secure
  Hadoop this returns the group information for the user as resolved on the
  server.  For 0.20 based Hadoop, the group names are passed from the client.</div>
@@ -422,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>getShortName</h4>
-<pre>public abstract&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/User.html#line.92">getShortName</a>()</pre>
+<pre>public abstract&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/User.html#line.94">getShortName</a>()</pre>
 <div class="block">Returns the shortened version of the user name -- the portion that maps
  to an operating system user name.</div>
 <dl>
@@ -437,7 +455,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>runAs</h4>
-<pre>public abstract&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.97">runAs</a>(<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;T&gt;&nbsp;action)</pre>
+<pre>public abstract&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.99">runAs</a>(<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;T&gt;&nbsp;action)</pre>
 <div class="block">Executes the given action within the context of this user.</div>
 </li>
 </ul>
@@ -447,7 +465,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>runAs</h4>
-<pre>public abstract&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.102">runAs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)
+<pre>public abstract&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.104">runAs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)
                      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">Executes the given action within the context of this user.</div>
@@ -464,7 +482,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getToken</h4>
-<pre>public&nbsp;org.apache.hadoop.security.token.Token&lt;?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.113">getToken</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;kind,
+<pre>public&nbsp;org.apache.hadoop.security.token.Token&lt;?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.115">getToken</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;kind,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;service)
                                                    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 the Token of the specified kind associated with this user,
@@ -486,7 +504,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTokens</h4>
-<pre>public&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;org.apache.hadoop.security.token.Token&lt;? extends org.apache.hadoop.security.token.TokenIdentifier&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.126">getTokens</a>()</pre>
+<pre>public&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;org.apache.hadoop.security.token.Token&lt;? extends org.apache.hadoop.security.token.TokenIdentifier&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.128">getTokens</a>()</pre>
 <div class="block">Returns all the tokens stored in the user's credentials.</div>
 </li>
 </ul>
@@ -496,7 +514,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addToken</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.135">addToken</a>(org.apache.hadoop.security.token.Token&lt;? extends org.apache.hadoop.security.token.TokenIdentifier&gt;&nbsp;token)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.137">addToken</a>(org.apache.hadoop.security.token.Token&lt;? extends org.apache.hadoop.security.token.TokenIdentifier&gt;&nbsp;token)</pre>
 <div class="block">Adds the given Token to the user's credentials.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -504,13 +522,26 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="isLoginFromKeytab--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isLoginFromKeytab</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.144">isLoginFromKeytab</a>()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if user credentials are obtained from keytab.</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/User.html#line.140">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;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.149">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;o)</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>
@@ -523,7 +554,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.151">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.160">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>
@@ -536,7 +567,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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/User.html#line.156">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/User.html#line.165">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>
@@ -549,7 +580,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrent</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.163">getCurrent</a>()
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.172">getCurrent</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">Returns the <code>User</code> instance within current execution context.</div>
 <dl>
@@ -564,7 +595,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>runAsLoginUser</h4>
-<pre>public static&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.178">runAsLoginUser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)
+<pre>public static&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.187">runAsLoginUser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)
                             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">Executes the given action as the login user</div>
 <dl>
@@ -583,7 +614,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.194">create</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.203">create</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
 <div class="block">Wraps an underlying <code>UserGroupInformation</code> instance.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -599,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>createUserForTesting</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.207">createUserForTesting</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.216">createUserForTesting</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;name,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;groups)</pre>
 <div class="block">Generates a new <code>User</code> instance specifically for use in test code.</div>
@@ -618,7 +649,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>login</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.229">login</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.238">login</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;fileConfKey,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;principalConfKey,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;localhost)
@@ -642,13 +673,32 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="login-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>login</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.249">login</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;keytabLocation,
+                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pricipalName)
+                  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">Login with the given keytab and principal.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>keytabLocation</code> - path of keytab</dd>
+<dd><code>pricipalName</code> - login principal</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> - underlying exception from UserGroupInformation.loginUserFromKeytab</dd>
+</dl>
+</li>
+</ul>
 <a name="isSecurityEnabled--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>isSecurityEnabled</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.240">isSecurityEnabled</a>()</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.259">isSecurityEnabled</a>()</pre>
 <div class="block">Returns whether or not Kerberos authentication is configured for Hadoop.
  For non-secure Hadoop, this always returns <code>false</code>.
  For secure Hadoop, it will return the value from
@@ -658,15 +708,33 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="isHBaseSecurityEnabled-org.apache.hadoop.conf.Configuration-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>isHBaseSecurityEnabled</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.249">isHBaseSecurityEnabled</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.268">isHBaseSecurityEnabled</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Returns whether or not secure authentication is enabled for HBase. Note that
  HBase security requires HDFS security to provide any guarantees, so it is
  recommended that secure HBase should run on secure HDFS.</div>
 </li>
 </ul>
+<a name="shouldLoginFromKeytab-org.apache.hadoop.conf.Configuration-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>shouldLoginFromKeytab</h4>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.279">shouldLoginFromKeytab</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<div class="block">In secure environment, if a user specified his keytab and principal,
+ a hbase client will try to login with them. Otherwise, hbase client will try to obtain
+ ticket(through kinit) from system.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>conf</code> - configuration file</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if keytab and principal are configured</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/apidocs/org/apache/hadoop/hbase/security/class-use/User.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/security/class-use/User.html b/apidocs/org/apache/hadoop/hbase/security/class-use/User.html
index 32e819d..ace1b72 100644
--- a/apidocs/org/apache/hadoop/hbase/security/class-use/User.html
+++ b/apidocs/org/apache/hadoop/hbase/security/class-use/User.html
@@ -106,6 +106,22 @@
 </a>
 <h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> in <a href="../../../../../../org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></h3>
 <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/package-summary.html">org.apache.hadoop.hbase</a> that return <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</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 <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">AuthUtil.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/AuthUtil.html#loginClient-org.apache.hadoop.conf.Configuration-">loginClient</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">For kerberized cluster, return login user (from kinit or from keytab if specified).</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/package-summary.html">org.apache.hadoop.hbase</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>


[24/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/apidocs/src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html b/apidocs/src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html
index ec93431..8cbaf76 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/ConnectionFactory.html
@@ -28,278 +28,291 @@
 <span class="sourceLineNo">020</span><a name="line.20"></a>
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.lang.reflect.Constructor;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.concurrent.CompletableFuture;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.concurrent.ExecutorService;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseConfiguration;<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.apache.hadoop.hbase.security.User;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>/**<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * A non-instantiable class that manages creation of {@link Connection}s. Managing the lifecycle of<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * the {@link Connection}s to the cluster is the responsibility of the caller. From a<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * {@link Connection}, {@link Table} implementations are retrieved with<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * {@link Connection#getTable(org.apache.hadoop.hbase.TableName)}. Example:<a name="line.37"></a>
-<span class="sourceLineNo">038</span> *<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * &lt;pre&gt;<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * Connection connection = ConnectionFactory.createConnection(config);<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * Table table = connection.getTable(TableName.valueOf("table1"));<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * try {<a name="line.42"></a>
-<span class="sourceLineNo">043</span> *   // Use the table as needed, for a single operation and a single thread<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * } finally {<a name="line.44"></a>
-<span class="sourceLineNo">045</span> *   table.close();<a name="line.45"></a>
-<span class="sourceLineNo">046</span> *   connection.close();<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * }<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * &lt;/pre&gt;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> *<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * Similarly, {@link Connection} also returns {@link Admin} and {@link RegionLocator}<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * implementations.<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * @see Connection<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * @since 0.99.0<a name="line.53"></a>
-<span class="sourceLineNo">054</span> */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>@InterfaceAudience.Public<a name="line.55"></a>
-<span class="sourceLineNo">056</span>public class ConnectionFactory {<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public static final String HBASE_CLIENT_ASYNC_CONNECTION_IMPL = "hbase.client.async.connection.impl";<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  /** No public c.tors */<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  protected ConnectionFactory() {<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>   * Create a new Connection instance using default HBaseConfiguration. Connection encapsulates all<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * housekeeping for a connection to the cluster. All tables and interfaces created from returned<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * connection share zookeeper connection, meta cache, and connections to region servers and<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * masters. &lt;br&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   * instance. Typical usage:<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   *<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * &lt;pre&gt;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * Connection connection = ConnectionFactory.createConnection();<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * Table table = connection.getTable(TableName.valueOf("mytable"));<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * try {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   *   table.get(...);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   *   ...<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * } finally {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   *   table.close();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   *   connection.close();<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * }<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * &lt;/pre&gt;<a name="line.82"></a>
+<span class="sourceLineNo">023</span>import java.security.PrivilegedExceptionAction;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.concurrent.CompletableFuture;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.ExecutorService;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><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.AuthUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.security.User;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<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> * A non-instantiable class that manages creation of {@link Connection}s. Managing the lifecycle of<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * the {@link Connection}s to the cluster is the responsibility of the caller. From a<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * {@link Connection}, {@link Table} implementations are retrieved with<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * {@link Connection#getTable(org.apache.hadoop.hbase.TableName)}. Example:<a name="line.39"></a>
+<span class="sourceLineNo">040</span> *<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * &lt;pre&gt;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Connection connection = ConnectionFactory.createConnection(config);<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * Table table = connection.getTable(TableName.valueOf("table1"));<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * try {<a name="line.44"></a>
+<span class="sourceLineNo">045</span> *   // Use the table as needed, for a single operation and a single thread<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * } finally {<a name="line.46"></a>
+<span class="sourceLineNo">047</span> *   table.close();<a name="line.47"></a>
+<span class="sourceLineNo">048</span> *   connection.close();<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * }<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * &lt;/pre&gt;<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Since 2.2.0, Connection created by ConnectionFactory can contain user-specified kerberos<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * credentials if caller has following two configurations set:<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * &lt;ul&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *   &lt;li&gt;hbase.client.keytab.file, points to a valid keytab on the local filesystem<a name="line.55"></a>
+<span class="sourceLineNo">056</span> *   &lt;li&gt;hbase.client.kerberos.principal, gives the Kerberos principal to use<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;/ul&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * By this way, caller can directly connect to kerberized cluster without caring login and<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * credentials renewal logic in application.<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * &lt;pre&gt;<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * &lt;/pre&gt;<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * Similarly, {@link Connection} also returns {@link Admin} and {@link RegionLocator}<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * implementations.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * @see Connection<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * @since 0.99.0<a name="line.65"></a>
+<span class="sourceLineNo">066</span> */<a name="line.66"></a>
+<span class="sourceLineNo">067</span>@InterfaceAudience.Public<a name="line.67"></a>
+<span class="sourceLineNo">068</span>public class ConnectionFactory {<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  public static final String HBASE_CLIENT_ASYNC_CONNECTION_IMPL = "hbase.client.async.connection.impl";<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  /** No public c.tors */<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  protected ConnectionFactory() {<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>  /**<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * Create a new Connection instance using default HBaseConfiguration. Connection encapsulates all<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * housekeeping for a connection to the cluster. All tables and interfaces created from returned<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * connection share zookeeper connection, meta cache, and connections to region servers and<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * masters. &lt;br&gt;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * instance. Typical usage:<a name="line.82"></a>
 <span class="sourceLineNo">083</span>   *<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  public static Connection createConnection() throws IOException {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    return createConnection(HBaseConfiguration.create(), null, null);<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>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * region servers and masters. &lt;br&gt;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * instance. Typical usage:<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   *<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * &lt;pre&gt;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * Table table = connection.getTable(TableName.valueOf("mytable"));<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   * try {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   *   table.get(...);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   *   ...<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * } finally {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   *   table.close();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   *   connection.close();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * &lt;/pre&gt;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   *<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param conf configuration<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static Connection createConnection(Configuration conf) throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    return createConnection(conf, null, null);<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>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * region servers and masters. &lt;br&gt;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * instance. Typical usage:<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   *<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * &lt;pre&gt;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * Table table = connection.getTable(TableName.valueOf("mytable"));<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * try {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   *   table.get(...);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   *   ...<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * } finally {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   *   table.close();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   *   connection.close();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * &lt;/pre&gt;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   *<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * @param conf configuration<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * @param pool the thread pool to use for batch operations<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  public static Connection createConnection(Configuration conf, ExecutorService pool)<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      throws IOException {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return createConnection(conf, pool, null);<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>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * region servers and masters. &lt;br&gt;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * instance. Typical usage:<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   *<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * &lt;pre&gt;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Table table = connection.getTable(TableName.valueOf("table1"));<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * try {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   *   table.get(...);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   *   ...<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * } finally {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   *   table.close();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   *   connection.close();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * &lt;/pre&gt;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   *<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * @param conf configuration<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * @param user the user the connection is for<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public static Connection createConnection(Configuration conf, User user) throws IOException {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return createConnection(conf, null, user);<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>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * region servers and masters. &lt;br&gt;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * instance. Typical usage:<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   *<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * &lt;pre&gt;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   * Table table = connection.getTable(TableName.valueOf("table1"));<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * try {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   *   table.get(...);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   *   ...<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * } finally {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   *   table.close();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   *   connection.close();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * &lt;/pre&gt;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   *<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * @param conf configuration<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   * @param user the user the connection is for<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * @param pool the thread pool to use for batch operations<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   */<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  public static Connection createConnection(Configuration conf, ExecutorService pool, User user)<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throws IOException {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    if (user == null) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      UserProvider provider = UserProvider.instantiate(conf);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      user = provider.getCurrent();<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>    String className = conf.get(ClusterConnection.HBASE_CLIENT_CONNECTION_IMPL,<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      ConnectionImplementation.class.getName());<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    Class&lt;?&gt; clazz;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      clazz = Class.forName(className);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    } catch (ClassNotFoundException e) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      throw new IOException(e);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    try {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      // Default HCM#HCI is not accessible; make it so before invoking.<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      Constructor&lt;?&gt; constructor = clazz.getDeclaredConstructor(Configuration.class,<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        ExecutorService.class, User.class);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      constructor.setAccessible(true);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      return (Connection) constructor.newInstance(conf, pool, user);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    } catch (Exception e) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      throw new IOException(e);<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><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * Call {@link #createAsyncConnection(Configuration)} using default HBaseConfiguration.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @see #createAsyncConnection(Configuration)<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return AsyncConnection object wrapped by CompletableFuture<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  public static CompletableFuture&lt;AsyncConnection&gt; createAsyncConnection() {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return createAsyncConnection(HBaseConfiguration.create());<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>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * Call {@link #createAsyncConnection(Configuration, User)} using the given {@code conf} and a<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * User object created by {@link UserProvider}. The given {@code conf} will also be used to<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * initialize the {@link UserProvider}.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param conf configuration<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @return AsyncConnection object wrapped by CompletableFuture<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @see #createAsyncConnection(Configuration, User)<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * @see UserProvider<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   */<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static CompletableFuture&lt;AsyncConnection&gt; createAsyncConnection(Configuration conf) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    User user;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    try {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      user = UserProvider.instantiate(conf).getCurrent();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    } catch (IOException e) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      CompletableFuture&lt;AsyncConnection&gt; future = new CompletableFuture&lt;&gt;();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      future.completeExceptionally(e);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      return future;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    return createAsyncConnection(conf, user);<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>   * Create a new AsyncConnection instance using the passed {@code conf} and {@code user}.<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * AsyncConnection encapsulates all housekeeping for a connection to the cluster. All tables and<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * interfaces created from returned connection share zookeeper connection, meta cache, and<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * connections to region servers and masters.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * &lt;p&gt;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * The caller is responsible for calling {@link AsyncConnection#close()} on the returned<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * connection instance.<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * &lt;p&gt;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * Usually you should only create one AsyncConnection instance in your code and use it everywhere<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * as it is thread safe.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * @param conf configuration<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * @param user the user the asynchronous connection is for<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @return AsyncConnection object wrapped by CompletableFuture<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * @throws IOException<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  public static CompletableFuture&lt;AsyncConnection&gt; createAsyncConnection(Configuration conf,<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      User user) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    CompletableFuture&lt;AsyncConnection&gt; future = new CompletableFuture&lt;&gt;();<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    AsyncRegistry registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    registry.getClusterId().whenComplete((clusterId, error) -&gt; {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if (error != null) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        future.completeExceptionally(error);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        return;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      if (clusterId == null) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        future.completeExceptionally(new IOException("clusterid came back null"));<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        return;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      Class&lt;? extends AsyncConnection&gt; clazz = conf.getClass(HBASE_CLIENT_ASYNC_CONNECTION_IMPL,<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        AsyncConnectionImpl.class, AsyncConnection.class);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      try {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        future.complete(ReflectionUtils.newInstance(clazz, conf, registry, clusterId, user));<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      } catch (Exception e) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        future.completeExceptionally(e);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    });<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    return future;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
-<span class="sourceLineNo">294</span>}<a name="line.294"></a>
+<span class="sourceLineNo">084</span>   * &lt;pre&gt;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * Connection connection = ConnectionFactory.createConnection();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * Table table = connection.getTable(TableName.valueOf("mytable"));<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * try {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   *   table.get(...);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   *   ...<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * } finally {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   *   table.close();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   *   connection.close();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * }<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * &lt;/pre&gt;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   *<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public static Connection createConnection() throws IOException {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    Configuration conf = HBaseConfiguration.create();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    return createConnection(conf, null, AuthUtil.loginClient(conf));<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>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * region servers and masters. &lt;br&gt;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * instance. Typical usage:<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * &lt;pre&gt;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Table table = connection.getTable(TableName.valueOf("mytable"));<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * try {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   *   table.get(...);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   *   ...<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * } finally {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   *   table.close();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   *   connection.close();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * &lt;/pre&gt;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   *<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * @param conf configuration<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public static Connection createConnection(Configuration conf) throws IOException {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    return createConnection(conf, null, AuthUtil.loginClient(conf));<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>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * region servers and masters. &lt;br&gt;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * instance. Typical usage:<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   *<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * &lt;pre&gt;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * Table table = connection.getTable(TableName.valueOf("mytable"));<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * try {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   *   table.get(...);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   *   ...<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * } finally {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   *   table.close();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   *   connection.close();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * &lt;/pre&gt;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   *<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * @param conf configuration<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @param pool the thread pool to use for batch operations<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public static Connection createConnection(Configuration conf, ExecutorService pool)<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      throws IOException {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return createConnection(conf, pool, AuthUtil.loginClient(conf));<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>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * region servers and masters. &lt;br&gt;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * instance. Typical usage:<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   *<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * &lt;pre&gt;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * Table table = connection.getTable(TableName.valueOf("table1"));<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * try {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   *   table.get(...);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   *   ...<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * } finally {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   *   table.close();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   *   connection.close();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * &lt;/pre&gt;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   *<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   * @param conf configuration<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * @param user the user the connection is for<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public static Connection createConnection(Configuration conf, User user) throws IOException {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    return createConnection(conf, null, user);<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>  /**<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * Create a new Connection instance using the passed &lt;code&gt;conf&lt;/code&gt; instance. Connection<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * encapsulates all housekeeping for a connection to the cluster. All tables and interfaces<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * created from returned connection share zookeeper connection, meta cache, and connections to<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * region servers and masters. &lt;br&gt;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * The caller is responsible for calling {@link Connection#close()} on the returned connection<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * instance. Typical usage:<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   *<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * &lt;pre&gt;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * Connection connection = ConnectionFactory.createConnection(conf);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * Table table = connection.getTable(TableName.valueOf("table1"));<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * try {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   *   table.get(...);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   *   ...<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * } finally {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   *   table.close();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   *   connection.close();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * &lt;/pre&gt;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   *<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @param conf configuration<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * @param user the user the connection is for<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   * @param pool the thread pool to use for batch operations<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * @return Connection object for &lt;code&gt;conf&lt;/code&gt;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   */<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  public static Connection createConnection(Configuration conf, ExecutorService pool,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    final User user) throws IOException {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    String className = conf.get(ClusterConnection.HBASE_CLIENT_CONNECTION_IMPL,<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      ConnectionImplementation.class.getName());<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    Class&lt;?&gt; clazz;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    try {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      clazz = Class.forName(className);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    } catch (ClassNotFoundException e) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      throw new IOException(e);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    try {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      // Default HCM#HCI is not accessible; make it so before invoking.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      Constructor&lt;?&gt; constructor = clazz.getDeclaredConstructor(Configuration.class,<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        ExecutorService.class, User.class);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      constructor.setAccessible(true);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      return user.runAs(<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        (PrivilegedExceptionAction&lt;Connection&gt;)() -&gt;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>          (Connection) constructor.newInstance(conf, pool, user));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    } catch (Exception e) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      throw new IOException(e);<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><a name="line.234"></a>
+<span class="sourceLineNo">235</span>  /**<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * Call {@link #createAsyncConnection(Configuration)} using default HBaseConfiguration.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * @see #createAsyncConnection(Configuration)<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * @return AsyncConnection object wrapped by CompletableFuture<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public static CompletableFuture&lt;AsyncConnection&gt; createAsyncConnection() {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    return createAsyncConnection(HBaseConfiguration.create());<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>   * Call {@link #createAsyncConnection(Configuration, User)} using the given {@code conf} and a<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * User object created by {@link UserProvider}. The given {@code conf} will also be used to<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * initialize the {@link UserProvider}.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * @param conf configuration<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @return AsyncConnection object wrapped by CompletableFuture<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @see #createAsyncConnection(Configuration, User)<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * @see UserProvider<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  public static CompletableFuture&lt;AsyncConnection&gt; createAsyncConnection(Configuration conf) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    User user;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    try {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      user = AuthUtil.loginClient(conf);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    } catch (IOException e) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      CompletableFuture&lt;AsyncConnection&gt; future = new CompletableFuture&lt;&gt;();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      future.completeExceptionally(e);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      return future;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return createAsyncConnection(conf, user);<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>   * Create a new AsyncConnection instance using the passed {@code conf} and {@code user}.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * AsyncConnection encapsulates all housekeeping for a connection to the cluster. All tables and<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   * interfaces created from returned connection share zookeeper connection, meta cache, and<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * connections to region servers and masters.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * &lt;p&gt;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * The caller is responsible for calling {@link AsyncConnection#close()} on the returned<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * connection instance.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * &lt;p&gt;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * Usually you should only create one AsyncConnection instance in your code and use it everywhere<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * as it is thread safe.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @param conf configuration<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @param user the user the asynchronous connection is for<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @return AsyncConnection object wrapped by CompletableFuture<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * @throws IOException<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   */<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public static CompletableFuture&lt;AsyncConnection&gt; createAsyncConnection(Configuration conf,<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      final User user) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    CompletableFuture&lt;AsyncConnection&gt; future = new CompletableFuture&lt;&gt;();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    AsyncRegistry registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    registry.getClusterId().whenComplete((clusterId, error) -&gt; {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      if (error != null) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        future.completeExceptionally(error);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        return;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      if (clusterId == null) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        future.completeExceptionally(new IOException("clusterid came back null"));<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        return;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      Class&lt;? extends AsyncConnection&gt; clazz = conf.getClass(HBASE_CLIENT_ASYNC_CONNECTION_IMPL,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        AsyncConnectionImpl.class, AsyncConnection.class);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      try {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        future.complete(<a name="line.297"></a>
+<span class="sourceLineNo">298</span>          user.runAs((PrivilegedExceptionAction&lt;? extends AsyncConnection&gt;)() -&gt;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>            ReflectionUtils.newInstance(clazz, conf, registry, clusterId, user))<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        );<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      } catch (Exception e) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        future.completeExceptionally(e);<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>    return future;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>}<a name="line.307"></a>
 
 
 


[14/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html b/devapidocs/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html
index 79f9b25..fe18026 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":10,"i2":10,"i3":9,"i4":9,"i5":10,"i6":10};
+var methods = {"i0":9,"i1":10,"i2":10,"i3":9,"i4":9,"i5":9,"i6":10,"i7":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";
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.261">User.SecureHadoopUser</a>
+public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.295">User.SecureHadoopUser</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></pre>
 <div class="block">Bridges <code>User</code> invocations to underlying calls to
  <code>UserGroupInformation</code> for secure Hadoop
@@ -247,12 +247,19 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 </td>
 </tr>
 <tr id="i5" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#login-java.lang.String-java.lang.String-">login</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;keytabLocation,
+     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;principalName)</code>
+<div class="block">Login through configured keytab and pricipal.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>&lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#runAs-java.security.PrivilegedAction-">runAs</a></span>(<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;T&gt;&nbsp;action)</code>
 <div class="block">Executes the given action within the context of this user.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>&lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#runAs-java.security.PrivilegedExceptionAction-">runAs</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)</code>
 <div class="block">Executes the given action within the context of this user.</div>
@@ -264,7 +271,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/security/User.html#addToken-org.apache.hadoop.security.token.Token-">addToken</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#create-org.apache.hadoop.security.UserGroupInformation-">create</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#equals-java.lang.Object-">equals</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#getCurrent--">getCurrent</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#getName--">getName</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#getToken-java.lang.String-java.lang.String-">getToken</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#getTokens--">getTokens</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#getUGI--">getUGI</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#hashCode--">hashCode</a>, <a href="../../../../../org/
 apache/hadoop/hbase/security/User.html#isHBaseSecurityEnabled-org.apache.hadoop.conf.Configuration-">isHBaseSecurityEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#runAsLoginUser-java.security.PrivilegedExceptionAction-">runAsLoginUser</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#toString--">toString</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/security/User.html#addToken-org.apache.hadoop.security.token.Token-">addToken</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#create-org.apache.hadoop.security.UserGroupInformation-">create</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#equals-java.lang.Object-">equals</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#getCurrent--">getCurrent</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#getName--">getName</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#getToken-java.lang.String-java.lang.String-">getToken</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#getTokens--">getTokens</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#getUGI--">getUGI</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#hashCode--">hashCode</a>, <a href="../../../../../org/
 apache/hadoop/hbase/security/User.html#isHBaseSecurityEnabled-org.apache.hadoop.conf.Configuration-">isHBaseSecurityEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#isLoginFromKeytab--">isLoginFromKeytab</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#runAsLoginUser-java.security.PrivilegedExceptionAction-">runAsLoginUser</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#shouldLoginFromKeytab-org.apache.hadoop.conf.Configuration-">shouldLoginFromKeytab</a>, <a href="../../../../../org/apache/hadoop/hbase/security/User.html#toString--">toString</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -293,7 +300,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>shortName</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/User.SecureHadoopUser.html#line.262">shortName</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/User.SecureHadoopUser.html#line.296">shortName</a></pre>
 </li>
 </ul>
 <a name="cache">
@@ -302,7 +309,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cache</h4>
-<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache&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; <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.263">cache</a></pre>
+<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache&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; <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.297">cache</a></pre>
 </li>
 </ul>
 </li>
@@ -319,7 +326,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>SecureHadoopUser</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.265">SecureHadoopUser</a>()
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.299">SecureHadoopUser</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>
@@ -333,7 +340,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>SecureHadoopUser</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.270">SecureHadoopUser</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.304">SecureHadoopUser</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
 </li>
 </ul>
 <a name="SecureHadoopUser-org.apache.hadoop.security.UserGroupInformation-org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache-">
@@ -342,7 +349,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SecureHadoopUser</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.275">SecureHadoopUser</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.309">SecureHadoopUser</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi,
                         org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache&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;&nbsp;cache)</pre>
 </li>
 </ul>
@@ -360,7 +367,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getShortName</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/User.SecureHadoopUser.html#line.282">getShortName</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/User.SecureHadoopUser.html#line.316">getShortName</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/security/User.html#getShortName--">User</a></code></span></div>
 <div class="block">Returns the shortened version of the user name -- the portion that maps
  to an operating system user name.</div>
@@ -378,7 +385,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getGroupNames</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/User.SecureHadoopUser.html#line.294">getGroupNames</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/User.SecureHadoopUser.html#line.328">getGroupNames</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/security/User.html#getGroupNames--">User</a></code></span></div>
 <div class="block">Returns the list of groups of which this user is a member.  On secure
  Hadoop this returns the group information for the user as resolved on the
@@ -395,7 +402,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>runAs</h4>
-<pre>public&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.306">runAs</a>(<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;T&gt;&nbsp;action)</pre>
+<pre>public&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.340">runAs</a>(<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;T&gt;&nbsp;action)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/security/User.html#runAs-java.security.PrivilegedAction-">User</a></code></span></div>
 <div class="block">Executes the given action within the context of this user.</div>
 <dl>
@@ -410,7 +417,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>runAs</h4>
-<pre>public&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.311">runAs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)
+<pre>public&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.345">runAs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)
             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/security/User.html#runAs-java.security.PrivilegedExceptionAction-">User</a></code></span></div>
@@ -430,7 +437,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>createUserForTesting</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.317">createUserForTesting</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.351">createUserForTesting</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;name,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;groups)</pre>
 <dl>
@@ -445,7 +452,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>login</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.341">login</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.375">login</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;fileConfKey,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;principalConfKey,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;localhost)
@@ -467,13 +474,32 @@ extends <a href="../../../../../org/apache/hadoop/hbase/security/User.html" titl
 </dl>
 </li>
 </ul>
+<a name="login-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>login</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.388">login</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;keytabLocation,
+                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;principalName)
+                  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">Login through configured keytab and pricipal.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>keytabLocation</code> - location of keytab</dd>
+<dd><code>principalName</code> - principal in keytab</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 from UserGroupInformation.loginUserFromKeytab</dd>
+</dl>
+</li>
+</ul>
 <a name="isSecurityEnabled--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isSecurityEnabled</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.351">isSecurityEnabled</a>()</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#line.398">isSecurityEnabled</a>()</pre>
 <div class="block">Returns the result of <code>UserGroupInformation.isSecurityEnabled()</code>.</div>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/security/User.TestingGroups.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/User.TestingGroups.html b/devapidocs/org/apache/hadoop/hbase/security/User.TestingGroups.html
index 87b1b11..89a81fe 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/User.TestingGroups.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/User.TestingGroups.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.356">User.TestingGroups</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.403">User.TestingGroups</a>
 extends org.apache.hadoop.security.Groups</pre>
 </li>
 </ul>
@@ -222,7 +222,7 @@ extends org.apache.hadoop.security.Groups</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>userToGroupsMapping</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="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;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html#line.357">userToGroupsMapping</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="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;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html#line.404">userToGroupsMapping</a></pre>
 </li>
 </ul>
 <a name="underlyingImplementation">
@@ -231,7 +231,7 @@ extends org.apache.hadoop.security.Groups</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>underlyingImplementation</h4>
-<pre>private&nbsp;org.apache.hadoop.security.Groups <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html#line.358">underlyingImplementation</a></pre>
+<pre>private&nbsp;org.apache.hadoop.security.Groups <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html#line.405">underlyingImplementation</a></pre>
 </li>
 </ul>
 </li>
@@ -248,7 +248,7 @@ extends org.apache.hadoop.security.Groups</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestingGroups</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html#line.360">TestingGroups</a>(org.apache.hadoop.security.Groups&nbsp;underlyingImplementation)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html#line.407">TestingGroups</a>(org.apache.hadoop.security.Groups&nbsp;underlyingImplementation)</pre>
 </li>
 </ul>
 </li>
@@ -265,7 +265,7 @@ extends org.apache.hadoop.security.Groups</pre>
 <ul class="blockList">
 <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/User.TestingGroups.html#line.366">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/User.TestingGroups.html#line.413">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">Overrides:</span></dt>
@@ -281,7 +281,7 @@ extends org.apache.hadoop.security.Groups</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setUserGroups</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html#line.376">setUserGroups</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>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.TestingGroups.html#line.423">setUserGroups</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;groups)</pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/security/User.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/User.html b/devapidocs/org/apache/hadoop/hbase/security/User.html
index 522ca4d..ee28692 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/User.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/User.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":9,"i2":9,"i3":10,"i4":9,"i5":10,"i6":10,"i7":6,"i8":10,"i9":10,"i10":10,"i11":10,"i12":9,"i13":9,"i14":9,"i15":6,"i16":6,"i17":9,"i18":10};
+var methods = {"i0":10,"i1":9,"i2":9,"i3":10,"i4":9,"i5":10,"i6":10,"i7":6,"i8":10,"i9":10,"i10":10,"i11":10,"i12":9,"i13":10,"i14":9,"i15":9,"i16":9,"i17":6,"i18":6,"i19":9,"i20":9,"i21":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.55">User</a>
+public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.57">User</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">Wrapper to abstract out usage of user and group information in HBase.
 
@@ -292,12 +292,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </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/User.html#isLoginFromKeytab--">isLoginFromKeytab</a></span>()</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/User.html#isSecurityEnabled--">isSecurityEnabled</a></span>()</code>
 <div class="block">Returns whether or not Kerberos authentication is configured for Hadoop.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.html#login-org.apache.hadoop.conf.Configuration-java.lang.String-java.lang.String-java.lang.String-">login</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;fileConfKey,
@@ -307,25 +311,39 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  credential file and login principal.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.html#login-java.lang.String-java.lang.String-">login</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;keytabLocation,
+     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pricipalName)</code>
+<div class="block">Login with the given keytab and principal.</div>
+</td>
+</tr>
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>abstract &lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.html#runAs-java.security.PrivilegedAction-">runAs</a></span>(<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;T&gt;&nbsp;action)</code>
 <div class="block">Executes the given action within the context of this user.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>abstract &lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.html#runAs-java.security.PrivilegedExceptionAction-">runAs</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)</code>
 <div class="block">Executes the given action within the context of this user.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>static &lt;T&gt;&nbsp;T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.html#runAsLoginUser-java.security.PrivilegedExceptionAction-">runAsLoginUser</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)</code>
 <div class="block">Executes the given action as the login user</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i20" class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/User.html#shouldLoginFromKeytab-org.apache.hadoop.conf.Configuration-">shouldLoginFromKeytab</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block">In secure environment, if a user specified his keytab and principal,
+ a hbase client will try to login with them.</div>
+</td>
+</tr>
+<tr id="i21" 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/User.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
@@ -357,7 +375,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_SECURITY_CONF_KEY</h4>
-<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.56">HBASE_SECURITY_CONF_KEY</a></pre>
+<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.58">HBASE_SECURITY_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.security.User.HBASE_SECURITY_CONF_KEY">Constant Field Values</a></dd>
@@ -370,7 +388,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_SECURITY_AUTHORIZATION_CONF_KEY</h4>
-<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.58">HBASE_SECURITY_AUTHORIZATION_CONF_KEY</a></pre>
+<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.60">HBASE_SECURITY_AUTHORIZATION_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.security.User.HBASE_SECURITY_AUTHORIZATION_CONF_KEY">Constant Field Values</a></dd>
@@ -383,7 +401,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ugi</h4>
-<pre>protected&nbsp;org.apache.hadoop.security.UserGroupInformation <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.61">ugi</a></pre>
+<pre>protected&nbsp;org.apache.hadoop.security.UserGroupInformation <a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.63">ugi</a></pre>
 </li>
 </ul>
 </li>
@@ -400,7 +418,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>User</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.55">User</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.57">User</a>()</pre>
 </li>
 </ul>
 </li>
@@ -417,7 +435,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUGI</h4>
-<pre>public&nbsp;org.apache.hadoop.security.UserGroupInformation&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.63">getUGI</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.security.UserGroupInformation&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.65">getUGI</a>()</pre>
 </li>
 </ul>
 <a name="getName--">
@@ -426,7 +444,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getName</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/User.html#line.73">getName</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/User.html#line.75">getName</a>()</pre>
 <div class="block">Returns the full user name.  For Kerberos principals this will include
  the host and realm portions of the principal name.</div>
 <dl>
@@ -441,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>getGroupNames</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/User.html#line.82">getGroupNames</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/User.html#line.84">getGroupNames</a>()</pre>
 <div class="block">Returns the list of groups of which this user is a member.  On secure
  Hadoop this returns the group information for the user as resolved on the
  server.  For 0.20 based Hadoop, the group names are passed from the client.</div>
@@ -453,7 +471,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getShortName</h4>
-<pre>public abstract&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/User.html#line.92">getShortName</a>()</pre>
+<pre>public abstract&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/User.html#line.94">getShortName</a>()</pre>
 <div class="block">Returns the shortened version of the user name -- the portion that maps
  to an operating system user name.</div>
 <dl>
@@ -468,7 +486,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>runAs</h4>
-<pre>public abstract&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.97">runAs</a>(<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;T&gt;&nbsp;action)</pre>
+<pre>public abstract&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.99">runAs</a>(<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;T&gt;&nbsp;action)</pre>
 <div class="block">Executes the given action within the context of this user.</div>
 </li>
 </ul>
@@ -478,7 +496,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>runAs</h4>
-<pre>public abstract&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.102">runAs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)
+<pre>public abstract&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.104">runAs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)
                      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">Executes the given action within the context of this user.</div>
@@ -495,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>getToken</h4>
-<pre>public&nbsp;org.apache.hadoop.security.token.Token&lt;?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.113">getToken</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;kind,
+<pre>public&nbsp;org.apache.hadoop.security.token.Token&lt;?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.115">getToken</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;kind,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;service)
                                                    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 the Token of the specified kind associated with this user,
@@ -517,7 +535,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTokens</h4>
-<pre>public&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;org.apache.hadoop.security.token.Token&lt;? extends org.apache.hadoop.security.token.TokenIdentifier&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.126">getTokens</a>()</pre>
+<pre>public&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;org.apache.hadoop.security.token.Token&lt;? extends org.apache.hadoop.security.token.TokenIdentifier&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.128">getTokens</a>()</pre>
 <div class="block">Returns all the tokens stored in the user's credentials.</div>
 </li>
 </ul>
@@ -527,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>addToken</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.135">addToken</a>(org.apache.hadoop.security.token.Token&lt;? extends org.apache.hadoop.security.token.TokenIdentifier&gt;&nbsp;token)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.137">addToken</a>(org.apache.hadoop.security.token.Token&lt;? extends org.apache.hadoop.security.token.TokenIdentifier&gt;&nbsp;token)</pre>
 <div class="block">Adds the given Token to the user's credentials.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -535,13 +553,26 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="isLoginFromKeytab--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isLoginFromKeytab</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.144">isLoginFromKeytab</a>()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if user credentials are obtained from keytab.</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/User.html#line.140">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;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.149">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;o)</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>
@@ -554,7 +585,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.151">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.160">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>
@@ -567,7 +598,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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/User.html#line.156">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/User.html#line.165">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>
@@ -580,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>getCurrent</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.163">getCurrent</a>()
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.172">getCurrent</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">Returns the <code>User</code> instance within current execution context.</div>
 <dl>
@@ -595,7 +626,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>runAsLoginUser</h4>
-<pre>public static&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.178">runAsLoginUser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)
+<pre>public static&nbsp;&lt;T&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.187">runAsLoginUser</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/security/PrivilegedExceptionAction.html?is-external=true" title="class or interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt;&nbsp;action)
                             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">Executes the given action as the login user</div>
 <dl>
@@ -614,7 +645,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.194">create</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.203">create</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
 <div class="block">Wraps an underlying <code>UserGroupInformation</code> instance.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -630,7 +661,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createUserForTesting</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.207">createUserForTesting</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.216">createUserForTesting</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;name,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;groups)</pre>
 <div class="block">Generates a new <code>User</code> instance specifically for use in test code.</div>
@@ -649,7 +680,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>login</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.229">login</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.238">login</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;fileConfKey,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;principalConfKey,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;localhost)
@@ -673,13 +704,32 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="login-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>login</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.249">login</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;keytabLocation,
+                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pricipalName)
+                  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">Login with the given keytab and principal.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>keytabLocation</code> - path of keytab</dd>
+<dd><code>pricipalName</code> - login principal</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> - underlying exception from UserGroupInformation.loginUserFromKeytab</dd>
+</dl>
+</li>
+</ul>
 <a name="isSecurityEnabled--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>isSecurityEnabled</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.240">isSecurityEnabled</a>()</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.259">isSecurityEnabled</a>()</pre>
 <div class="block">Returns whether or not Kerberos authentication is configured for Hadoop.
  For non-secure Hadoop, this always returns <code>false</code>.
  For secure Hadoop, it will return the value from
@@ -689,15 +739,33 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="isHBaseSecurityEnabled-org.apache.hadoop.conf.Configuration-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>isHBaseSecurityEnabled</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.249">isHBaseSecurityEnabled</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.268">isHBaseSecurityEnabled</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Returns whether or not secure authentication is enabled for HBase. Note that
  HBase security requires HDFS security to provide any guarantees, so it is
  recommended that secure HBase should run on secure HDFS.</div>
 </li>
 </ul>
+<a name="shouldLoginFromKeytab-org.apache.hadoop.conf.Configuration-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>shouldLoginFromKeytab</h4>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/User.html#line.279">shouldLoginFromKeytab</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<div class="block">In secure environment, if a user specified his keytab and principal,
+ a hbase client will try to login with them. Otherwise, hbase client will try to obtain
+ ticket(through kinit) from system.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>conf</code> - configuration file</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if keytab and principal are configured</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/security/UserProvider.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/UserProvider.html b/devapidocs/org/apache/hadoop/hbase/security/UserProvider.html
index 0d603ab..91c57e4 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/UserProvider.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/UserProvider.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":9,"i4":10,"i5":10,"i6":10,"i7":10,"i8":9};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":9,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":9,"i10":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";
@@ -219,6 +219,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/BaseConfigurable.html" t
 </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/UserProvider.html#login-java.lang.String-java.lang.String-">login</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;fileConfKey,
+     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;principalConfKey)</code>
+<div class="block">Login with given keytab and principal.</div>
+</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html#login-java.lang.String-java.lang.String-java.lang.String-">login</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;fileConfKey,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;principalConfKey,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;localhost)</code>
@@ -226,17 +233,24 @@ extends <a href="../../../../../org/apache/hadoop/hbase/BaseConfigurable.html" t
  principal.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<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/UserProvider.html#setConf-org.apache.hadoop.conf.Configuration-">setConf</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html#setUserProviderForTesting-org.apache.hadoop.conf.Configuration-java.lang.Class-">setUserProviderForTesting</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&gt;&nbsp;provider)</code>
 <div class="block">Set the <a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security"><code>UserProvider</code></a> in the given configuration that should be instantiated</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/UserProvider.html#shouldLoginFromKeytab--">shouldLoginFromKeytab</a></span>()</code>
+<div class="block">In secure environment, if a user specified his keytab and principal,
+ a hbase client will try to login with them.</div>
+</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.BaseConfigurable">
@@ -423,13 +437,25 @@ extends <a href="../../../../../org/apache/hadoop/hbase/BaseConfigurable.html" t
 </dl>
 </li>
 </ul>
+<a name="shouldLoginFromKeytab--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>shouldLoginFromKeytab</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/UserProvider.html#line.168">shouldLoginFromKeytab</a>()</pre>
+<div class="block">In secure environment, if a user specified his keytab and principal,
+ a hbase client will try to login with them. Otherwise, hbase client will try to obtain
+ ticket(through kinit) from system.</div>
+</li>
+</ul>
 <a name="getCurrent--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrent</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/UserProvider.html#line.167">getCurrent</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/UserProvider.html#line.176">getCurrent</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>
@@ -445,7 +471,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/BaseConfigurable.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/UserProvider.html#line.176">create</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/UserProvider.html#line.185">create</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
 <div class="block">Wraps an underlying <code>UserGroupInformation</code> instance.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -458,15 +484,16 @@ extends <a href="../../../../../org/apache/hadoop/hbase/BaseConfigurable.html" t
 <a name="login-java.lang.String-java.lang.String-java.lang.String-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>login</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/UserProvider.html#line.196">login</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;fileConfKey,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/UserProvider.html#line.206">login</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;fileConfKey,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;principalConfKey,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;localhost)
            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">Log in the current process using the given configuration keys for the credential file and login
- principal.
+ principal. It is for SPN(Service Principal Name) login. SPN should be this format,
+ servicename/fully.qualified.domain.name@REALM.
  <p>
  <strong>This is only applicable when running on secure Hadoop</strong> -- see
  org.apache.hadoop.security.SecurityUtil#login(Configuration,String,String,String). On regular
@@ -482,6 +509,26 @@ extends <a href="../../../../../org/apache/hadoop/hbase/BaseConfigurable.html" t
 </dl>
 </li>
 </ul>
+<a name="login-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>login</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/UserProvider.html#line.218">login</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;fileConfKey,
+                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;principalConfKey)
+           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">Login with given keytab and principal. This can be used for both SPN(Service Principal Name)
+ and UPN(User Principal Name) which format should be clientname@REALM.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>fileConfKey</code> - config name for client keytab</dd>
+<dd><code>principalConfKey</code> - config name for client principal</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> - underlying exception from UserGroupInformation.loginUserFromKeytab</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/security/access/AccessChecker.InputUser.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/AccessChecker.InputUser.html b/devapidocs/org/apache/hadoop/hbase/security/access/AccessChecker.InputUser.html
index 0d4e210..2ecf7ba 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/AccessChecker.InputUser.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/AccessChecker.InputUser.html
@@ -247,7 +247,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" t
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.security.<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/security/User.html#addToken-org.apache.hadoop.security.token.Token-">addToken</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#create-org.apache.hadoop.security.UserGroupInformation-">create</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#createUserForTesting-org.apache.hadoop.conf.Configuration-java.lang.String-java.lang.String:A-">createUserForTesting</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#equals-java.lang.Object-">equals</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#getCurrent--">getCurrent</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#getToken-java.lang.String-java.lang.String-">getToken</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#getTokens--">getTokens</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#getUGI--">getUGI</a>,
  <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#hashCode--">hashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#isHBaseSecurityEnabled-org.apache.hadoop.conf.Configuration-">isHBaseSecurityEnabled</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#isSecurityEnabled--">isSecurityEnabled</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#login-org.apache.hadoop.conf.Configuration-java.lang.String-java.lang.String-java.lang.String-">login</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#runAsLoginUser-java.security.PrivilegedExceptionAction-">runAsLoginUser</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/security/User.html#addToken-org.apache.hadoop.security.token.Token-">addToken</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#create-org.apache.hadoop.security.UserGroupInformation-">create</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#createUserForTesting-org.apache.hadoop.conf.Configuration-java.lang.String-java.lang.String:A-">createUserForTesting</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#equals-java.lang.Object-">equals</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#getCurrent--">getCurrent</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#getToken-java.lang.String-java.lang.String-">getToken</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#getTokens--">getTokens</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#getUGI--">getUGI</a>,
  <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#hashCode--">hashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#isHBaseSecurityEnabled-org.apache.hadoop.conf.Configuration-">isHBaseSecurityEnabled</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#isLoginFromKeytab--">isLoginFromKeytab</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#isSecurityEnabled--">isSecurityEnabled</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#login-org.apache.hadoop.conf.Configuration-java.lang.String-java.lang.String-java.lang.String-">login</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#login-java.lang.String-java.lang.String-">login</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.html#runAsLoginUser-java.security.PrivilegedExceptionAction-">runAsLoginUser</a>, <a href="../../../../../../org/apache/hadoop/hbase/security/User.
 html#shouldLoginFromKeytab-org.apache.hadoop.conf.Configuration-">shouldLoginFromKeytab</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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..69f2dc6 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -143,8 +143,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.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/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/5fd895c6/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 0b92a31..66507a0 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/class-use/User.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/class-use/User.html
@@ -182,6 +182,35 @@
 </a>
 <h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> in <a href="../../../../../../org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></h3>
 <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/package-summary.html">org.apache.hadoop.hbase</a> that return <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</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 <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">AuthUtil.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/AuthUtil.html#loginClient-org.apache.hadoop.conf.Configuration-">loginClient</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">For kerberized cluster, return login user (from kinit or from keytab if specified).</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <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">AuthUtil.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/AuthUtil.html#loginClientAsService-org.apache.hadoop.conf.Configuration-">loginClientAsService</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">For kerberized cluster, return login user (from kinit or from keytab).</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <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">AuthUtil.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/AuthUtil.html#loginFromKeytabAndReturnUser-org.apache.hadoop.hbase.security.UserProvider-">loginFromKeytabAndReturnUser</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;provider)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&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/package-summary.html">org.apache.hadoop.hbase</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/security/class-use/UserProvider.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/class-use/UserProvider.html b/devapidocs/org/apache/hadoop/hbase/security/class-use/UserProvider.html
index c422d30..f68af3e 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/class-use/UserProvider.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/class-use/UserProvider.html
@@ -83,70 +83,74 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase">org.apache.hadoop.hbase</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.coprocessor">org.apache.hadoop.hbase.coprocessor</a></td>
 <td class="colLast">
 <div class="block">Table of Contents</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.ipc">org.apache.hadoop.hbase.ipc</a></td>
 <td class="colLast">
 <div class="block">Tools to help define network clients and servers.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.master">org.apache.hadoop.hbase.master</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver">org.apache.hadoop.hbase.regionserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.rest">org.apache.hadoop.hbase.rest</a></td>
 <td class="colLast">
 <div class="block">HBase REST</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.rsgroup">org.apache.hadoop.hbase.rsgroup</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.security">org.apache.hadoop.hbase.security</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <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>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.security.token">org.apache.hadoop.hbase.security.token</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.thrift">org.apache.hadoop.hbase.thrift</a></td>
 <td class="colLast">
 <div class="block">Provides an HBase <a href="http://incubator.apache.org/thrift/">Thrift</a>
 service.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.thrift2">org.apache.hadoop.hbase.thrift2</a></td>
 <td class="colLast">
 <div class="block">Provides an HBase <a href="http://thrift.apache.org/">Thrift</a>
 service.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.tool">org.apache.hadoop.hbase.tool</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -155,6 +159,26 @@ service.</div>
 </li>
 <li class="blockList">
 <ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a> in <a href="../../../../../../org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></h3>
+<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/package-summary.html">org.apache.hadoop.hbase</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</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 static <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">AuthUtil.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/AuthUtil.html#loginFromKeytabAndReturnUser-org.apache.hadoop.hbase.security.UserProvider-">loginFromKeytabAndReturnUser</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;provider)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.coprocessor">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 dfa02b5..29d7634 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/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/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/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/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/security/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-use.html b/devapidocs/org/apache/hadoop/hbase/security/package-use.html
index 0aa2eb5..5fcdd3d 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-use.html
@@ -217,6 +217,11 @@ service.</div>
 <div class="block">Wrapper to abstract out usage of user and group information in HBase.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/security/class-use/UserProvider.html#org.apache.hadoop.hbase">UserProvider</a>
+<div class="block">Provide an instance of a user.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>


[10/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html
index 1ad6fc7..99b6bf2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html
@@ -54,1964 +54,1980 @@
 <span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import org.apache.hadoop.conf.Configuration;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.CallQueueTooBigException;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HConstants;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.ServerName;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.TableNotEnabledException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicy;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicyFactory;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.exceptions.ClientExceptionsUtil;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.exceptions.RegionMovedException;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.ipc.RpcClientFactory;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.security.User;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.ExceptionUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.zookeeper.KeeperException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.slf4j.Logger;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.slf4j.LoggerFactory;<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.com.google.common.base.Throwables;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersRequest;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledRequest;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesRequest;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesRequest;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateRequest;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateResponse;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>/**<a name="line.132"></a>
-<span class="sourceLineNo">133</span> * Main implementation of {@link Connection} and {@link ClusterConnection} interfaces.<a name="line.133"></a>
-<span class="sourceLineNo">134</span> * Encapsulates connection to zookeeper and regionservers.<a name="line.134"></a>
-<span class="sourceLineNo">135</span> */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    value="AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION",<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    justification="Access to the conncurrent hash map is under a lock so should be fine.")<a name="line.138"></a>
-<span class="sourceLineNo">139</span>@InterfaceAudience.Private<a name="line.139"></a>
-<span class="sourceLineNo">140</span>class ConnectionImplementation implements ClusterConnection, Closeable {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  public static final String RETRIES_BY_SERVER_KEY = "hbase.client.retries.by.server";<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private static final Logger LOG = LoggerFactory.getLogger(ConnectionImplementation.class);<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private static final String RESOLVE_HOSTNAME_ON_FAIL_KEY = "hbase.resolve.hostnames.on.failure";<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final boolean hostnamesCanChange;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private final long pause;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private final long pauseForCQTBE;// pause for CallQueueTooBigException, if specified<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private boolean useMetaReplicas;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private final int metaReplicaCallTimeoutScanInMicroSecond;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private final int numTries;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  final int rpcTimeout;<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>   * Global nonceGenerator shared per client.Currently there's no reason to limit its scope.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Once it's set under nonceGeneratorCreateLock, it is never unset or changed.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  private static volatile NonceGenerator nonceGenerator = null;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  /** The nonce generator lock. Only taken when creating Connection, which gets a private copy. */<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  private static final Object nonceGeneratorCreateLock = new Object();<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private final AsyncProcess asyncProcess;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  // single tracker per connection<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  private final ServerStatisticTracker stats;<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  private volatile boolean closed;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  private volatile boolean aborted;<a name="line.167"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.CallQueueTooBigException;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HConstants;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.ServerName;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.TableName;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.TableNotEnabledException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicy;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicyFactory;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.exceptions.ClientExceptionsUtil;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.exceptions.RegionMovedException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.ipc.RpcClientFactory;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.security.User;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.util.ExceptionUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.zookeeper.KeeperException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.slf4j.Logger;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.slf4j.LoggerFactory;<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.common.base.Throwables;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersRequest;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledRequest;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesRequest;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesRequest;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateRequest;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateResponse;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse;<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> * Main implementation of {@link Connection} and {@link ClusterConnection} interfaces.<a name="line.136"></a>
+<span class="sourceLineNo">137</span> * Encapsulates connection to zookeeper and regionservers.<a name="line.137"></a>
+<span class="sourceLineNo">138</span> */<a name="line.138"></a>
+<span class="sourceLineNo">139</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    value="AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION",<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    justification="Access to the conncurrent hash map is under a lock so should be fine.")<a name="line.141"></a>
+<span class="sourceLineNo">142</span>@InterfaceAudience.Private<a name="line.142"></a>
+<span class="sourceLineNo">143</span>class ConnectionImplementation implements ClusterConnection, Closeable {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public static final String RETRIES_BY_SERVER_KEY = "hbase.client.retries.by.server";<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private static final Logger LOG = LoggerFactory.getLogger(ConnectionImplementation.class);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private static final String RESOLVE_HOSTNAME_ON_FAIL_KEY = "hbase.resolve.hostnames.on.failure";<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private final boolean hostnamesCanChange;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private final long pause;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  private final long pauseForCQTBE;// pause for CallQueueTooBigException, if specified<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private boolean useMetaReplicas;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  private final int metaReplicaCallTimeoutScanInMicroSecond;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  private final int numTries;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  final int rpcTimeout;<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>   * Global nonceGenerator shared per client.Currently there's no reason to limit its scope.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * Once it's set under nonceGeneratorCreateLock, it is never unset or changed.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  private static volatile NonceGenerator nonceGenerator = null;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  /** The nonce generator lock. Only taken when creating Connection, which gets a private copy. */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private static final Object nonceGeneratorCreateLock = new Object();<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>  private final AsyncProcess asyncProcess;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  // single tracker per connection<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private final ServerStatisticTracker stats;<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  // package protected for the tests<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  ClusterStatusListener clusterStatusListener;<a name="line.170"></a>
+<span class="sourceLineNo">169</span>  private volatile boolean closed;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  private volatile boolean aborted;<a name="line.170"></a>
 <span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  private final Object metaRegionLock = new Object();<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  private final Object masterLock = new Object();<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  // thread executor shared by all Table instances created<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // by this connection<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  private volatile ExecutorService batchPool = null;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  // meta thread executor shared by all Table instances created<a name="line.179"></a>
+<span class="sourceLineNo">172</span>  // package protected for the tests<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  ClusterStatusListener clusterStatusListener;<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private final Object metaRegionLock = new Object();<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private final Object masterLock = new Object();<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  // thread executor shared by all Table instances created<a name="line.179"></a>
 <span class="sourceLineNo">180</span>  // by this connection<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  private volatile ExecutorService metaLookupPool = null;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  private volatile boolean cleanupPool = false;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  private final Configuration conf;<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  // cache the configuration value for tables so that we can avoid calling<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  // the expensive Configuration to fetch the value multiple times.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  private final ConnectionConfiguration connectionConfig;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  // Client rpc instance.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  private final RpcClient rpcClient;<a name="line.191"></a>
+<span class="sourceLineNo">181</span>  private volatile ExecutorService batchPool = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  // meta thread executor shared by all Table instances created<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  // by this connection<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  private volatile ExecutorService metaLookupPool = null;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private volatile boolean cleanupPool = false;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private final Configuration conf;<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  // cache the configuration value for tables so that we can avoid calling<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  // the expensive Configuration to fetch the value multiple times.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  private final ConnectionConfiguration connectionConfig;<a name="line.191"></a>
 <span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>  private final MetaCache metaCache;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  private final MetricsConnection metrics;<a name="line.194"></a>
+<span class="sourceLineNo">193</span>  // Client rpc instance.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  private final RpcClient rpcClient;<a name="line.194"></a>
 <span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  protected User user;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private final RpcRetryingCallerFactory rpcCallerFactory;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  private final RpcControllerFactory rpcControllerFactory;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private final RetryingCallerInterceptor interceptor;<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>   * Cluster registry of basic info such as clusterid and meta region location.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  private final AsyncRegistry registry;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  private final ClientBackoffPolicy backoffPolicy;<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>   * Allow setting an alternate BufferedMutator implementation via<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * config. If null, use default.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private final String alternateBufferedMutatorClassName;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /** lock guards against multiple threads trying to query the meta region at the same time */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  private final ReentrantLock userRegionLock = new ReentrantLock();<a name="line.218"></a>
+<span class="sourceLineNo">196</span>  private final MetaCache metaCache;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  private final MetricsConnection metrics;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  protected User user;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private final RpcRetryingCallerFactory rpcCallerFactory;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private final RpcControllerFactory rpcControllerFactory;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private final RetryingCallerInterceptor interceptor;<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>   * Cluster registry of basic info such as clusterid and meta region location.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  private final AsyncRegistry registry;<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private final ClientBackoffPolicy backoffPolicy;<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  /**<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * Allow setting an alternate BufferedMutator implementation via<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * config. If null, use default.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  private final String alternateBufferedMutatorClassName;<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>   * constructor<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param conf Configuration object<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   */<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  ConnectionImplementation(Configuration conf,<a name="line.224"></a>
-<span class="sourceLineNo">225</span>                           ExecutorService pool, User user) throws IOException {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    this.conf = conf;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    this.user = user;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    this.batchPool = pool;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    this.connectionConfig = new ConnectionConfiguration(conf);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    this.closed = false;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    this.pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    long configuredPauseForCQTBE = conf.getLong(HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE, pause);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    if (configuredPauseForCQTBE &lt; pause) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      LOG.warn("The " + HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE + " setting: "<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          + configuredPauseForCQTBE + " is smaller than " + HConstants.HBASE_CLIENT_PAUSE<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          + ", will use " + pause + " instead.");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      this.pauseForCQTBE = pause;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    } else {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      this.pauseForCQTBE = configuredPauseForCQTBE;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    this.useMetaReplicas = conf.getBoolean(HConstants.USE_META_REPLICAS,<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      HConstants.DEFAULT_USE_META_REPLICAS);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.metaReplicaCallTimeoutScanInMicroSecond =<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        connectionConfig.getMetaReplicaCallTimeoutMicroSecondScan();<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // how many times to try, one more than max *retry* time<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    this.numTries = retries2Attempts(connectionConfig.getRetriesNumber());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    this.rpcTimeout = conf.getInt(<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    if (conf.getBoolean(NonceGenerator.CLIENT_NONCES_ENABLED_KEY, true)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      synchronized (nonceGeneratorCreateLock) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        if (nonceGenerator == null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          nonceGenerator = PerClientRandomNonceGenerator.get();<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>    } else {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      nonceGenerator = NO_NONCE_GENERATOR;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span><a name="line.261"></a>
-<span class="sourceLineNo">262</span>    this.stats = ServerStatisticTracker.create(conf);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    this.interceptor = (new RetryingCallerInterceptorFactory(conf)).build();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    this.rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf, interceptor, this.stats);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    this.backoffPolicy = ClientBackoffPolicyFactory.create(conf);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    this.asyncProcess = new AsyncProcess(this, conf, rpcCallerFactory, rpcControllerFactory);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    if (conf.getBoolean(CLIENT_SIDE_METRICS_ENABLED_KEY, false)) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      this.metrics = new MetricsConnection(this);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    } else {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.metrics = null;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    this.metaCache = new MetaCache(this.metrics);<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean shouldListen = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    this.hostnamesCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Class&lt;? extends ClusterStatusListener.Listener&gt; listenerClass =<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        conf.getClass(ClusterStatusListener.STATUS_LISTENER_CLASS,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>            ClusterStatusListener.DEFAULT_STATUS_LISTENER_CLASS,<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            ClusterStatusListener.Listener.class);<a name="line.281"></a>
+<span class="sourceLineNo">220</span>  /** lock guards against multiple threads trying to query the meta region at the same time */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  private final ReentrantLock userRegionLock = new ReentrantLock();<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  private ChoreService authService;<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>   * constructor<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param conf Configuration object<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  ConnectionImplementation(Configuration conf,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>                           ExecutorService pool, User user) throws IOException {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    this.conf = conf;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    this.user = user;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    if (user != null &amp;&amp; user.isLoginFromKeytab()) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      spawnRenewalChore(user.getUGI());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    this.batchPool = pool;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    this.connectionConfig = new ConnectionConfiguration(conf);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this.closed = false;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    this.pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    long configuredPauseForCQTBE = conf.getLong(HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE, pause);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    if (configuredPauseForCQTBE &lt; pause) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      LOG.warn("The " + HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE + " setting: "<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          + configuredPauseForCQTBE + " is smaller than " + HConstants.HBASE_CLIENT_PAUSE<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          + ", will use " + pause + " instead.");<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      this.pauseForCQTBE = pause;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    } else {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      this.pauseForCQTBE = configuredPauseForCQTBE;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    this.useMetaReplicas = conf.getBoolean(HConstants.USE_META_REPLICAS,<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      HConstants.DEFAULT_USE_META_REPLICAS);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    this.metaReplicaCallTimeoutScanInMicroSecond =<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        connectionConfig.getMetaReplicaCallTimeoutMicroSecondScan();<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span>    // how many times to try, one more than max *retry* time<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    this.numTries = retries2Attempts(connectionConfig.getRetriesNumber());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    this.rpcTimeout = conf.getInt(<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    if (conf.getBoolean(NonceGenerator.CLIENT_NONCES_ENABLED_KEY, true)) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      synchronized (nonceGeneratorCreateLock) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        if (nonceGenerator == null) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          nonceGenerator = PerClientRandomNonceGenerator.get();<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>    } else {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      nonceGenerator = NO_NONCE_GENERATOR;<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>    this.stats = ServerStatisticTracker.create(conf);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    this.interceptor = (new RetryingCallerInterceptorFactory(conf)).build();<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    this.rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf, interceptor, this.stats);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    this.backoffPolicy = ClientBackoffPolicyFactory.create(conf);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    this.asyncProcess = new AsyncProcess(this, conf, rpcCallerFactory, rpcControllerFactory);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    if (conf.getBoolean(CLIENT_SIDE_METRICS_ENABLED_KEY, false)) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      this.metrics = new MetricsConnection(this);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.metrics = null;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    this.metaCache = new MetaCache(this.metrics);<a name="line.281"></a>
 <span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>    // Is there an alternate BufferedMutator to use?<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    this.alternateBufferedMutatorClassName =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        this.conf.get(BufferedMutator.CLASSNAME_KEY);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>    try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      this.registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      retrieveClusterId();<a name="line.289"></a>
+<span class="sourceLineNo">283</span>    boolean shouldListen = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    this.hostnamesCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    Class&lt;? extends ClusterStatusListener.Listener&gt; listenerClass =<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        conf.getClass(ClusterStatusListener.STATUS_LISTENER_CLASS,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            ClusterStatusListener.DEFAULT_STATUS_LISTENER_CLASS,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            ClusterStatusListener.Listener.class);<a name="line.289"></a>
 <span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>      this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId, this.metrics);<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>      // Do we publish the status?<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      if (shouldListen) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        if (listenerClass == null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.296"></a>
-<span class="sourceLineNo">297</span>              ClusterStatusListener.STATUS_LISTENER_CLASS + " is not set - not listening status");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        } else {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          clusterStatusListener = new ClusterStatusListener(<a name="line.299"></a>
-<span class="sourceLineNo">300</span>              new ClusterStatusListener.DeadServerHandler() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>                @Override<a name="line.301"></a>
-<span class="sourceLineNo">302</span>                public void newDead(ServerName sn) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>                  clearCaches(sn);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>                  rpcClient.cancelConnections(sn);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>                }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>              }, conf, listenerClass);<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>    } catch (Throwable e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // avoid leaks: registry, rpcClient, ...<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      LOG.debug("connection construction failed", e);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      close();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      throw e;<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>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * @param useMetaReplicas<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  @VisibleForTesting<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  void setUseMetaReplicas(final boolean useMetaReplicas) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    this.useMetaReplicas = useMetaReplicas;<a name="line.322"></a>
+<span class="sourceLineNo">291</span>    // Is there an alternate BufferedMutator to use?<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    this.alternateBufferedMutatorClassName =<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        this.conf.get(BufferedMutator.CLASSNAME_KEY);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      this.registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      retrieveClusterId();<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>      this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId, this.metrics);<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>      // Do we publish the status?<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      if (shouldListen) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        if (listenerClass == null) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>          LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.304"></a>
+<span class="sourceLineNo">305</span>              ClusterStatusListener.STATUS_LISTENER_CLASS + " is not set - not listening status");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        } else {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          clusterStatusListener = new ClusterStatusListener(<a name="line.307"></a>
+<span class="sourceLineNo">308</span>              new ClusterStatusListener.DeadServerHandler() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>                @Override<a name="line.309"></a>
+<span class="sourceLineNo">310</span>                public void newDead(ServerName sn) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>                  clearCaches(sn);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>                  rpcClient.cancelConnections(sn);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>                }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>              }, conf, listenerClass);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } catch (Throwable e) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      // avoid leaks: registry, rpcClient, ...<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      LOG.debug("connection construction failed", e);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      close();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw e;<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>   * @param conn The connection for which to replace the generator.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @param cnm Replaces the nonce generator used, for testing.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @return old nonce generator.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   */<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  @VisibleForTesting<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  static NonceGenerator injectNonceGeneratorForTesting(<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      ClusterConnection conn, NonceGenerator cnm) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    ConnectionImplementation connImpl = (ConnectionImplementation)conn;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    NonceGenerator ng = connImpl.getNonceGenerator();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    LOG.warn("Nonce generator is being replaced by test code for "<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      + cnm.getClass().getName());<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    nonceGenerator = cnm;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return ng;<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>  @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public Table getTable(TableName tableName) throws IOException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    return getTable(tableName, getBatchPool());<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>  @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public TableBuilder getTableBuilder(TableName tableName, ExecutorService pool) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return new TableBuilderBase(tableName, connectionConfig) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>      @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      public Table build() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        return new HTable(ConnectionImplementation.this, this, rpcCallerFactory,<a name="line.352"></a>
-<span class="sourceLineNo">353</span>            rpcControllerFactory, pool);<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>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  @Override<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  public BufferedMutator getBufferedMutator(BufferedMutatorParams params) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (params.getTableName() == null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      throw new IllegalArgumentException("TableName cannot be null.");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (params.getPool() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      params.pool(HTable.getDefaultExecutor(getConfiguration()));<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    if (params.getWriteBufferSize() == BufferedMutatorParams.UNSET) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      params.writeBufferSize(connectionConfig.getWriteBufferSize());<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    if (params.getWriteBufferPeriodicFlushTimeoutMs() == BufferedMutatorParams.UNSET) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      params.setWriteBufferPeriodicFlushTimeoutMs(<a name="line.370"></a>
-<span class="sourceLineNo">371</span>              connectionConfig.getWriteBufferPeriodicFlushTimeoutMs());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    if (params.getWriteBufferPeriodicFlushTimerTickMs() == BufferedMutatorParams.UNSET) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      params.setWriteBufferPeriodicFlushTimerTickMs(<a name="line.374"></a>
-<span class="sourceLineNo">375</span>              connectionConfig.getWriteBufferPeriodicFlushTimerTickMs());<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (params.getMaxKeyValueSize() == BufferedMutatorParams.UNSET) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      params.maxKeyValueSize(connectionConfig.getMaxKeyValueSize());<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    // Look to see if an alternate BufferedMutation implementation is wanted.<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    // Look in params and in config. If null, use default.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    String implementationClassName = params.getImplementationClassName();<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (implementationClassName == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      implementationClassName = this.alternateBufferedMutatorClassName;<a name="line.384"></a>
+<span class="sourceLineNo">325</span>  private void spawnRenewalChore(final UserGroupInformation user) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    authService = new ChoreService("Relogin service");<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    authService.scheduleChore(AuthUtil.getAuthRenewalChore(user));<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>   * @param useMetaReplicas<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  @VisibleForTesting<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  void setUseMetaReplicas(final boolean useMetaReplicas) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    this.useMetaReplicas = useMetaReplicas;<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>   * @param conn The connection for which to replace the generator.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * @param cnm Replaces the nonce generator used, for testing.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * @return old nonce generator.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  @VisibleForTesting<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  static NonceGenerator injectNonceGeneratorForTesting(<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      ClusterConnection conn, NonceGenerator cnm) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    ConnectionImplementation connImpl = (ConnectionImplementation)conn;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    NonceGenerator ng = connImpl.getNonceGenerator();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    LOG.warn("Nonce generator is being replaced by test code for "<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      + cnm.getClass().getName());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    nonceGenerator = cnm;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return ng;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  @Override<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  public Table getTable(TableName tableName) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return getTable(tableName, getBatchPool());<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>  @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  public TableBuilder getTableBuilder(TableName tableName, ExecutorService pool) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    return new TableBuilderBase(tableName, connectionConfig) {<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 Table build() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        return new HTable(ConnectionImplementation.this, this, rpcCallerFactory,<a name="line.365"></a>
+<span class="sourceLineNo">366</span>            rpcControllerFactory, pool);<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>  }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>  @Override<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  public BufferedMutator getBufferedMutator(BufferedMutatorParams params) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    if (params.getTableName() == null) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      throw new IllegalArgumentException("TableName cannot be null.");<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    if (params.getPool() == null) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      params.pool(HTable.getDefaultExecutor(getConfiguration()));<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    if (params.getWriteBufferSize() == BufferedMutatorParams.UNSET) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      params.writeBufferSize(connectionConfig.getWriteBufferSize());<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (params.getWriteBufferPeriodicFlushTimeoutMs() == BufferedMutatorParams.UNSET) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      params.setWriteBufferPeriodicFlushTimeoutMs(<a name="line.383"></a>
+<span class="sourceLineNo">384</span>              connectionConfig.getWriteBufferPeriodicFlushTimeoutMs());<a name="line.384"></a>
 <span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    if (implementationClassName == null) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return new BufferedMutatorImpl(this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    try {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      return (BufferedMutator)ReflectionUtils.newInstance(Class.forName(implementationClassName),<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    } catch (ClassNotFoundException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      throw new RuntimeException(e);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public BufferedMutator getBufferedMutator(TableName tableName) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    return getBufferedMutator(new BufferedMutatorParams(tableName));<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>  @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public RegionLocator getRegionLocator(TableName tableName) throws IOException {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    return new HRegionLocator(tableName, this);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>  @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public Admin getAdmin() throws IOException {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return new HBaseAdmin(this);<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 MetricsConnection getConnectionMetrics() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    return this.metrics;<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>  private ExecutorService getBatchPool() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    if (batchPool == null) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      synchronized (this) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        if (batchPool == null) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          int threads = conf.getInt("hbase.hconnection.threads.max", 256);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          this.batchPool = getThreadPool(threads, threads, "-shared", null);<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          this.cleanupPool = true;<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>    return this.batchPool;<a name="line.427"></a>
+<span class="sourceLineNo">386</span>    if (params.getWriteBufferPeriodicFlushTimerTickMs() == BufferedMutatorParams.UNSET) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      params.setWriteBufferPeriodicFlushTimerTickMs(<a name="line.387"></a>
+<span class="sourceLineNo">388</span>              connectionConfig.getWriteBufferPeriodicFlushTimerTickMs());<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    if (params.getMaxKeyValueSize() == BufferedMutatorParams.UNSET) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      params.maxKeyValueSize(connectionConfig.getMaxKeyValueSize());<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    // Look to see if an alternate BufferedMutation implementation is wanted.<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    // Look in params and in config. If null, use default.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    String implementationClassName = params.getImplementationClassName();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    if (implementationClassName == null) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      implementationClassName = this.alternateBufferedMutatorClassName;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    if (implementationClassName == null) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return new BufferedMutatorImpl(this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    try {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      return (BufferedMutator)ReflectionUtils.newInstance(Class.forName(implementationClassName),<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    } catch (ClassNotFoundException e) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      throw new RuntimeException(e);<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>  @Override<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  public BufferedMutator getBufferedMutator(TableName tableName) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    return getBufferedMutator(new BufferedMutatorParams(tableName));<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>  @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  public RegionLocator getRegionLocator(TableName tableName) throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    return new HRegionLocator(tableName, this);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>  @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public Admin getAdmin() throws IOException {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    return new HBaseAdmin(this);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>  @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>  public MetricsConnection getConnectionMetrics() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    return this.metrics;<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>  private ExecutorService getThreadPool(int maxThreads, int coreThreads, String nameHint,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      BlockingQueue&lt;Runnable&gt; passedWorkQueue) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    // shared HTable thread executor not yet initialized<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    if (maxThreads == 0) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      maxThreads = Runtime.getRuntime().availableProcessors() * 8;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    if (coreThreads == 0) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      coreThreads = Runtime.getRuntime().availableProcessors() * 8;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    long keepAliveTime = conf.getLong("hbase.hconnection.threads.keepalivetime", 60);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    BlockingQueue&lt;Runnable&gt; workQueue = passedWorkQueue;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    if (workQueue == null) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      workQueue =<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        new LinkedBlockingQueue&lt;&gt;(maxThreads *<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            conf.getInt(HConstants.HBASE_CLIENT_MAX_TOTAL_TASKS,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>                HConstants.DEFAULT_HBASE_CLIENT_MAX_TOTAL_TASKS));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      coreThreads = maxThreads;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    ThreadPoolExecutor tpe = new ThreadPoolExecutor(<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        coreThreads,<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        maxThreads,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        keepAliveTime,<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        TimeUnit.SECONDS,<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        workQueue,<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        Threads.newDaemonThreadFactory(toString() + nameHint));<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    tpe.allowCoreThreadTimeOut(true);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    return tpe;<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>  private ExecutorService getMetaLookupPool() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    if (this.metaLookupPool == null) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      synchronized (this) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        if (this.metaLookupPool == null) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          //Some of the threads would be used for meta replicas<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          //To start with, threads.max.core threads can hit the meta (including replicas).<a name="line.464"></a>
-<span class="sourceLineNo">465</span>          //After that, requests will get queued up in the passed queue, and only after<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          //the queue is full, a new thread will be started<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          int threads = conf.getInt("hbase.hconnection.meta.lookup.threads.max", 128);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>          this.metaLookupPool = getThreadPool(<a name="line.468"></a>
-<span class="sourceLineNo">469</span>             threads,<a name="line.469"></a>
-<span class="sourceLineNo">470</span>             threads,<a name="line.470"></a>
-<span class="sourceLineNo">471</span>             "-metaLookup-shared-", new LinkedBlockingQueue&lt;&gt;());<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    return this.metaLookupPool;<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>  protected ExecutorService getCurrentMetaLookupPool() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    return metaLookupPool;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>  protected ExecutorService getCurrentBatchPool() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    return batchPool;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  private void shutdownPools() {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    if (this.cleanupPool &amp;&amp; this.batchPool != null &amp;&amp; !this.batchPool.isShutdown()) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      shutdownBatchPool(this.batchPool);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (this.metaLookupPool != null &amp;&amp; !this.metaLookupPool.isShutdown()) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      shutdownBatchPool(this.metaLookupPool);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
+<span class="sourceLineNo">430</span>  private ExecutorService getBatchPool() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    if (batchPool == null) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      synchronized (this) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        if (batchPool == null) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          int threads = conf.getInt("hbase.hconnection.threads.max", 256);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          this.batchPool = getThreadPool(threads, threads, "-shared", null);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          this.cleanupPool = true;<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>    return this.batchPool;<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>  private ExecutorService getThreadPool(int maxThreads, int coreThreads, String nameHint,<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      BlockingQueue&lt;Runnable&gt; passedWorkQueue) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    // shared HTable thread executor not yet initialized<a name="line.445"></a>
+<span class="sourceLineNo">446

<TRUNCATED>

[07/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html
index 1ad6fc7..99b6bf2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html
@@ -54,1964 +54,1980 @@
 <span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import org.apache.hadoop.conf.Configuration;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.CallQueueTooBigException;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HConstants;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.ServerName;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.TableNotEnabledException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicy;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicyFactory;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.exceptions.ClientExceptionsUtil;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.exceptions.RegionMovedException;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.ipc.RpcClientFactory;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.security.User;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.ExceptionUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.zookeeper.KeeperException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.slf4j.Logger;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.slf4j.LoggerFactory;<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.com.google.common.base.Throwables;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersRequest;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledRequest;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesRequest;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesRequest;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateRequest;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateResponse;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>/**<a name="line.132"></a>
-<span class="sourceLineNo">133</span> * Main implementation of {@link Connection} and {@link ClusterConnection} interfaces.<a name="line.133"></a>
-<span class="sourceLineNo">134</span> * Encapsulates connection to zookeeper and regionservers.<a name="line.134"></a>
-<span class="sourceLineNo">135</span> */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    value="AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION",<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    justification="Access to the conncurrent hash map is under a lock so should be fine.")<a name="line.138"></a>
-<span class="sourceLineNo">139</span>@InterfaceAudience.Private<a name="line.139"></a>
-<span class="sourceLineNo">140</span>class ConnectionImplementation implements ClusterConnection, Closeable {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  public static final String RETRIES_BY_SERVER_KEY = "hbase.client.retries.by.server";<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private static final Logger LOG = LoggerFactory.getLogger(ConnectionImplementation.class);<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private static final String RESOLVE_HOSTNAME_ON_FAIL_KEY = "hbase.resolve.hostnames.on.failure";<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final boolean hostnamesCanChange;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private final long pause;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private final long pauseForCQTBE;// pause for CallQueueTooBigException, if specified<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private boolean useMetaReplicas;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private final int metaReplicaCallTimeoutScanInMicroSecond;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private final int numTries;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  final int rpcTimeout;<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>   * Global nonceGenerator shared per client.Currently there's no reason to limit its scope.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Once it's set under nonceGeneratorCreateLock, it is never unset or changed.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  private static volatile NonceGenerator nonceGenerator = null;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  /** The nonce generator lock. Only taken when creating Connection, which gets a private copy. */<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  private static final Object nonceGeneratorCreateLock = new Object();<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private final AsyncProcess asyncProcess;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  // single tracker per connection<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  private final ServerStatisticTracker stats;<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  private volatile boolean closed;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  private volatile boolean aborted;<a name="line.167"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.CallQueueTooBigException;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HConstants;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.ServerName;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.TableName;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.TableNotEnabledException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicy;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.backoff.ClientBackoffPolicyFactory;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.exceptions.ClientExceptionsUtil;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.exceptions.RegionMovedException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ipc.RpcClient;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.ipc.RpcClientFactory;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.ipc.RpcControllerFactory;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.security.User;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.util.ExceptionUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.zookeeper.KeeperException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.slf4j.Logger;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.slf4j.LoggerFactory;<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.common.base.Throwables;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersRequest;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledRequest;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesRequest;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesRequest;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateRequest;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.TransitReplicationPeerSyncReplicationStateResponse;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse;<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> * Main implementation of {@link Connection} and {@link ClusterConnection} interfaces.<a name="line.136"></a>
+<span class="sourceLineNo">137</span> * Encapsulates connection to zookeeper and regionservers.<a name="line.137"></a>
+<span class="sourceLineNo">138</span> */<a name="line.138"></a>
+<span class="sourceLineNo">139</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    value="AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION",<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    justification="Access to the conncurrent hash map is under a lock so should be fine.")<a name="line.141"></a>
+<span class="sourceLineNo">142</span>@InterfaceAudience.Private<a name="line.142"></a>
+<span class="sourceLineNo">143</span>class ConnectionImplementation implements ClusterConnection, Closeable {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public static final String RETRIES_BY_SERVER_KEY = "hbase.client.retries.by.server";<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private static final Logger LOG = LoggerFactory.getLogger(ConnectionImplementation.class);<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private static final String RESOLVE_HOSTNAME_ON_FAIL_KEY = "hbase.resolve.hostnames.on.failure";<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private final boolean hostnamesCanChange;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private final long pause;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  private final long pauseForCQTBE;// pause for CallQueueTooBigException, if specified<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private boolean useMetaReplicas;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  private final int metaReplicaCallTimeoutScanInMicroSecond;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  private final int numTries;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  final int rpcTimeout;<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>   * Global nonceGenerator shared per client.Currently there's no reason to limit its scope.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * Once it's set under nonceGeneratorCreateLock, it is never unset or changed.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  private static volatile NonceGenerator nonceGenerator = null;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  /** The nonce generator lock. Only taken when creating Connection, which gets a private copy. */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private static final Object nonceGeneratorCreateLock = new Object();<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>  private final AsyncProcess asyncProcess;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  // single tracker per connection<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private final ServerStatisticTracker stats;<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  // package protected for the tests<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  ClusterStatusListener clusterStatusListener;<a name="line.170"></a>
+<span class="sourceLineNo">169</span>  private volatile boolean closed;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  private volatile boolean aborted;<a name="line.170"></a>
 <span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  private final Object metaRegionLock = new Object();<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  private final Object masterLock = new Object();<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  // thread executor shared by all Table instances created<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // by this connection<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  private volatile ExecutorService batchPool = null;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  // meta thread executor shared by all Table instances created<a name="line.179"></a>
+<span class="sourceLineNo">172</span>  // package protected for the tests<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  ClusterStatusListener clusterStatusListener;<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private final Object metaRegionLock = new Object();<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private final Object masterLock = new Object();<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  // thread executor shared by all Table instances created<a name="line.179"></a>
 <span class="sourceLineNo">180</span>  // by this connection<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  private volatile ExecutorService metaLookupPool = null;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  private volatile boolean cleanupPool = false;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  private final Configuration conf;<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  // cache the configuration value for tables so that we can avoid calling<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  // the expensive Configuration to fetch the value multiple times.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  private final ConnectionConfiguration connectionConfig;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  // Client rpc instance.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  private final RpcClient rpcClient;<a name="line.191"></a>
+<span class="sourceLineNo">181</span>  private volatile ExecutorService batchPool = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  // meta thread executor shared by all Table instances created<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  // by this connection<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  private volatile ExecutorService metaLookupPool = null;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private volatile boolean cleanupPool = false;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private final Configuration conf;<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  // cache the configuration value for tables so that we can avoid calling<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  // the expensive Configuration to fetch the value multiple times.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  private final ConnectionConfiguration connectionConfig;<a name="line.191"></a>
 <span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>  private final MetaCache metaCache;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  private final MetricsConnection metrics;<a name="line.194"></a>
+<span class="sourceLineNo">193</span>  // Client rpc instance.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  private final RpcClient rpcClient;<a name="line.194"></a>
 <span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  protected User user;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private final RpcRetryingCallerFactory rpcCallerFactory;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  private final RpcControllerFactory rpcControllerFactory;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private final RetryingCallerInterceptor interceptor;<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>   * Cluster registry of basic info such as clusterid and meta region location.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  private final AsyncRegistry registry;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  private final ClientBackoffPolicy backoffPolicy;<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>   * Allow setting an alternate BufferedMutator implementation via<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * config. If null, use default.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private final String alternateBufferedMutatorClassName;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  /** lock guards against multiple threads trying to query the meta region at the same time */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  private final ReentrantLock userRegionLock = new ReentrantLock();<a name="line.218"></a>
+<span class="sourceLineNo">196</span>  private final MetaCache metaCache;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  private final MetricsConnection metrics;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  protected User user;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private final RpcRetryingCallerFactory rpcCallerFactory;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private final RpcControllerFactory rpcControllerFactory;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  private final RetryingCallerInterceptor interceptor;<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>   * Cluster registry of basic info such as clusterid and meta region location.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  private final AsyncRegistry registry;<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private final ClientBackoffPolicy backoffPolicy;<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  /**<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * Allow setting an alternate BufferedMutator implementation via<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * config. If null, use default.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  private final String alternateBufferedMutatorClassName;<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>   * constructor<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param conf Configuration object<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   */<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  ConnectionImplementation(Configuration conf,<a name="line.224"></a>
-<span class="sourceLineNo">225</span>                           ExecutorService pool, User user) throws IOException {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    this.conf = conf;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    this.user = user;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    this.batchPool = pool;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    this.connectionConfig = new ConnectionConfiguration(conf);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    this.closed = false;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    this.pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    long configuredPauseForCQTBE = conf.getLong(HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE, pause);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    if (configuredPauseForCQTBE &lt; pause) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      LOG.warn("The " + HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE + " setting: "<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          + configuredPauseForCQTBE + " is smaller than " + HConstants.HBASE_CLIENT_PAUSE<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          + ", will use " + pause + " instead.");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      this.pauseForCQTBE = pause;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    } else {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      this.pauseForCQTBE = configuredPauseForCQTBE;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    this.useMetaReplicas = conf.getBoolean(HConstants.USE_META_REPLICAS,<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      HConstants.DEFAULT_USE_META_REPLICAS);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.metaReplicaCallTimeoutScanInMicroSecond =<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        connectionConfig.getMetaReplicaCallTimeoutMicroSecondScan();<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // how many times to try, one more than max *retry* time<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    this.numTries = retries2Attempts(connectionConfig.getRetriesNumber());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    this.rpcTimeout = conf.getInt(<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    if (conf.getBoolean(NonceGenerator.CLIENT_NONCES_ENABLED_KEY, true)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      synchronized (nonceGeneratorCreateLock) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        if (nonceGenerator == null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          nonceGenerator = PerClientRandomNonceGenerator.get();<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>    } else {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      nonceGenerator = NO_NONCE_GENERATOR;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span><a name="line.261"></a>
-<span class="sourceLineNo">262</span>    this.stats = ServerStatisticTracker.create(conf);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    this.interceptor = (new RetryingCallerInterceptorFactory(conf)).build();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    this.rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf, interceptor, this.stats);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    this.backoffPolicy = ClientBackoffPolicyFactory.create(conf);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    this.asyncProcess = new AsyncProcess(this, conf, rpcCallerFactory, rpcControllerFactory);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    if (conf.getBoolean(CLIENT_SIDE_METRICS_ENABLED_KEY, false)) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      this.metrics = new MetricsConnection(this);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    } else {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.metrics = null;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    this.metaCache = new MetaCache(this.metrics);<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean shouldListen = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    this.hostnamesCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Class&lt;? extends ClusterStatusListener.Listener&gt; listenerClass =<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        conf.getClass(ClusterStatusListener.STATUS_LISTENER_CLASS,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>            ClusterStatusListener.DEFAULT_STATUS_LISTENER_CLASS,<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            ClusterStatusListener.Listener.class);<a name="line.281"></a>
+<span class="sourceLineNo">220</span>  /** lock guards against multiple threads trying to query the meta region at the same time */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  private final ReentrantLock userRegionLock = new ReentrantLock();<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  private ChoreService authService;<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>   * constructor<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param conf Configuration object<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  ConnectionImplementation(Configuration conf,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>                           ExecutorService pool, User user) throws IOException {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    this.conf = conf;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    this.user = user;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    if (user != null &amp;&amp; user.isLoginFromKeytab()) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      spawnRenewalChore(user.getUGI());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    this.batchPool = pool;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    this.connectionConfig = new ConnectionConfiguration(conf);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this.closed = false;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    this.pause = conf.getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    long configuredPauseForCQTBE = conf.getLong(HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE, pause);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    if (configuredPauseForCQTBE &lt; pause) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      LOG.warn("The " + HConstants.HBASE_CLIENT_PAUSE_FOR_CQTBE + " setting: "<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          + configuredPauseForCQTBE + " is smaller than " + HConstants.HBASE_CLIENT_PAUSE<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          + ", will use " + pause + " instead.");<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      this.pauseForCQTBE = pause;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    } else {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      this.pauseForCQTBE = configuredPauseForCQTBE;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    this.useMetaReplicas = conf.getBoolean(HConstants.USE_META_REPLICAS,<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      HConstants.DEFAULT_USE_META_REPLICAS);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    this.metaReplicaCallTimeoutScanInMicroSecond =<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        connectionConfig.getMetaReplicaCallTimeoutMicroSecondScan();<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span>    // how many times to try, one more than max *retry* time<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    this.numTries = retries2Attempts(connectionConfig.getRetriesNumber());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    this.rpcTimeout = conf.getInt(<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    if (conf.getBoolean(NonceGenerator.CLIENT_NONCES_ENABLED_KEY, true)) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      synchronized (nonceGeneratorCreateLock) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        if (nonceGenerator == null) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          nonceGenerator = PerClientRandomNonceGenerator.get();<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>    } else {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      nonceGenerator = NO_NONCE_GENERATOR;<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>    this.stats = ServerStatisticTracker.create(conf);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    this.interceptor = (new RetryingCallerInterceptorFactory(conf)).build();<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    this.rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    this.rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf, interceptor, this.stats);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    this.backoffPolicy = ClientBackoffPolicyFactory.create(conf);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    this.asyncProcess = new AsyncProcess(this, conf, rpcCallerFactory, rpcControllerFactory);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    if (conf.getBoolean(CLIENT_SIDE_METRICS_ENABLED_KEY, false)) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      this.metrics = new MetricsConnection(this);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.metrics = null;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    this.metaCache = new MetaCache(this.metrics);<a name="line.281"></a>
 <span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>    // Is there an alternate BufferedMutator to use?<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    this.alternateBufferedMutatorClassName =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        this.conf.get(BufferedMutator.CLASSNAME_KEY);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>    try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      this.registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      retrieveClusterId();<a name="line.289"></a>
+<span class="sourceLineNo">283</span>    boolean shouldListen = conf.getBoolean(HConstants.STATUS_PUBLISHED,<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        HConstants.STATUS_PUBLISHED_DEFAULT);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    this.hostnamesCanChange = conf.getBoolean(RESOLVE_HOSTNAME_ON_FAIL_KEY, true);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    Class&lt;? extends ClusterStatusListener.Listener&gt; listenerClass =<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        conf.getClass(ClusterStatusListener.STATUS_LISTENER_CLASS,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            ClusterStatusListener.DEFAULT_STATUS_LISTENER_CLASS,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            ClusterStatusListener.Listener.class);<a name="line.289"></a>
 <span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>      this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId, this.metrics);<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>      // Do we publish the status?<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      if (shouldListen) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        if (listenerClass == null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.296"></a>
-<span class="sourceLineNo">297</span>              ClusterStatusListener.STATUS_LISTENER_CLASS + " is not set - not listening status");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        } else {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          clusterStatusListener = new ClusterStatusListener(<a name="line.299"></a>
-<span class="sourceLineNo">300</span>              new ClusterStatusListener.DeadServerHandler() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>                @Override<a name="line.301"></a>
-<span class="sourceLineNo">302</span>                public void newDead(ServerName sn) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>                  clearCaches(sn);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>                  rpcClient.cancelConnections(sn);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>                }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>              }, conf, listenerClass);<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>    } catch (Throwable e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // avoid leaks: registry, rpcClient, ...<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      LOG.debug("connection construction failed", e);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      close();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      throw e;<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>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * @param useMetaReplicas<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  @VisibleForTesting<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  void setUseMetaReplicas(final boolean useMetaReplicas) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    this.useMetaReplicas = useMetaReplicas;<a name="line.322"></a>
+<span class="sourceLineNo">291</span>    // Is there an alternate BufferedMutator to use?<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    this.alternateBufferedMutatorClassName =<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        this.conf.get(BufferedMutator.CLASSNAME_KEY);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      this.registry = AsyncRegistryFactory.getRegistry(conf);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      retrieveClusterId();<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>      this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId, this.metrics);<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>      // Do we publish the status?<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      if (shouldListen) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        if (listenerClass == null) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>          LOG.warn(HConstants.STATUS_PUBLISHED + " is true, but " +<a name="line.304"></a>
+<span class="sourceLineNo">305</span>              ClusterStatusListener.STATUS_LISTENER_CLASS + " is not set - not listening status");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        } else {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          clusterStatusListener = new ClusterStatusListener(<a name="line.307"></a>
+<span class="sourceLineNo">308</span>              new ClusterStatusListener.DeadServerHandler() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>                @Override<a name="line.309"></a>
+<span class="sourceLineNo">310</span>                public void newDead(ServerName sn) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>                  clearCaches(sn);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>                  rpcClient.cancelConnections(sn);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>                }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>              }, conf, listenerClass);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } catch (Throwable e) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      // avoid leaks: registry, rpcClient, ...<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      LOG.debug("connection construction failed", e);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      close();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw e;<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>   * @param conn The connection for which to replace the generator.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @param cnm Replaces the nonce generator used, for testing.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @return old nonce generator.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   */<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  @VisibleForTesting<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  static NonceGenerator injectNonceGeneratorForTesting(<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      ClusterConnection conn, NonceGenerator cnm) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    ConnectionImplementation connImpl = (ConnectionImplementation)conn;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    NonceGenerator ng = connImpl.getNonceGenerator();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    LOG.warn("Nonce generator is being replaced by test code for "<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      + cnm.getClass().getName());<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    nonceGenerator = cnm;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return ng;<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>  @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public Table getTable(TableName tableName) throws IOException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    return getTable(tableName, getBatchPool());<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>  @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public TableBuilder getTableBuilder(TableName tableName, ExecutorService pool) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return new TableBuilderBase(tableName, connectionConfig) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>      @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      public Table build() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        return new HTable(ConnectionImplementation.this, this, rpcCallerFactory,<a name="line.352"></a>
-<span class="sourceLineNo">353</span>            rpcControllerFactory, pool);<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>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  @Override<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  public BufferedMutator getBufferedMutator(BufferedMutatorParams params) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (params.getTableName() == null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      throw new IllegalArgumentException("TableName cannot be null.");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (params.getPool() == null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      params.pool(HTable.getDefaultExecutor(getConfiguration()));<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    if (params.getWriteBufferSize() == BufferedMutatorParams.UNSET) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      params.writeBufferSize(connectionConfig.getWriteBufferSize());<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    if (params.getWriteBufferPeriodicFlushTimeoutMs() == BufferedMutatorParams.UNSET) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      params.setWriteBufferPeriodicFlushTimeoutMs(<a name="line.370"></a>
-<span class="sourceLineNo">371</span>              connectionConfig.getWriteBufferPeriodicFlushTimeoutMs());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    if (params.getWriteBufferPeriodicFlushTimerTickMs() == BufferedMutatorParams.UNSET) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      params.setWriteBufferPeriodicFlushTimerTickMs(<a name="line.374"></a>
-<span class="sourceLineNo">375</span>              connectionConfig.getWriteBufferPeriodicFlushTimerTickMs());<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (params.getMaxKeyValueSize() == BufferedMutatorParams.UNSET) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      params.maxKeyValueSize(connectionConfig.getMaxKeyValueSize());<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    // Look to see if an alternate BufferedMutation implementation is wanted.<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    // Look in params and in config. If null, use default.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    String implementationClassName = params.getImplementationClassName();<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (implementationClassName == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      implementationClassName = this.alternateBufferedMutatorClassName;<a name="line.384"></a>
+<span class="sourceLineNo">325</span>  private void spawnRenewalChore(final UserGroupInformation user) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    authService = new ChoreService("Relogin service");<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    authService.scheduleChore(AuthUtil.getAuthRenewalChore(user));<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>   * @param useMetaReplicas<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  @VisibleForTesting<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  void setUseMetaReplicas(final boolean useMetaReplicas) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    this.useMetaReplicas = useMetaReplicas;<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>   * @param conn The connection for which to replace the generator.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * @param cnm Replaces the nonce generator used, for testing.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * @return old nonce generator.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  @VisibleForTesting<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  static NonceGenerator injectNonceGeneratorForTesting(<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      ClusterConnection conn, NonceGenerator cnm) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    ConnectionImplementation connImpl = (ConnectionImplementation)conn;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    NonceGenerator ng = connImpl.getNonceGenerator();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    LOG.warn("Nonce generator is being replaced by test code for "<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      + cnm.getClass().getName());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    nonceGenerator = cnm;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return ng;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  @Override<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  public Table getTable(TableName tableName) throws IOException {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return getTable(tableName, getBatchPool());<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>  @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  public TableBuilder getTableBuilder(TableName tableName, ExecutorService pool) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    return new TableBuilderBase(tableName, connectionConfig) {<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 Table build() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        return new HTable(ConnectionImplementation.this, this, rpcCallerFactory,<a name="line.365"></a>
+<span class="sourceLineNo">366</span>            rpcControllerFactory, pool);<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>  }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>  @Override<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  public BufferedMutator getBufferedMutator(BufferedMutatorParams params) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    if (params.getTableName() == null) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      throw new IllegalArgumentException("TableName cannot be null.");<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    if (params.getPool() == null) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      params.pool(HTable.getDefaultExecutor(getConfiguration()));<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    if (params.getWriteBufferSize() == BufferedMutatorParams.UNSET) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      params.writeBufferSize(connectionConfig.getWriteBufferSize());<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (params.getWriteBufferPeriodicFlushTimeoutMs() == BufferedMutatorParams.UNSET) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      params.setWriteBufferPeriodicFlushTimeoutMs(<a name="line.383"></a>
+<span class="sourceLineNo">384</span>              connectionConfig.getWriteBufferPeriodicFlushTimeoutMs());<a name="line.384"></a>
 <span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    if (implementationClassName == null) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return new BufferedMutatorImpl(this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    try {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      return (BufferedMutator)ReflectionUtils.newInstance(Class.forName(implementationClassName),<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    } catch (ClassNotFoundException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      throw new RuntimeException(e);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public BufferedMutator getBufferedMutator(TableName tableName) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    return getBufferedMutator(new BufferedMutatorParams(tableName));<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>  @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public RegionLocator getRegionLocator(TableName tableName) throws IOException {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    return new HRegionLocator(tableName, this);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>  @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public Admin getAdmin() throws IOException {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return new HBaseAdmin(this);<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 MetricsConnection getConnectionMetrics() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    return this.metrics;<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>  private ExecutorService getBatchPool() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    if (batchPool == null) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      synchronized (this) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        if (batchPool == null) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          int threads = conf.getInt("hbase.hconnection.threads.max", 256);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          this.batchPool = getThreadPool(threads, threads, "-shared", null);<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          this.cleanupPool = true;<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>    return this.batchPool;<a name="line.427"></a>
+<span class="sourceLineNo">386</span>    if (params.getWriteBufferPeriodicFlushTimerTickMs() == BufferedMutatorParams.UNSET) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      params.setWriteBufferPeriodicFlushTimerTickMs(<a name="line.387"></a>
+<span class="sourceLineNo">388</span>              connectionConfig.getWriteBufferPeriodicFlushTimerTickMs());<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    if (params.getMaxKeyValueSize() == BufferedMutatorParams.UNSET) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      params.maxKeyValueSize(connectionConfig.getMaxKeyValueSize());<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    // Look to see if an alternate BufferedMutation implementation is wanted.<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    // Look in params and in config. If null, use default.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    String implementationClassName = params.getImplementationClassName();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    if (implementationClassName == null) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      implementationClassName = this.alternateBufferedMutatorClassName;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    if (implementationClassName == null) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return new BufferedMutatorImpl(this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    try {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      return (BufferedMutator)ReflectionUtils.newInstance(Class.forName(implementationClassName),<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          this, rpcCallerFactory, rpcControllerFactory, params);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    } catch (ClassNotFoundException e) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      throw new RuntimeException(e);<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>  @Override<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  public BufferedMutator getBufferedMutator(TableName tableName) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    return getBufferedMutator(new BufferedMutatorParams(tableName));<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>  @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  public RegionLocator getRegionLocator(TableName tableName) throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    return new HRegionLocator(tableName, this);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>  @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public Admin getAdmin() throws IOException {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    return new HBaseAdmin(this);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>  @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>  public MetricsConnection getConnectionMetrics() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    return this.metrics;<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>  private ExecutorService getThreadPool(int maxThreads, int coreThreads, String nameHint,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      BlockingQueue&lt;Runnable&gt; passedWorkQueue) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    // shared HTable thread executor not yet initialized<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    if (maxThreads == 0) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      maxThreads = Runtime.getRuntime().availableProcessors() * 8;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    if (coreThreads == 0) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      coreThreads = Runtime.getRuntime().availableProcessors() * 8;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    long keepAliveTime = conf.getLong("hbase.hconnection.threads.keepalivetime", 60);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    BlockingQueue&lt;Runnable&gt; workQueue = passedWorkQueue;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    if (workQueue == null) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      workQueue =<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        new LinkedBlockingQueue&lt;&gt;(maxThreads *<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            conf.getInt(HConstants.HBASE_CLIENT_MAX_TOTAL_TASKS,<a name="line.444"></a>
-<span class="sourceLineNo">445</span>                HConstants.DEFAULT_HBASE_CLIENT_MAX_TOTAL_TASKS));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      coreThreads = maxThreads;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    ThreadPoolExecutor tpe = new ThreadPoolExecutor(<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        coreThreads,<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        maxThreads,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        keepAliveTime,<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        TimeUnit.SECONDS,<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        workQueue,<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        Threads.newDaemonThreadFactory(toString() + nameHint));<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    tpe.allowCoreThreadTimeOut(true);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    return tpe;<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>  private ExecutorService getMetaLookupPool() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    if (this.metaLookupPool == null) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      synchronized (this) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        if (this.metaLookupPool == null) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          //Some of the threads would be used for meta replicas<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          //To start with, threads.max.core threads can hit the meta (including replicas).<a name="line.464"></a>
-<span class="sourceLineNo">465</span>          //After that, requests will get queued up in the passed queue, and only after<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          //the queue is full, a new thread will be started<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          int threads = conf.getInt("hbase.hconnection.meta.lookup.threads.max", 128);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>          this.metaLookupPool = getThreadPool(<a name="line.468"></a>
-<span class="sourceLineNo">469</span>             threads,<a name="line.469"></a>
-<span class="sourceLineNo">470</span>             threads,<a name="line.470"></a>
-<span class="sourceLineNo">471</span>             "-metaLookup-shared-", new LinkedBlockingQueue&lt;&gt;());<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    return this.metaLookupPool;<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>  protected ExecutorService getCurrentMetaLookupPool() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    return metaLookupPool;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>  protected ExecutorService getCurrentBatchPool() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    return batchPool;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  private void shutdownPools() {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    if (this.cleanupPool &amp;&amp; this.batchPool != null &amp;&amp; !this.batchPool.isShutdown()) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      shutdownBatchPool(this.batchPool);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (this.metaLookupPool != null &amp;&amp; !this.metaLookupPool.isShutdown()) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      shutdownBatchPool(this.metaLookupPool);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
+<span class="sourceLineNo">430</span>  private ExecutorService getBatchPool() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    if (batchPool == null) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      synchronized (this) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        if (batchPool == null) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          int threads = conf.getInt("hbase.hconnection.threads.max", 256);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          this.batchPool = getThreadPool(threads, threads, "-shared", null);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          this.cleanupPool = true;<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>    return this.batchPool;<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>  private ExecutorService getThreadPool(int maxThreads, int coreThreads, String nameHint,<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      BlockingQueue&lt;Runnable&gt; passedWorkQueue) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    // shared HTable thread executor not yet initialized<a name="line.445"></a>
+<span class="sourceLineNo">446

<TRUNCATED>

[25/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 f16f8df..30bba22 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html
@@ -30,152 +30,254 @@
 <span class="sourceLineNo">022</span>import java.net.UnknownHostException;<a name="line.22"></a>
 <span class="sourceLineNo">023</span><a name="line.23"></a>
 <span class="sourceLineNo">024</span>import org.apache.hadoop.conf.Configuration;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.slf4j.Logger;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.slf4j.LoggerFactory;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>/**<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * Utility methods for helping with security tasks. Downstream users<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * may rely on this class to handle authenticating via keytab where<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * long running services need access to a secure HBase cluster.<a name="line.36"></a>
-<span class="sourceLineNo">037</span> *<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * Callers must ensure:<a name="line.38"></a>
-<span class="sourceLineNo">039</span> *<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * &lt;ul&gt;<a name="line.40"></a>
-<span class="sourceLineNo">041</span> *   &lt;li&gt;HBase configuration files are in the Classpath<a name="line.41"></a>
-<span class="sourceLineNo">042</span> *   &lt;li&gt;hbase.client.keytab.file points to a valid keytab on the local filesystem<a name="line.42"></a>
-<span class="sourceLineNo">043</span> *   &lt;li&gt;hbase.client.kerberos.principal gives the Kerberos principal to use<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * &lt;/ul&gt;<a name="line.44"></a>
-<span class="sourceLineNo">045</span> *<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * &lt;pre&gt;<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * {@code<a name="line.47"></a>
-<span class="sourceLineNo">048</span> *   ChoreService choreService = null;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> *   // Presumes HBase configuration files are on the classpath<a name="line.49"></a>
-<span class="sourceLineNo">050</span> *   final Configuration conf = HBaseConfiguration.create();<a name="line.50"></a>
-<span class="sourceLineNo">051</span> *   final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.51"></a>
-<span class="sourceLineNo">052</span> *   if (authChore != null) {<a name="line.52"></a>
-<span class="sourceLineNo">053</span> *     choreService = new ChoreService("MY_APPLICATION");<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *     choreService.scheduleChore(authChore);<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *   }<a name="line.55"></a>
-<span class="sourceLineNo">056</span> *   try {<a name="line.56"></a>
-<span class="sourceLineNo">057</span> *     // do application work<a name="line.57"></a>
-<span class="sourceLineNo">058</span> *   } finally {<a name="line.58"></a>
-<span class="sourceLineNo">059</span> *     if (choreService != null) {<a name="line.59"></a>
-<span class="sourceLineNo">060</span> *       choreService.shutdown();<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> * }<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * &lt;/pre&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> *<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * See the "Running Canary in a Kerberos-enabled Cluster" section of the HBase Reference Guide for<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * an example of configuring a user of this Auth Chore to run on a secure cluster.<a name="line.67"></a>
-<span class="sourceLineNo">068</span> */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>@InterfaceAudience.Public<a name="line.69"></a>
-<span class="sourceLineNo">070</span>public class AuthUtil {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private static final Logger LOG = LoggerFactory.getLogger(AuthUtil.class);<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  /** Prefix character to denote group names */<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static final String GROUP_PREFIX = "@";<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private AuthUtil() {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    super();<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>  /**<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param conf the hbase service configuration<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @return a ScheduledChore for renewals, if needed, and null otherwise.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   */<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static ScheduledChore getAuthChore(Configuration conf) throws IOException {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    UserProvider userProvider = UserProvider.instantiate(conf);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    // login the principal (if using secure Hadoop)<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    boolean securityEnabled =<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        userProvider.isHadoopSecurityEnabled() &amp;&amp; userProvider.isHBaseSecurityEnabled();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    if (!securityEnabled) return null;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    String host = null;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    try {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      host = Strings.domainNamePointerToHostName(DNS.getDefaultHost(<a name="line.93"></a>
-<span class="sourceLineNo">094</span>          conf.get("hbase.client.dns.interface", "default"),<a name="line.94"></a>
-<span class="sourceLineNo">095</span>          conf.get("hbase.client.dns.nameserver", "default")));<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      userProvider.login("hbase.client.keytab.file", "hbase.client.kerberos.principal", host);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    } catch (UnknownHostException e) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      LOG.error("Error resolving host name: " + e.getMessage(), e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      throw e;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    } catch (IOException e) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      LOG.error("Error while trying to perform the initial login: " + e.getMessage(), e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      throw e;<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>    final UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    Stoppable stoppable = new Stoppable() {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      private volatile boolean isStopped = false;<a name="line.107"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.security.User;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.slf4j.Logger;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.slf4j.LoggerFactory;<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> * Utility methods for helping with security tasks. Downstream users<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * may rely on this class to handle authenticating via keytab where<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * long running services need access to a secure HBase cluster.<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * Callers must ensure:<a name="line.39"></a>
+<span class="sourceLineNo">040</span> *<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * &lt;ul&gt;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> *   &lt;li&gt;HBase configuration files are in the Classpath<a name="line.42"></a>
+<span class="sourceLineNo">043</span> *   &lt;li&gt;hbase.client.keytab.file points to a valid keytab on the local filesystem<a name="line.43"></a>
+<span class="sourceLineNo">044</span> *   &lt;li&gt;hbase.client.kerberos.principal gives the Kerberos principal to use<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * &lt;/ul&gt;<a name="line.45"></a>
+<span class="sourceLineNo">046</span> *<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * &lt;pre&gt;<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * {@code<a name="line.48"></a>
+<span class="sourceLineNo">049</span> *   ChoreService choreService = null;<a name="line.49"></a>
+<span class="sourceLineNo">050</span> *   // Presumes HBase configuration files are on the classpath<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *   final Configuration conf = HBaseConfiguration.create();<a name="line.51"></a>
+<span class="sourceLineNo">052</span> *   final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.52"></a>
+<span class="sourceLineNo">053</span> *   if (authChore != null) {<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *     choreService = new ChoreService("MY_APPLICATION");<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *     choreService.scheduleChore(authChore);<a name="line.55"></a>
+<span class="sourceLineNo">056</span> *   }<a name="line.56"></a>
+<span class="sourceLineNo">057</span> *   try {<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *     // do application work<a name="line.58"></a>
+<span class="sourceLineNo">059</span> *   } finally {<a name="line.59"></a>
+<span class="sourceLineNo">060</span> *     if (choreService != null) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span> *       choreService.shutdown();<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> * &lt;/pre&gt;<a name="line.65"></a>
+<span class="sourceLineNo">066</span> *<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * See the "Running Canary in a Kerberos-enabled Cluster" section of the HBase Reference Guide for<a name="line.67"></a>
+<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">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>
+<span class="sourceLineNo">075</span> * @deprecated since 2.2.0, to be removed in hbase-3.0.0.<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@Deprecated<a name="line.77"></a>
+<span class="sourceLineNo">078</span>@InterfaceAudience.Public<a name="line.78"></a>
+<span class="sourceLineNo">079</span>public final class AuthUtil {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  // TODO: Mark this class InterfaceAudience.Private from 3.0.0<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private static final Logger LOG = LoggerFactory.getLogger(AuthUtil.class);<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  /** Prefix character to denote group names */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private static final String GROUP_PREFIX = "@";<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  /** Client keytab file */<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  public static final String HBASE_CLIENT_KEYTAB_FILE = "hbase.client.keytab.file";<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  /** Client principal */<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static final String HBASE_CLIENT_KERBEROS_PRINCIPAL = "hbase.client.keytab.principal";<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private AuthUtil() {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    super();<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>   * For kerberized cluster, return login user (from kinit or from keytab if specified).<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * For non-kerberized cluster, return system user.<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * @param conf configuartion file<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * @return user<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * @throws IOException login exception<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  @InterfaceAudience.Private<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public static User loginClient(Configuration conf) throws IOException {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    UserProvider provider = UserProvider.instantiate(conf);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    User user = provider.getCurrent();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    boolean securityOn = provider.isHBaseSecurityEnabled() &amp;&amp; provider.isHadoopSecurityEnabled();<a name="line.107"></a>
 <span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>      @Override<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      public void stop(String why) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        isStopped = true;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>      @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      public boolean isStopped() {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        return isStopped;<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>    // if you're in debug mode this is useful to avoid getting spammed by the getTGT()<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    // you can increase this, keeping in mind that the default refresh window is 0.8<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    // e.g. 5min tgt * 0.8 = 4min refresh so interval is better be way less than 1min<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    final int CHECK_TGT_INTERVAL = 30 * 1000; // 30sec<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>    ScheduledChore refreshCredentials =<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        new ScheduledChore("RefreshCredentials", stoppable, CHECK_TGT_INTERVAL) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      @Override<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      protected void chore() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        try {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>          ugi.checkTGTAndReloginFromKeytab();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        } catch (IOException e) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>          LOG.error("Got exception while trying to refresh credentials: " + e.getMessage(), e);<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><a name="line.136"></a>
-<span class="sourceLineNo">137</span>    return refreshCredentials;<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>  /**<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * Returns whether or not the given name should be interpreted as a group<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * principal.  Currently this simply checks if the name starts with the<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * special group prefix character ("@").<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @InterfaceAudience.Private<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public static boolean isGroupPrincipal(String name) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return name != null &amp;&amp; name.startsWith(GROUP_PREFIX);<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>  /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * Returns the actual name for a group principal (stripped of the<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * group prefix).<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  @InterfaceAudience.Private<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  public static String getGroupName(String aclKey) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    if (!isGroupPrincipal(aclKey)) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      return aclKey;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>    return aclKey.substring(GROUP_PREFIX.length());<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>   * Returns the group entry with the group prefix for a group principal.<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @InterfaceAudience.Private<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public static String toGroupEntry(String name) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    return GROUP_PREFIX + name;<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">109</span>    if (securityOn) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      boolean fromKeytab = provider.shouldLoginFromKeytab();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      if (user.getUGI().hasKerberosCredentials()) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        // There's already a login user.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>        // But we should avoid misuse credentials which is a dangerous security issue,<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        // so here check whether user specified a keytab and a principal:<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        // 1. Yes, check if user principal match.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        //    a. match, just return.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        //    b. mismatch, login using keytab.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        // 2. No, user may login through kinit, this is the old way, also just return.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        if (fromKeytab) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>          return checkPrincipalMatch(conf, user.getUGI().getUserName()) ? user :<a name="line.120"></a>
+<span class="sourceLineNo">121</span>            loginFromKeytabAndReturnUser(provider);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        }<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        return user;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      } else if (fromKeytab) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        // Kerberos is on and client specify a keytab and principal, but client doesn't login yet.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        return loginFromKeytabAndReturnUser(provider);<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>    return user;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  private static boolean checkPrincipalMatch(Configuration conf, String loginUserName) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    String configuredUserName = conf.get(HBASE_CLIENT_KERBEROS_PRINCIPAL);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    boolean match = configuredUserName.equals(loginUserName);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    if (!match) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.warn("Trying to login with a different user: {}, existed user is {}.",<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        configuredUserName, loginUserName);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return match;<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>  private static User loginFromKeytabAndReturnUser(UserProvider provider) throws IOException {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    try {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      provider.login(HBASE_CLIENT_KEYTAB_FILE, HBASE_CLIENT_KERBEROS_PRINCIPAL);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    } catch (IOException ioe) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      LOG.error("Error while trying to login as user {} through {}, with message: {}.",<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        HBASE_CLIENT_KERBEROS_PRINCIPAL, HBASE_CLIENT_KEYTAB_FILE,<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        ioe.getMessage());<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      throw ioe;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    return provider.getCurrent();<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>   * For kerberized cluster, return login user (from kinit or from keytab).<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * Principal should be the following format: name/fully.qualified.domain.name@REALM.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * For non-kerberized cluster, return system user.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * &lt;p&gt;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * NOT recommend to use to method unless you're sure what you're doing, it is for canary only.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Please use User#loginClient.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @param conf configuration file<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @return user<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @throws IOException login exception<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   */<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  private static User loginClientAsService(Configuration conf) throws IOException {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    UserProvider provider = UserProvider.instantiate(conf);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    if (provider.isHBaseSecurityEnabled() &amp;&amp; provider.isHadoopSecurityEnabled()) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      try {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>        if (provider.shouldLoginFromKeytab()) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>          String host = Strings.domainNamePointerToHostName(DNS.getDefaultHost(<a name="line.170"></a>
+<span class="sourceLineNo">171</span>            conf.get("hbase.client.dns.interface", "default"),<a name="line.171"></a>
+<span class="sourceLineNo">172</span>            conf.get("hbase.client.dns.nameserver", "default")));<a name="line.172"></a>
+<span class="sourceLineNo">173</span>          provider.login(HBASE_CLIENT_KEYTAB_FILE, HBASE_CLIENT_KERBEROS_PRINCIPAL, host);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      } catch (UnknownHostException e) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        LOG.error("Error resolving host name: " + e.getMessage(), e);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        throw e;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      } catch (IOException e) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        LOG.error("Error while trying to perform the initial login: " + e.getMessage(), e);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        throw e;<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>    return provider.getCurrent();<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 if security is enabled and if so, launches chore for refreshing kerberos ticket.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * @return a ScheduledChore for renewals.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  @InterfaceAudience.Private<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  public static ScheduledChore getAuthRenewalChore(final UserGroupInformation user) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    if (!user.hasKerberosCredentials()) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      return null;<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>    Stoppable stoppable = createDummyStoppable();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // if you're in debug mode this is useful to avoid getting spammed by the getTGT()<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // you can increase this, keeping in mind that the default refresh window is 0.8<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    // e.g. 5min tgt * 0.8 = 4min refresh so interval is better be way less than 1min<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    final int CHECK_TGT_INTERVAL = 30 * 1000; // 30sec<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    return new ScheduledChore("RefreshCredentials", stoppable, CHECK_TGT_INTERVAL) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      @Override<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      protected void chore() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        try {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          user.checkTGTAndReloginFromKeytab();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        } catch (IOException e) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          LOG.error("Got exception while trying to refresh credentials: " + e.getMessage(), e);<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>    };<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>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * @param conf the hbase service configuration<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * @return a ScheduledChore for renewals, if needed, and null otherwise.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * @deprecated Deprecated since 2.2.0, this method will be internal use only after 3.0.0.<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   */<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  @Deprecated<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  public static ScheduledChore getAuthChore(Configuration conf) throws IOException {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    // TODO: Mark this method InterfaceAudience.Private from 3.0.0<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    User user = loginClientAsService(conf);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    return getAuthRenewalChore(user.getUGI());<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>  private static Stoppable createDummyStoppable() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    return new Stoppable() {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      private volatile boolean isStopped = false;<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>      @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      public void stop(String why) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        isStopped = true;<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>      @Override<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      public boolean isStopped() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        return isStopped;<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><a name="line.241"></a>
+<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * Returns whether or not the given name should be interpreted as a group<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   * principal.  Currently this simply checks if the name starts with the<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * special group prefix character ("@").<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  @InterfaceAudience.Private<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  public static boolean isGroupPrincipal(String name) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    return name != null &amp;&amp; name.startsWith(GROUP_PREFIX);<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>   * Returns the actual name for a group principal (stripped of the<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * group prefix).<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  @InterfaceAudience.Private<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  public static String getGroupName(String aclKey) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    if (!isGroupPrincipal(aclKey)) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      return aclKey;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return aclKey.substring(GROUP_PREFIX.length());<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 the group entry with the group prefix for a group principal.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  @InterfaceAudience.Private<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  public static String toGroupEntry(String name) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return GROUP_PREFIX + name;<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>
 
 
 


[02/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 4e3bec2..4a3a73e 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -440,7 +440,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 8c5c7ca..4240ac9 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 618dd7d..da43535 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -375,7 +375,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index f5a6530..7346e8e 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <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.5-HBASE.min.css" />
@@ -769,7 +769,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 6f44959..918ff1c 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -335,7 +335,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 5f36ce8..99e561b 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -305,7 +305,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 659949d..71d41fd 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -331,7 +331,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 8f0c110..01b6429 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -308,7 +308,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index bcdba17..0f36b75 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -303,7 +303,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 628fc2f..3ef8923 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <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.5-HBASE.min.css" />
@@ -331,7 +331,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 9aa27f8..63eef81 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -299,7 +299,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index b7c0aa0..21d7b07 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -333,7 +333,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index c5eaf8b..78898db 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -520,7 +520,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index f7193c0..77581b1 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -742,7 +742,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/testdevapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/constant-values.html b/testdevapidocs/constant-values.html
index ef295bc..92fdfe5 100644
--- a/testdevapidocs/constant-values.html
+++ b/testdevapidocs/constant-values.html
@@ -12432,6 +12432,20 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.security.HBaseKerberosUtils.CLIENT_KEYTAB">
+<!--   -->
+</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/security/HBaseKerberosUtils.html#CLIENT_KEYTAB">CLIENT_KEYTAB</a></code></td>
+<td class="colLast"><code>"hbase.client.keytab.file"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.security.HBaseKerberosUtils.CLIENT_PRINCIPAL">
+<!--   -->
+</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/security/HBaseKerberosUtils.html#CLIENT_PRINCIPAL">CLIENT_PRINCIPAL</a></code></td>
+<td class="colLast"><code>"hbase.client.keytab.principal"</code></td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.security.HBaseKerberosUtils.KRB_KEYTAB_FILE">
 <!--   -->
 </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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index c43cdd1..6a4ce09 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -6849,8 +6849,14 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.CINode.html#client">client</a></span> - Variable in class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.CINode.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestBigLinkedList.CINode</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#CLIENT_KEYTAB">CLIENT_KEYTAB</a></span> - Static variable in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html" title="class in org.apache.hadoop.hbase.security">HBaseKerberosUtils</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#CLIENT_NAME">CLIENT_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html" title="class in org.apache.hadoop.hbase.security">TestUsersOperationsWithSecureHadoop</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/TestSpnegoHttpServer.html#CLIENT_PRINCIPAL">CLIENT_PRINCIPAL</a></span> - Static variable in class org.apache.hadoop.hbase.http.<a href="org/apache/hadoop/hbase/http/TestSpnegoHttpServer.html" title="class in org.apache.hadoop.hbase.http">TestSpnegoHttpServer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#CLIENT_PRINCIPAL">CLIENT_PRINCIPAL</a></span> - Static variable in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html" title="class in org.apache.hadoop.hbase.security">HBaseKerberosUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestClientScannerRPCTimeout.html#CLIENT_RETRIES_NUMBER">CLIENT_RETRIES_NUMBER</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestClientScannerRPCTimeout.html" title="class in org.apache.hadoop.hbase.client">TestClientScannerRPCTimeout</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#CLIENT_TIMEOUT">CLIENT_TIMEOUT</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages</a></dt>
@@ -15737,6 +15743,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockNoopMasterServices.html#getClientIdAuditPrefix--">getClientIdAuditPrefix()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockNoopMasterServices.html" title="class in org.apache.hadoop.hbase.master">MockNoopMasterServices</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#getClientKeytabForTesting--">getClientKeytabForTesting()</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html" title="class in org.apache.hadoop.hbase.security">HBaseKerberosUtils</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#getClientPrincipalForTesting--">getClientPrincipalForTesting()</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html" title="class in org.apache.hadoop.hbase.security">HBaseKerberosUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/DistributedHBaseCluster.html#getClientProtocol-org.apache.hadoop.hbase.ServerName-">getClientProtocol(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/DistributedHBaseCluster.html" title="class in org.apache.hadoop.hbase">DistributedHBaseCluster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseCluster.html#getClientProtocol-org.apache.hadoop.hbase.ServerName-">getClientProtocol(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a></dt>
@@ -35794,6 +35804,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/RedundantKVGenerator.html#setChanceForZeroValue-float-">setChanceForZeroValue(float)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/RedundantKVGenerator.html" title="class in org.apache.hadoop.hbase.util">RedundantKVGenerator</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#setClientKeytabForTesting-java.lang.String-">setClientKeytabForTesting(String)</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html" title="class in org.apache.hadoop.hbase.security">HBaseKerberosUtils</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#setClientPrincipalForTesting-java.lang.String-">setClientPrincipalForTesting(String)</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html" title="class in org.apache.hadoop.hbase.security">HBaseKerberosUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/DistributedHBaseCluster.html#setClusterManager-org.apache.hadoop.hbase.ClusterManager-">setClusterManager(ClusterManager)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/DistributedHBaseCluster.html" title="class in org.apache.hadoop.hbase">DistributedHBaseCluster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#setCmdName-java.lang.String-">setCmdName(String)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
@@ -44873,6 +44887,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#testAuthorizationsWithSpecialUnicodeCharacters--">testAuthorizationsWithSpecialUnicodeCharacters()</a></span> - Method in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html" title="class in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabels</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#testAuthUtilLogin--">testAuthUtilLogin()</a></span> - Method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html" title="class in org.apache.hadoop.hbase.security">TestUsersOperationsWithSecureHadoop</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanBase.html#testAutobalanceNumOfSplit--">testAutobalanceNumOfSplit()</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanBase.html" title="class in org.apache.hadoop.hbase.mapreduce">TestTableInputFormatScanBase</a></dt>
 <dd>
 <div class="block">Run MR job to test autobalance for setting number of mappers for TIF
@@ -53216,6 +53232,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestSplitLogManager.html#testLogFilesAreArchived--">testLogFilesAreArchived()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestSplitLogManager.html" title="class in org.apache.hadoop.hbase.master">TestSplitLogManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#testLoginWithUserKeytabAndPrincipal--">testLoginWithUserKeytabAndPrincipal()</a></span> - Method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html" title="class in org.apache.hadoop.hbase.security">TestUsersOperationsWithSecureHadoop</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/http/log/TestLogLevel.html" title="class in org.apache.hadoop.hbase.http.log"><span class="typeNameLink">TestLogLevel</span></a> - Class in <a href="org/apache/hadoop/hbase/http/log/package-summary.html">org.apache.hadoop.hbase.http.log</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/log/TestLogLevel.html#TestLogLevel--">TestLogLevel()</a></span> - Constructor for class org.apache.hadoop.hbase.http.log.<a href="org/apache/hadoop/hbase/http/log/TestLogLevel.html" title="class in org.apache.hadoop.hbase.http.log">TestLogLevel</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 6af42fe..2d9b60f 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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 cae2d0c..c8490f4 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -576,15 +576,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/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/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/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/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/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/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/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/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/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/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/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 b5bacb6..e9c1d93 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -205,9 +205,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.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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 5df3db7..b0c25df 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -667,11 +667,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.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>
-<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/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/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/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/testdevapidocs/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html b/testdevapidocs/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html
index 440188b..3c86eb5 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/HBaseKerberosUtils.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,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.33">HBaseKerberosUtils</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.34">HBaseKerberosUtils</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>
@@ -132,6 +132,14 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr 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/HBaseKerberosUtils.html#CLIENT_KEYTAB">CLIENT_KEYTAB</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<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/HBaseKerberosUtils.html#CLIENT_PRINCIPAL">CLIENT_PRINCIPAL</a></span></code>&nbsp;</td>
+</tr>
+<tr 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/HBaseKerberosUtils.html#KRB_KEYTAB_FILE">KRB_KEYTAB_FILE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -179,43 +187,59 @@ 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="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/HBaseKerberosUtils.html#getClientKeytabForTesting--">getClientKeytabForTesting</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<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/HBaseKerberosUtils.html#getClientPrincipalForTesting--">getClientPrincipalForTesting</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.conf.Configuration</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#getConfigurationWoPrincipal--">getConfigurationWoPrincipal</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i1" class="rowColor">
+<tr id="i3" class="rowColor">
 <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/HBaseKerberosUtils.html#getKeytabFileForTesting--">getKeytabFileForTesting</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i4" 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/HBaseKerberosUtils.html#getPrincipalForTesting--">getPrincipalForTesting</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.conf.Configuration</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#getSecuredConfiguration--">getSecuredConfiguration</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#isKerberosPropertySetted--">isKerberosPropertySetted</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.security.UserGroupInformation</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#loginAndReturnUGI-org.apache.hadoop.conf.Configuration-java.lang.String-">loginAndReturnUGI</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;username)</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#setClientKeytabForTesting-java.lang.String-">setClientKeytabForTesting</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;clientKeytab)</code>&nbsp;</td>
+</tr>
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#setClientPrincipalForTesting-java.lang.String-">setClientPrincipalForTesting</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;clientPrincipal)</code>&nbsp;</td>
+</tr>
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#setKeytabFileForTesting-java.lang.String-">setKeytabFileForTesting</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;keytabFile)</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#setPrincipalForTesting-java.lang.String-">setPrincipalForTesting</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;principal)</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#setSecuredConfiguration-org.apache.hadoop.conf.Configuration-">setSecuredConfiguration</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#setSystemProperty-java.lang.String-java.lang.String-">setSystemProperty</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;propertyName,
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;propertyValue)</code>&nbsp;</td>
@@ -248,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>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.34">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.35">LOG</a></pre>
 </li>
 </ul>
 <a name="KRB_PRINCIPAL">
@@ -257,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>KRB_PRINCIPAL</h4>
-<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.36">KRB_PRINCIPAL</a></pre>
+<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.37">KRB_PRINCIPAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.security.HBaseKerberosUtils.KRB_PRINCIPAL">Constant Field Values</a></dd>
@@ -270,7 +294,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_KRB_PRINCIPAL</h4>
-<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.37">MASTER_KRB_PRINCIPAL</a></pre>
+<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.38">MASTER_KRB_PRINCIPAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.security.HBaseKerberosUtils.MASTER_KRB_PRINCIPAL">Constant Field Values</a></dd>
@@ -280,16 +304,42 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="KRB_KEYTAB_FILE">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>KRB_KEYTAB_FILE</h4>
-<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.38">KRB_KEYTAB_FILE</a></pre>
+<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.39">KRB_KEYTAB_FILE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.security.HBaseKerberosUtils.KRB_KEYTAB_FILE">Constant Field Values</a></dd>
 </dl>
 </li>
 </ul>
+<a name="CLIENT_PRINCIPAL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CLIENT_PRINCIPAL</h4>
+<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.40">CLIENT_PRINCIPAL</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.security.HBaseKerberosUtils.CLIENT_PRINCIPAL">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="CLIENT_KEYTAB">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CLIENT_KEYTAB</h4>
+<pre>public static 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.41">CLIENT_KEYTAB</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.security.HBaseKerberosUtils.CLIENT_KEYTAB">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -304,7 +354,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HBaseKerberosUtils</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.33">HBaseKerberosUtils</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.34">HBaseKerberosUtils</a>()</pre>
 </li>
 </ul>
 </li>
@@ -321,7 +371,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isKerberosPropertySetted</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.40">isKerberosPropertySetted</a>()</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.43">isKerberosPropertySetted</a>()</pre>
 </li>
 </ul>
 <a name="setPrincipalForTesting-java.lang.String-">
@@ -330,7 +380,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setPrincipalForTesting</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.49">setPrincipalForTesting</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;principal)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.52">setPrincipalForTesting</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;principal)</pre>
 </li>
 </ul>
 <a name="setKeytabFileForTesting-java.lang.String-">
@@ -339,7 +389,25 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setKeytabFileForTesting</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.53">setKeytabFileForTesting</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;keytabFile)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.56">setKeytabFileForTesting</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;keytabFile)</pre>
+</li>
+</ul>
+<a name="setClientPrincipalForTesting-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setClientPrincipalForTesting</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.60">setClientPrincipalForTesting</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;clientPrincipal)</pre>
+</li>
+</ul>
+<a name="setClientKeytabForTesting-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setClientKeytabForTesting</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.64">setClientKeytabForTesting</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;clientKeytab)</pre>
 </li>
 </ul>
 <a name="setSystemProperty-java.lang.String-java.lang.String-">
@@ -348,7 +416,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setSystemProperty</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.57">setSystemProperty</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;propertyName,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.68">setSystemProperty</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;propertyName,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;propertyValue)</pre>
 </li>
 </ul>
@@ -358,7 +426,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getKeytabFileForTesting</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/HBaseKerberosUtils.html#line.61">getKeytabFileForTesting</a>()</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/HBaseKerberosUtils.html#line.72">getKeytabFileForTesting</a>()</pre>
 </li>
 </ul>
 <a name="getPrincipalForTesting--">
@@ -367,7 +435,25 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getPrincipalForTesting</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/HBaseKerberosUtils.html#line.65">getPrincipalForTesting</a>()</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/HBaseKerberosUtils.html#line.76">getPrincipalForTesting</a>()</pre>
+</li>
+</ul>
+<a name="getClientPrincipalForTesting--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getClientPrincipalForTesting</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/HBaseKerberosUtils.html#line.80">getClientPrincipalForTesting</a>()</pre>
+</li>
+</ul>
+<a name="getClientKeytabForTesting--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getClientKeytabForTesting</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/HBaseKerberosUtils.html#line.84">getClientKeytabForTesting</a>()</pre>
 </li>
 </ul>
 <a name="getConfigurationWoPrincipal--">
@@ -376,7 +462,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfigurationWoPrincipal</h4>
-<pre>public static&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.69">getConfigurationWoPrincipal</a>()</pre>
+<pre>public static&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.88">getConfigurationWoPrincipal</a>()</pre>
 </li>
 </ul>
 <a name="getSecuredConfiguration--">
@@ -385,7 +471,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getSecuredConfiguration</h4>
-<pre>public static&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.77">getSecuredConfiguration</a>()</pre>
+<pre>public static&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.96">getSecuredConfiguration</a>()</pre>
 </li>
 </ul>
 <a name="setSecuredConfiguration-org.apache.hadoop.conf.Configuration-">
@@ -394,7 +480,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setSecuredConfiguration</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.83">setSecuredConfiguration</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.102">setSecuredConfiguration</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="loginAndReturnUGI-org.apache.hadoop.conf.Configuration-java.lang.String-">
@@ -403,7 +489,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>loginAndReturnUGI</h4>
-<pre>public static&nbsp;org.apache.hadoop.security.UserGroupInformation&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.92">loginAndReturnUGI</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;org.apache.hadoop.security.UserGroupInformation&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#line.111">loginAndReturnUGI</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;username)
                                                                          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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/testdevapidocs/org/apache/hadoop/hbase/security/HadoopSecurityEnabledUserProviderForTesting.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/HadoopSecurityEnabledUserProviderForTesting.html b/testdevapidocs/org/apache/hadoop/hbase/security/HadoopSecurityEnabledUserProviderForTesting.html
index 832a535..05fd1b1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/HadoopSecurityEnabledUserProviderForTesting.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/HadoopSecurityEnabledUserProviderForTesting.html
@@ -195,7 +195,7 @@ extends org.apache.hadoop.hbase.security.UserProvider</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.security.UserProvider</h3>
-<code>create, getCurrent, getCurrentUserName, instantiate, login, setConf, setUserProviderForTesting</code></li>
+<code>create, getCurrent, getCurrentUserName, instantiate, login, login, setConf, setUserProviderForTesting, shouldLoginFromKeytab</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.BaseConfigurable">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/testdevapidocs/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html b/testdevapidocs/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html
index 3fdfacb..83e83f9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":10};
+var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":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/security/TestUsersOperationsWithSecureHadoop.html#line.44">TestUsersOperationsWithSecureHadoop</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.48">TestUsersOperationsWithSecureHadoop</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>
@@ -135,21 +135,25 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private 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/TestUsersOperationsWithSecureHadoop.html#HOST">HOST</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#CLIENT_NAME">CLIENT_NAME</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/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/TestUsersOperationsWithSecureHadoop.html#HOST">HOST</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.apache.hadoop.minikdc.MiniKdc</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#KDC">KDC</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#KEYTAB_FILE">KEYTAB_FILE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private 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/TestUsersOperationsWithSecureHadoop.html#PRINCIPAL">PRINCIPAL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<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"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
@@ -195,6 +199,14 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </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/security/TestUsersOperationsWithSecureHadoop.html#testAuthUtilLogin--">testAuthUtilLogin</a></span>()</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/TestUsersOperationsWithSecureHadoop.html#testLoginWithUserKeytabAndPrincipal--">testLoginWithUserKeytabAndPrincipal</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/TestUsersOperationsWithSecureHadoop.html#testUserLoginInSecureHadoop--">testUserLoginInSecureHadoop</a></span>()</code>
 <div class="block">test login with security enabled configuration To run this test, we must specify the following
  system properties:</div>
@@ -228,7 +240,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/TestUsersOperationsWithSecureHadoop.html#line.47">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/TestUsersOperationsWithSecureHadoop.html#line.51">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -237,7 +249,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_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/TestUsersOperationsWithSecureHadoop.html#line.50">TEST_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/TestUsersOperationsWithSecureHadoop.html#line.54">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="KEYTAB_FILE">
@@ -246,7 +258,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>KEYTAB_FILE</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.51">KEYTAB_FILE</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.55">KEYTAB_FILE</a></pre>
 </li>
 </ul>
 <a name="KDC">
@@ -255,7 +267,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>KDC</h4>
-<pre>private static&nbsp;org.apache.hadoop.minikdc.MiniKdc <a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.54">KDC</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.minikdc.MiniKdc <a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.58">KDC</a></pre>
 </li>
 </ul>
 <a name="HOST">
@@ -264,16 +276,25 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>HOST</h4>
-<pre>private 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.56">HOST</a></pre>
+<pre>private 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.60">HOST</a></pre>
 </li>
 </ul>
 <a name="PRINCIPAL">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>PRINCIPAL</h4>
-<pre>private 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.58">PRINCIPAL</a></pre>
+<pre>private 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.62">PRINCIPAL</a></pre>
+</li>
+</ul>
+<a name="CLIENT_NAME">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CLIENT_NAME</h4>
+<pre>private 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> <a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.64">CLIENT_NAME</a></pre>
 </li>
 </ul>
 </li>
@@ -290,7 +311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestUsersOperationsWithSecureHadoop</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.44">TestUsersOperationsWithSecureHadoop</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.48">TestUsersOperationsWithSecureHadoop</a>()</pre>
 </li>
 </ul>
 </li>
@@ -307,7 +328,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setUp</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.61">setUp</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.67">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>
@@ -321,7 +342,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.69">tearDown</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.79">tearDown</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>
@@ -332,10 +353,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="testUserLoginInSecureHadoop--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testUserLoginInSecureHadoop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.86">testUserLoginInSecureHadoop</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.96">testUserLoginInSecureHadoop</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>
 <div class="block">test login with security enabled configuration To run this test, we must specify the following
  system properties:
@@ -350,6 +371,34 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="testLoginWithUserKeytabAndPrincipal--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testLoginWithUserKeytabAndPrincipal</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.117">testLoginWithUserKeytabAndPrincipal</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="testAuthUtilLogin--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testAuthUtilLogin</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#line.138">testAuthUtilLogin</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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
index 1152b38..1499365 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -253,8 +253,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.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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..5282059 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -141,8 +141,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.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/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/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
 </ul>
 </li>


[23/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/apidocs/src-html/org/apache/hadoop/hbase/security/User.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/security/User.html b/apidocs/src-html/org/apache/hadoop/hbase/security/User.html
index ec5ba00..997f52f 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/security/User.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/security/User.html
@@ -35,357 +35,404 @@
 <span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.ExecutionException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span><a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.util.Methods;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.security.Groups;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.security.SecurityUtil;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.security.token.Token;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.security.token.TokenIdentifier;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache;<a name="line.41"></a>
+<span class="sourceLineNo">030</span>import java.util.Optional;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.ExecutionException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.AuthUtil;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Methods;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.security.Groups;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.security.SecurityUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.security.token.Token;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.security.token.TokenIdentifier;<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><a name="line.42"></a>
-<span class="sourceLineNo">043</span>/**<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * Wrapper to abstract out usage of user and group information in HBase.<a name="line.44"></a>
-<span class="sourceLineNo">045</span> *<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * &lt;p&gt;<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * This class provides a common interface for interacting with user and group<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * information across changing APIs in different versions of Hadoop.  It only<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * provides access to the common set of functionality in<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link org.apache.hadoop.security.UserGroupInformation} currently needed by<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * HBase, but can be extended as needs change.<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * &lt;/p&gt;<a name="line.52"></a>
-<span class="sourceLineNo">053</span> */<a name="line.53"></a>
-<span class="sourceLineNo">054</span>@InterfaceAudience.Public<a name="line.54"></a>
-<span class="sourceLineNo">055</span>public abstract class User {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  public static final String HBASE_SECURITY_CONF_KEY =<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      "hbase.security.authentication";<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public static final String HBASE_SECURITY_AUTHORIZATION_CONF_KEY =<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      "hbase.security.authorization";<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  protected UserGroupInformation ugi;<a name="line.61"></a>
+<span class="sourceLineNo">043</span>import org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache;<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> * Wrapper to abstract out usage of user and group information in HBase.<a name="line.46"></a>
+<span class="sourceLineNo">047</span> *<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * This class provides a common interface for interacting with user and group<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * information across changing APIs in different versions of Hadoop.  It only<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * provides access to the common set of functionality in<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * {@link org.apache.hadoop.security.UserGroupInformation} currently needed by<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * HBase, but can be extended as needs change.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * &lt;/p&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> */<a name="line.55"></a>
+<span class="sourceLineNo">056</span>@InterfaceAudience.Public<a name="line.56"></a>
+<span class="sourceLineNo">057</span>public abstract class User {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  public static final String HBASE_SECURITY_CONF_KEY =<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      "hbase.security.authentication";<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public static final String HBASE_SECURITY_AUTHORIZATION_CONF_KEY =<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      "hbase.security.authorization";<a name="line.61"></a>
 <span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public UserGroupInformation getUGI() {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    return ugi;<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>   * Returns the full user name.  For Kerberos principals this will include<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   * the host and realm portions of the principal name.<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   *<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * @return User full name.<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public String getName() {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    return ugi.getUserName();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<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>   * Returns the list of groups of which this user is a member.  On secure<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * Hadoop this returns the group information for the user as resolved on the<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * server.  For 0.20 based Hadoop, the group names are passed from the client.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   */<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public String[] getGroupNames() {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    return ugi.getGroupNames();<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>  /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * Returns the shortened version of the user name -- the portion that maps<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * to an operating system user name.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   *<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * @return Short name<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public abstract String getShortName();<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>   * Executes the given action within the context of this user.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public abstract &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action);<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>   * Executes the given action within the context of this user.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public abstract &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      throws IOException, InterruptedException;<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>   * Returns the Token of the specified kind associated with this user,<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * or null if the Token is not present.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   *<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * @param kind the kind of token<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param service service on which the token is supposed to be used<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @return the token of the specified kind.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public Token&lt;?&gt; getToken(String kind, String service) throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    for (Token&lt;?&gt; token : ugi.getTokens()) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      if (token.getKind().toString().equals(kind) &amp;&amp;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>          (service != null &amp;&amp; token.getService().toString().equals(service))) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        return token;<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>    return null;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * Returns all the tokens stored in the user's credentials.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public Collection&lt;Token&lt;? extends TokenIdentifier&gt;&gt; getTokens() {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    return ugi.getTokens();<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>   * Adds the given Token to the user's credentials.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   *<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * @param token the token to add<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  public void addToken(Token&lt;? extends TokenIdentifier&gt; token) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    ugi.addToken(token);<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>  @Override<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public boolean equals(Object o) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    if (this == o) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return true;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    if (o == null || getClass() != o.getClass()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return false;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return ugi.equals(((User) o).ugi);<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>  @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public int hashCode() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return ugi.hashCode();<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 String toString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    return ugi.toString();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  }<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>   * Returns the {@code User} instance within current execution context.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  public static User getCurrent() throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    User user = new SecureHadoopUser();<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    if (user.getUGI() == null) {<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>    return user;<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>   * Executes the given action as the login user<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * @param action<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @return the result of the action<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @throws IOException<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  public static &lt;T&gt; T runAsLoginUser(PrivilegedExceptionAction&lt;T&gt; action) throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    try {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      Class c = Class.forName("org.apache.hadoop.security.SecurityUtil");<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      Class [] types = new Class[]{PrivilegedExceptionAction.class};<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      Object[] args = new Object[]{action};<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      return (T) Methods.call(c, null, "doAsLoginUser", types, args);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    } catch (Throwable e) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      throw new IOException(e);<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><a name="line.188"></a>
-<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * Wraps an underlying {@code UserGroupInformation} instance.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param ugi The base Hadoop user<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @return User<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public static User create(UserGroupInformation ugi) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    if (ugi == null) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    return new SecureHadoopUser(ugi);<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>   * Generates a new {@code User} instance specifically for use in test code.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * @param name the full username<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param groups the group names to which the test user will belong<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @return a new &lt;code&gt;User&lt;/code&gt; instance<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public static User createUserForTesting(Configuration conf,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      String name, String[] groups) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    User userForTesting = SecureHadoopUser.createUserForTesting(conf, name, groups);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    return userForTesting;<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>  /**<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * Log in the current process using the given configuration keys for the<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * credential file and login principal.<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   *<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * &lt;p&gt;&lt;strong&gt;This is only applicable when<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * running on secure Hadoop&lt;/strong&gt; -- see<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * org.apache.hadoop.security.SecurityUtil#login(Configuration,String,String,String).<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * On regular Hadoop (without security features), this will safely be ignored.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * &lt;/p&gt;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   *<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param conf The configuration data to use<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param fileConfKey Property key used to configure path to the credential file<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param principalConfKey Property key used to configure login principal<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param localhost Current hostname to use in any credentials<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @throws IOException underlying exception from SecurityUtil.login() call<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  public static void login(Configuration conf, String fileConfKey,<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      String principalConfKey, String localhost) throws IOException {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    SecureHadoopUser.login(conf, fileConfKey, principalConfKey, localhost);<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>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * Returns whether or not Kerberos authentication is configured for Hadoop.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * For non-secure Hadoop, this always returns &lt;code&gt;false&lt;/code&gt;.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * For secure Hadoop, it will return the value from<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  public static boolean isSecurityEnabled() {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    return SecureHadoopUser.isSecurityEnabled();<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>   * Returns whether or not secure authentication is enabled for HBase. Note that<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * HBase security requires HDFS security to provide any guarantees, so it is<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * recommended that secure HBase should run on secure HDFS.<a name="line.247"></a>
+<span class="sourceLineNo">063</span>  protected UserGroupInformation ugi;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  public UserGroupInformation getUGI() {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    return ugi;<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>   * Returns the full user name.  For Kerberos principals this will include<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * the host and realm portions of the principal name.<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   *<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * @return User full name.<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   */<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public String getName() {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    return ugi.getUserName();<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>   * Returns the list of groups of which this user is a member.  On secure<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * Hadoop this returns the group information for the user as resolved on the<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * server.  For 0.20 based Hadoop, the group names are passed from the client.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public String[] getGroupNames() {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return ugi.getGroupNames();<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Returns the shortened version of the user name -- the portion that maps<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * to an operating system user name.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   *<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * @return Short name<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   */<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public abstract String getShortName();<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>   * Executes the given action within the context of this user.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public abstract &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action);<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>   * Executes the given action within the context of this user.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   */<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public abstract &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      throws IOException, InterruptedException;<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>   * Returns the Token of the specified kind associated with this user,<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * or null if the Token is not present.<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @param kind the kind of token<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * @param service service on which the token is supposed to be used<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * @return the token of the specified kind.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public Token&lt;?&gt; getToken(String kind, String service) throws IOException {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    for (Token&lt;?&gt; token : ugi.getTokens()) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      if (token.getKind().toString().equals(kind) &amp;&amp;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          (service != null &amp;&amp; token.getService().toString().equals(service))) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        return token;<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>    return null;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<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>   * Returns all the tokens stored in the user's credentials.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public Collection&lt;Token&lt;? extends TokenIdentifier&gt;&gt; getTokens() {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    return ugi.getTokens();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  /**<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   * Adds the given Token to the user's credentials.<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   *<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * @param token the token to add<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   */<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public void addToken(Token&lt;? extends TokenIdentifier&gt; token) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    ugi.addToken(token);<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>   * @return true if user credentials are obtained from keytab.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public boolean isLoginFromKeytab() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return ugi.isFromKeytab();<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>  @Override<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  public boolean equals(Object o) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (this == o) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return true;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    if (o == null || getClass() != o.getClass()) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      return false;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return ugi.equals(((User) o).ugi);<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>  @Override<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public int hashCode() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    return ugi.hashCode();<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>  public String toString() {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return ugi.toString();<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>   * Returns the {@code User} instance within current execution context.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  public static User getCurrent() throws IOException {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    User user = new SecureHadoopUser();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    if (user.getUGI() == null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      return null;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    return user;<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>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Executes the given action as the login user<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @param action<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @return the result of the action<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @throws IOException<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @SuppressWarnings({ "rawtypes", "unchecked" })<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public static &lt;T&gt; T runAsLoginUser(PrivilegedExceptionAction&lt;T&gt; action) throws IOException {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      Class c = Class.forName("org.apache.hadoop.security.SecurityUtil");<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      Class [] types = new Class[]{PrivilegedExceptionAction.class};<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      Object[] args = new Object[]{action};<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return (T) Methods.call(c, null, "doAsLoginUser", types, args);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (Throwable e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      throw new IOException(e);<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><a name="line.197"></a>
+<span class="sourceLineNo">198</span>  /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * Wraps an underlying {@code UserGroupInformation} instance.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * @param ugi The base Hadoop user<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * @return User<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   */<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  public static User create(UserGroupInformation ugi) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (ugi == null) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      return null;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    return new SecureHadoopUser(ugi);<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>  /**<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * Generates a new {@code User} instance specifically for use in test code.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @param name the full username<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * @param groups the group names to which the test user will belong<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * @return a new &lt;code&gt;User&lt;/code&gt; instance<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  public static User createUserForTesting(Configuration conf,<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      String name, String[] groups) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    User userForTesting = SecureHadoopUser.createUserForTesting(conf, name, groups);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    return userForTesting;<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>   * Log in the current process using the given configuration keys for the<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * credential file and login principal.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   *<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * &lt;p&gt;&lt;strong&gt;This is only applicable when<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * running on secure Hadoop&lt;/strong&gt; -- see<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * org.apache.hadoop.security.SecurityUtil#login(Configuration,String,String,String).<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * On regular Hadoop (without security features), this will safely be ignored.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * &lt;/p&gt;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   *<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @param conf The configuration data to use<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @param fileConfKey Property key used to configure path to the credential file<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @param principalConfKey Property key used to configure login principal<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * @param localhost Current hostname to use in any credentials<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * @throws IOException underlying exception from SecurityUtil.login() call<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  public static void login(Configuration conf, String fileConfKey,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      String principalConfKey, String localhost) throws IOException {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    SecureHadoopUser.login(conf, fileConfKey, principalConfKey, localhost);<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>   * Login with the given keytab and principal.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * @param keytabLocation path of keytab<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @param pricipalName login principal<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * @throws IOException underlying exception from UserGroupInformation.loginUserFromKeytab<a name="line.247"></a>
 <span class="sourceLineNo">248</span>   */<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  public static boolean isHBaseSecurityEnabled(Configuration conf) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    return "kerberos".equalsIgnoreCase(conf.get(HBASE_SECURITY_CONF_KEY));<a name="line.250"></a>
+<span class="sourceLineNo">249</span>  public static void login(String keytabLocation, String pricipalName) throws IOException {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    SecureHadoopUser.login(keytabLocation, pricipalName);<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>  /* Concrete implementations */<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>   * Bridges {@code User} invocations to underlying calls to<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * {@link org.apache.hadoop.security.UserGroupInformation} for secure Hadoop<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * 0.20 and versions 0.21 and above.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  @InterfaceAudience.Private<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   public static final class SecureHadoopUser extends User {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    private String shortName;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private LoadingCache&lt;String, String[]&gt; cache;<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    public SecureHadoopUser() throws IOException {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      ugi = UserGroupInformation.getCurrentUser();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      this.cache = null;<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>    public SecureHadoopUser(UserGroupInformation ugi) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      this.ugi = ugi;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      this.cache = null;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>    public SecureHadoopUser(UserGroupInformation ugi,<a name="line.275"></a>
-<span class="sourceLineNo">276</span>                            LoadingCache&lt;String, String[]&gt; cache) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.ugi = ugi;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      this.cache = cache;<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>    @Override<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    public String getShortName() {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      if (shortName != null) return shortName;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        shortName = ugi.getShortUserName();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        return shortName;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      } catch (Exception e) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        throw new RuntimeException("Unexpected error getting user short name",<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          e);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>    @Override<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    public String[] getGroupNames() {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      if (cache != null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        try {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          return this.cache.get(getShortName());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        } catch (ExecutionException e) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          return new String[0];<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>      return ugi.getGroupNames();<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>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    public &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      return ugi.doAs(action);<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>    @Override<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    public &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        throws IOException, InterruptedException {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      return ugi.doAs(action);<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>
-<span class="sourceLineNo">316</span>    /** @see User#createUserForTesting(org.apache.hadoop.conf.Configuration, String, String[]) */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    public static User createUserForTesting(Configuration conf,<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        String name, String[] groups) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      synchronized (UserProvider.class) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        if (!(UserProvider.groups instanceof TestingGroups)) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          UserProvider.groups = new TestingGroups(UserProvider.groups);<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>      ((TestingGroups)UserProvider.groups).setUserGroups(name, groups);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      return new SecureHadoopUser(UserGroupInformation.createUserForTesting(name, groups));<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>     * Obtain credentials for the current process using the configured<a name="line.330"></a>
-<span class="sourceLineNo">331</span>     * Kerberos keytab file and principal.<a name="line.331"></a>
-<span class="sourceLineNo">332</span>     * @see User#login(org.apache.hadoop.conf.Configuration, String, String, String)<a name="line.332"></a>
-<span class="sourceLineNo">333</span>     *<a name="line.333"></a>
-<span class="sourceLineNo">334</span>     * @param conf the Configuration to use<a name="line.334"></a>
-<span class="sourceLineNo">335</span>     * @param fileConfKey Configuration property key used to store the path<a name="line.335"></a>
-<span class="sourceLineNo">336</span>     * to the keytab file<a name="line.336"></a>
-<span class="sourceLineNo">337</span>     * @param principalConfKey Configuration property key used to store the<a name="line.337"></a>
-<span class="sourceLineNo">338</span>     * principal name to login as<a name="line.338"></a>
-<span class="sourceLineNo">339</span>     * @param localhost the local hostname<a name="line.339"></a>
-<span class="sourceLineNo">340</span>     */<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public static void login(Configuration conf, String fileConfKey,<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        String principalConfKey, String localhost) throws IOException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      if (isSecurityEnabled()) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        SecurityUtil.login(conf, fileConfKey, principalConfKey, localhost);<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><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     * Returns the result of {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>     */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    public static boolean isSecurityEnabled() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      return UserGroupInformation.isSecurityEnabled();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    }<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>  static class TestingGroups extends Groups {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    private final Map&lt;String, List&lt;String&gt;&gt; userToGroupsMapping = new HashMap&lt;&gt;();<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    private Groups underlyingImplementation;<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    TestingGroups(Groups underlyingImplementation) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      super(new Configuration());<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      this.underlyingImplementation = underlyingImplementation;<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>    @Override<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    public List&lt;String&gt; getGroups(String user) throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      List&lt;String&gt; result = userToGroupsMapping.get(user);<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>      if (result == null) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        result = underlyingImplementation.getGroups(user);<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 result;<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 void setUserGroups(String user, String[] groups) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      userToGroupsMapping.put(user, Arrays.asList(groups));<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">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Returns whether or not Kerberos authentication is configured for Hadoop.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * For non-secure Hadoop, this always returns &lt;code&gt;false&lt;/code&gt;.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * For secure Hadoop, it will return the value from<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  public static boolean isSecurityEnabled() {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    return SecureHadoopUser.isSecurityEnabled();<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>  /**<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * Returns whether or not secure authentication is enabled for HBase. Note that<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * HBase security requires HDFS security to provide any guarantees, so it is<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * recommended that secure HBase should run on secure HDFS.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public static boolean isHBaseSecurityEnabled(Configuration conf) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    return "kerberos".equalsIgnoreCase(conf.get(HBASE_SECURITY_CONF_KEY));<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>   * In secure environment, if a user specified his keytab and principal,<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * a hbase client will try to login with them. Otherwise, hbase client will try to obtain<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * ticket(through kinit) from system.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @param conf configuration file<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @return true if keytab and principal are configured<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public static boolean shouldLoginFromKeytab(Configuration conf) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    Optional&lt;String&gt; keytab =<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      Optional.ofNullable(conf.get(AuthUtil.HBASE_CLIENT_KEYTAB_FILE));<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    Optional&lt;String&gt; principal =<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      Optional.ofNullable(conf.get(AuthUtil.HBASE_CLIENT_KERBEROS_PRINCIPAL));<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    return keytab.isPresent() &amp;&amp; principal.isPresent();<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>  /* Concrete implementations */<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>   * Bridges {@code User} invocations to underlying calls to<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * {@link org.apache.hadoop.security.UserGroupInformation} for secure Hadoop<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * 0.20 and versions 0.21 and above.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  @InterfaceAudience.Private<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   public static final class SecureHadoopUser extends User {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    private String shortName;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    private LoadingCache&lt;String, String[]&gt; cache;<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    public SecureHadoopUser() throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      ugi = UserGroupInformation.getCurrentUser();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      this.cache = null;<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>    public SecureHadoopUser(UserGroupInformation ugi) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      this.ugi = ugi;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      this.cache = null;<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>    public SecureHadoopUser(UserGroupInformation ugi,<a name="line.309"></a>
+<span class="sourceLineNo">310</span>                            LoadingCache&lt;String, String[]&gt; cache) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      this.ugi = ugi;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      this.cache = cache;<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>    @Override<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    public String getShortName() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      if (shortName != null) return shortName;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      try {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        shortName = ugi.getShortUserName();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        return shortName;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      } catch (Exception e) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        throw new RuntimeException("Unexpected error getting user short name",<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          e);<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>    @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public String[] getGroupNames() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      if (cache != null) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          return this.cache.get(getShortName());<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        } catch (ExecutionException e) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          return new String[0];<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>      return ugi.getGroupNames();<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>    @Override<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    public &lt;T&gt; T runAs(PrivilegedAction&lt;T&gt; action) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return ugi.doAs(action);<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 &lt;T&gt; T runAs(PrivilegedExceptionAction&lt;T&gt; action)<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        throws IOException, InterruptedException {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      return ugi.doAs(action);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    /** @see User#createUserForTesting(org.apache.hadoop.conf.Configuration, String, String[]) */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public static User createUserForTesting(Configuration conf,<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        String name, String[] groups) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      synchronized (UserProvider.class) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        if (!(UserProvider.groups instanceof TestingGroups)) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          UserProvider.groups = new TestingGroups(UserProvider.groups);<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">359</span>      ((TestingGroups)UserProvider.groups).setUserGroups(name, groups);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      return new SecureHadoopUser(UserGroupInformation.createUserForTesting(name, groups));<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>     * Obtain credentials for the current process using the configured<a name="line.364"></a>
+<span class="sourceLineNo">365</span>     * Kerberos keytab file and principal.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>     * @see User#login(org.apache.hadoop.conf.Configuration, String, String, String)<a name="line.366"></a>
+<span class="sourceLineNo">367</span>     *<a name="line.367"></a>
+<span class="sourceLineNo">368</span>     * @param conf the Configuration to use<a name="line.368"></a>
+<span class="sourceLineNo">369</span>     * @param fileConfKey Configuration property key used to store the path<a name="line.369"></a>
+<span class="sourceLineNo">370</span>     * to the keytab file<a name="line.370"></a>
+<span class="sourceLineNo">371</span>     * @param principalConfKey Configuration property key used to store the<a name="line.371"></a>
+<span class="sourceLineNo">372</span>     * principal name to login as<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * @param localhost the local hostname<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    public static void login(Configuration conf, String fileConfKey,<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        String principalConfKey, String localhost) throws IOException {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      if (isSecurityEnabled()) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        SecurityUtil.login(conf, fileConfKey, principalConfKey, localhost);<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>    /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span>     * Login through configured keytab and pricipal.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>     * @param keytabLocation location of keytab<a name="line.384"></a>
+<span class="sourceLineNo">385</span>     * @param principalName principal in keytab<a name="line.385"></a>
+<span class="sourceLineNo">386</span>     * @throws IOException exception from UserGroupInformation.loginUserFromKeytab<a name="line.386"></a>
+<span class="sourceLineNo">387</span>     */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    public static void login(String keytabLocation, String principalName)<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        throws IOException {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      if (isSecurityEnabled()) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        UserGroupInformation.loginUserFromKeytab(principalName, keytabLocation);<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>    /**<a name="line.395"></a>
+<span class="sourceLineNo">396</span>     * Returns the result of {@code UserGroupInformation.isSecurityEnabled()}.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>     */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    public static boolean isSecurityEnabled() {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      return UserGroupInformation.isSecurityEnabled();<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>  static class TestingGroups extends Groups {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    private final Map&lt;String, List&lt;String&gt;&gt; userToGroupsMapping = new HashMap&lt;&gt;();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    private Groups underlyingImplementation;<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>    TestingGroups(Groups underlyingImplementation) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      super(new Configuration());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      this.underlyingImplementation = underlyingImplementation;<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 List&lt;String&gt; getGroups(String user) throws IOException {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      List&lt;String&gt; result = userToGroupsMapping.get(user);<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>      if (result == null) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        result = underlyingImplementation.getGroups(user);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>      return result;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>    private void setUserGroups(String user, String[] groups) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      userToGroupsMapping.put(user, Arrays.asList(groups));<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>}<a name="line.427"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index f257bb8..b6ca9f7 100644
--- a/book.html
+++ b/book.html
@@ -11664,7 +11664,30 @@ Otherwise, you would be using strong authentication for HBase but not for the un
 </div>
 </div>
 <div class="paragraph">
-<p>The client environment must be logged in to Kerberos from KDC or keytab via the <code>kinit</code> command before communication with the HBase cluster will be possible.</p>
+<p>Before 2.2.0 version, the client environment must be logged in to Kerberos from KDC or keytab via the <code>kinit</code> command before communication with the HBase cluster will be possible.</p>
+</div>
+<div class="paragraph">
+<p>Since 2.2.0, client can specify the following configurations in <code>hbase-site.xml</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;property&gt;</span>
+  <span class="tag">&lt;name&gt;</span>hbase.client.keytab.file<span class="tag">&lt;/name&gt;</span>
+  <span class="tag">&lt;value&gt;</span>/local/path/to/client/keytab<span class="tag">&lt;/value&gt;</span>
+<span class="tag">&lt;/property&gt;</span>
+
+<span class="tag">&lt;property&gt;</span>
+  <span class="tag">&lt;name&gt;</span>hbase.client.keytab.principal<span class="tag">&lt;/name&gt;</span>
+  <span class="tag">&lt;value&gt;</span>foo@EXAMPLE.COM<span class="tag">&lt;/value&gt;</span>
+<span class="tag">&lt;/property&gt;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Then application can automatically do the login and credential renewal jobs without client interference.</p>
+</div>
+<div class="paragraph">
+<p>It&#8217;s optional feature, client, who upgrades to 2.2.0, can still keep their login and credential renewal logic already did in older version, as long as keeping <code>hbase.client.keytab.file</code>
+and <code>hbase.client.keytab.principal</code> are unset.</p>
 </div>
 <div class="paragraph">
 <p>Be advised that if the <code>hbase.security.authentication</code> in the client- and server-side site files do not match, the client will not be able to communicate with the cluster.</p>
@@ -30029,9 +30052,12 @@ To restore the data, the <a href="#import">import</a> utility would be used.</p>
 <h2 id="ops.snapshots"><a class="anchor" href="#ops.snapshots"></a>157. HBase Snapshots</h2>
 <div class="sectionbody">
 <div class="paragraph">
-<p>HBase Snapshots allow you to take a snapshot of a table without too much impact on Region Servers.
-Snapshot, Clone and restore operations don&#8217;t involve data copying.
-Also, Exporting the snapshot to another cluster doesn&#8217;t have impact on the Region Servers.</p>
+<p>HBase Snapshots allow you to take a copy of a table (both contents and metadata)with a very small performance impact. A Snapshot is an immutable
+collection of table metadata and a list of HFiles that comprised the table at the time the Snapshot was taken. A "clone"
+of a snapshot creates a new table from that snapshot, and a "restore" of a snapshot returns the contents of a table to
+what it was when the snapshot was created. The "clone" and "restore" operations do not require any data to be copied,
+as the underlying HFiles (the files which contain the data for an HBase table) are not modified with either action.
+Simiarly, exporting a snapshot to another cluster has little impact on RegionServers of the local cluster.</p>
 </div>
 <div class="paragraph">
 <p>Prior to version 0.94.6, the only way to backup or to clone a table is to use CopyTable/ExportTable, or to copy all the hfiles in HDFS after disabling the table.
@@ -40950,7 +40976,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-07-30 14:29:51 UTC
+Last updated 2018-07-31 14:29:56 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 12842a6..8f94ef0 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -306,7 +306,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-07-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-31</li>
             </p>
                 </div>
 


[19/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 77a8257..a9b1fe2 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -4585,14 +4585,22 @@
 <dd>&nbsp;</dd>
 <dt><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> - Class in <a href="org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#authService">authService</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncConnectionImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncConnectionImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ConnectionImplementation.html#authService">authService</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ConnectionImplementation.html" title="class in org.apache.hadoop.hbase.client">ConnectionImplementation</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/RpcServer.html#authTokenSecretMgr">authTokenSecretMgr</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/RpcServer.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">AuthUtil</span></a> - Class in <a href="org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></dt>
 <dd>
-<div class="block">Utility methods for helping with security tasks.</div>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>
+<div class="block"><span class="deprecationComment">since 2.2.0, to be removed in hbase-3.0.0.</span></div>
+</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#AuthUtil--">AuthUtil()</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">AuthUtil</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/RateLimiter.html#avail">avail</a></span> - Variable in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/RateLimiter.html" title="class in org.apache.hadoop.hbase.quotas">RateLimiter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/UnsafeAvailChecker.html#avail">avail</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/UnsafeAvailChecker.html" title="class in org.apache.hadoop.hbase.util">UnsafeAvailChecker</a></dt>
@@ -10773,6 +10781,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/SampleUploader.Uploader.html#checkpoint">checkpoint</a></span> - Variable in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/SampleUploader.Uploader.html" title="class in org.apache.hadoop.hbase.mapreduce">SampleUploader.Uploader</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#checkPrincipalMatch-org.apache.hadoop.conf.Configuration-java.lang.String-">checkPrincipalMatch(Configuration, 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>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html#checkQueuesDeleted-java.lang.String-">checkQueuesDeleted(String)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/DefaultOperationQuota.html#checkQuota-int-int-int-">checkQuota(int, int, int)</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/DefaultOperationQuota.html" title="class in org.apache.hadoop.hbase.quotas">DefaultOperationQuota</a></dt>
@@ -19584,6 +19596,10 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#createdTimestamp">createdTimestamp</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#createDummyStoppable--">createDummyStoppable()</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>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/KeyValue.html#createEmptyByteArray-int-int-int-long-org.apache.hadoop.hbase.KeyValue.Type-int-int-">createEmptyByteArray(int, int, int, long, KeyValue.Type, int, int)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a></dt>
 <dd>
 <div class="block">Create an empty byte[] representing a KeyValue
@@ -34896,7 +34912,9 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#getAuthChore-org.apache.hadoop.conf.Configuration-">getAuthChore(Configuration)</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>
 <dd>
-<div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>
+<div class="block"><span class="deprecationComment">Deprecated since 2.2.0, this method will be internal use only after 3.0.0.</span></div>
+</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/token/TokenProvider.html#getAuthenticationToken-com.google.protobuf.RpcController-org.apache.hadoop.hbase.protobuf.generated.AuthenticationProtos.GetAuthenticationTokenRequest-com.google.protobuf.RpcCallback-">getAuthenticationToken(RpcController, AuthenticationProtos.GetAuthenticationTokenRequest, RpcCallback&lt;AuthenticationProtos.GetAuthenticationTokenResponse&gt;)</a></span> - Method in class org.apache.hadoop.hbase.security.token.<a href="org/apache/hadoop/hbase/security/token/TokenProvider.html" title="class in org.apache.hadoop.hbase.security.token">TokenProvider</a></dt>
 <dd>&nbsp;</dd>
@@ -34914,6 +34932,11 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/ServerRpcConnection.html#getAuthorizedUgi-java.lang.String-">getAuthorizedUgi(String)</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/AuthUtil.html#getAuthRenewalChore-org.apache.hadoop.security.UserGroupInformation-">getAuthRenewalChore(UserGroupInformation)</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>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+<div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/VisibilityClient.html#getAuths-org.apache.hadoop.conf.Configuration-java.lang.String-">getAuths(Configuration, String)</a></span> - Static method in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/VisibilityClient.html" title="class in org.apache.hadoop.hbase.security.visibility">VisibilityClient</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
@@ -39866,6 +39889,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#getGroupName-java.lang.String-">getGroupName(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>
 <dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 <div class="block">Returns the actual name for a group principal (stripped of the
  group prefix).</div>
 </dd>
@@ -54507,6 +54531,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#GROUP_PREFIX">GROUP_PREFIX</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">AuthUtil</a></dt>
 <dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 <div class="block">Prefix character to denote group names</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#groupAdminServer">groupAdminServer</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>
@@ -56009,6 +56034,16 @@
 <dd>
 <div class="block">Parameter name for HBase client IPC pool type</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#HBASE_CLIENT_KERBEROS_PRINCIPAL">HBASE_CLIENT_KERBEROS_PRINCIPAL</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">AuthUtil</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+<div class="block">Client principal</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#HBASE_CLIENT_KEYTAB_FILE">HBASE_CLIENT_KEYTAB_FILE</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">AuthUtil</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+<div class="block">Client keytab file</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#HBASE_CLIENT_MAX_PERREGION_TASKS">HBASE_CLIENT_MAX_PERREGION_TASKS</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
 <dd>
 <div class="block">The maximum number of concurrent connections the client will maintain to a single
@@ -62930,6 +62965,7 @@
 <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>
 <dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 <div class="block">Returns whether or not the given name should be interpreted as a group
  principal.</div>
 </dd>
@@ -63171,6 +63207,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/LockStatus.html#isLockOwner-long-">isLockOwner(long)</a></span> - Method in interface org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/LockStatus.html" title="interface in org.apache.hadoop.hbase.procedure2">LockStatus</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.html#isLoginFromKeytab--">isLoginFromKeytab()</a></span> - Method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isLogSplittingDone-org.apache.hadoop.hbase.ServerName-boolean-">isLogSplittingDone(ServerName, boolean)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a></dt>
 <dd>
 <div class="block">
@@ -68056,7 +68094,9 @@
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AsyncMetaTableAccessor.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AsyncMetaTableAccessor.html" title="class in org.apache.hadoop.hbase">AsyncMetaTableAccessor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase">AuthUtil</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupDriver.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupDriver.html" title="class in org.apache.hadoop.hbase.backup">BackupDriver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupHFileCleaner.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupHFileCleaner.html" title="class in org.apache.hadoop.hbase.backup">BackupHFileCleaner</a></dt>
@@ -69565,28 +69605,54 @@
 <div class="block">Log in the current process using the given configuration keys for the
  credential file and login principal.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.html#login-java.lang.String-java.lang.String-">login(String, String)</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></dt>
+<dd>
+<div class="block">Login with the given keytab and principal.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#login-org.apache.hadoop.conf.Configuration-java.lang.String-java.lang.String-java.lang.String-">login(Configuration, String, String, String)</a></span> - Static method 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>
 <div class="block">Obtain credentials for the current process using the configured
  Kerberos keytab file and principal.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.SecureHadoopUser.html#login-java.lang.String-java.lang.String-">login(String, String)</a></span> - Static method 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>
+<div class="block">Login through configured keytab and pricipal.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/UserProvider.html#login-java.lang.String-java.lang.String-java.lang.String-">login(String, String, String)</a></span> - Method 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>
 <div class="block">Log in the current process using the given configuration keys for the credential file and login
  principal.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/UserProvider.html#login-java.lang.String-java.lang.String-">login(String, String)</a></span> - Method 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>
+<div class="block">Login with given keytab and principal.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html#login-org.apache.hadoop.conf.Configuration-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">login(Configuration, String, String, String, String, String)</a></span> - Static method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil</a></dt>
 <dd>
 <div class="block">Log in the current process using the given configuration keys for the
  credential file and login principal.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#loginClient-org.apache.hadoop.conf.Configuration-">loginClient(Configuration)</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>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+<div class="block">For kerberized cluster, return login user (from kinit or from keytab if specified).</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html#loginClient-org.apache.hadoop.conf.Configuration-java.lang.String-java.lang.String-java.lang.String-">loginClient(Configuration, String, String, String)</a></span> - Static method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil</a></dt>
 <dd>
 <div class="block">Log in the current zookeeper client using the given configuration
  keys for the credential file and login principal.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#loginClientAsService-org.apache.hadoop.conf.Configuration-">loginClientAsService(Configuration)</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>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+<div class="block">For kerberized cluster, return login user (from kinit or from keytab).</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.JaasConfiguration.html#loginContextName">loginContextName</a></span> - Variable in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.JaasConfiguration.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.JaasConfiguration</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#loginFromKeytabAndReturnUser-org.apache.hadoop.hbase.security.UserProvider-">loginFromKeytabAndReturnUser(UserProvider)</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>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
+&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html#loginServer-org.apache.hadoop.conf.Configuration-java.lang.String-java.lang.String-java.lang.String-">loginServer(Configuration, String, String, String)</a></span> - Static method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil</a></dt>
 <dd>
 <div class="block">Log in the current zookeeper server process using the given configuration
@@ -105139,6 +105205,16 @@ service.</div>
 <div class="block">If we make sure the block could not be cached, we will not acquire the lock
  otherwise we will acquire lock</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.html#shouldLoginFromKeytab-org.apache.hadoop.conf.Configuration-">shouldLoginFromKeytab(Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></dt>
+<dd>
+<div class="block">In secure environment, if a user specified his keytab and principal,
+ a hbase client will try to login with them.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/UserProvider.html#shouldLoginFromKeytab--">shouldLoginFromKeytab()</a></span> - Method 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>
+<div class="block">In secure environment, if a user specified his keytab and principal,
+ a hbase client will try to login with them.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/FilterListWithOR.html#shouldPassCurrentCellToFilter-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.filter.Filter.ReturnCode-">shouldPassCurrentCellToFilter(Cell, Cell, Filter.ReturnCode)</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/FilterListWithOR.html" title="class in org.apache.hadoop.hbase.filter">FilterListWithOR</a></dt>
 <dd>
 <div class="block">For MUST_PASS_ONE, we cannot make sure that when filter-A in filter list return NEXT_COL then
@@ -107621,6 +107697,10 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseInterfaceAudience.html#SPARK">SPARK</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseInterfaceAudience.html" title="class in org.apache.hadoop.hbase">HBaseInterfaceAudience</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#spawnRenewalChore-org.apache.hadoop.security.UserGroupInformation-">spawnRenewalChore(UserGroupInformation)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncConnectionImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncConnectionImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ConnectionImplementation.html#spawnRenewalChore-org.apache.hadoop.security.UserGroupInformation-">spawnRenewalChore(UserGroupInformation)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ConnectionImplementation.html" title="class in org.apache.hadoop.hbase.client">ConnectionImplementation</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/RegionSplitCalculator.html#specialEndKey-R-">specialEndKey(R)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/RegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSplitCalculator</a></dt>
 <dd>
 <div class="block">SPECIAL CASE wrapper for empty end key</div>
@@ -114142,6 +114222,7 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AuthUtil.html#toGroupEntry-java.lang.String-">toGroupEntry(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>
 <dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 <div class="block">Returns the group entry with the group prefix for a group principal.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupProtobufUtil.html#toGroupInfo-org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos.RSGroupInfo-">toGroupInfo(RSGroupProtos.RSGroupInfo)</a></span> - Static method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupProtobufUtil.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupProtobufUtil</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 04159f0..86e2a30 100644
--- a/devapidocs/org/apache/hadoop/hbase/AuthUtil.html
+++ b/devapidocs/org/apache/hadoop/hbase/AuthUtil.html
@@ -18,8 +18,8 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":41,"i1":41,"i2":41,"i3":41,"i4":41,"i5":41,"i6":41,"i7":41,"i8":41,"i9":41};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -108,9 +108,13 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <hr>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">since 2.2.0, to be removed in hbase-3.0.0.</span></div>
+</div>
 <br>
-<pre>@InterfaceAudience.Public
-public class <a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.70">AuthUtil</a>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
+ @InterfaceAudience.Public
+public final class <a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.79">AuthUtil</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">Utility methods for helping with security tasks. Downstream users
  may rely on this class to handle authenticating via keytab where
@@ -145,7 +149,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  </pre>
 
  See the "Running Canary in a Kerberos-enabled Cluster" section of the HBase Reference Guide for
- an example of configuring a user of this Auth Chore to run on a secure cluster.</div>
+ 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
+ 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>
 </ul>
 </div>
@@ -167,12 +176,29 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <tr class="altColor">
 <td class="colFirst"><code>private 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/AuthUtil.html#GROUP_PREFIX">GROUP_PREFIX</a></span></code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Prefix character to denote group names</div>
 </td>
 </tr>
 <tr class="rowColor">
+<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/AuthUtil.html#HBASE_CLIENT_KERBEROS_PRINCIPAL">HBASE_CLIENT_KERBEROS_PRINCIPAL</a></span></code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Client principal</div>
+</td>
+</tr>
+<tr 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/AuthUtil.html#HBASE_CLIENT_KEYTAB_FILE">HBASE_CLIENT_KEYTAB_FILE</a></span></code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Client keytab file</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.slf4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#LOG">LOG</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#LOG">LOG</a></span></code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -191,7 +217,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#AuthUtil--">AuthUtil</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#AuthUtil--">AuthUtil</a></span>()</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -203,34 +231,79 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </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="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<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="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t6" class="tableTab"><span><a href="javascript:show(32);">Deprecated 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 static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#checkPrincipalMatch-org.apache.hadoop.conf.Configuration-java.lang.String-">checkPrincipalMatch</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;loginUserName)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#createDummyStoppable--">createDummyStoppable</a></span>()</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#getAuthChore-org.apache.hadoop.conf.Configuration-">getAuthChore</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">Deprecated since 2.2.0, this method will be internal use only after 3.0.0.</span></div>
+</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#getAuthRenewalChore-org.apache.hadoop.security.UserGroupInformation-">getAuthRenewalChore</a></span>(org.apache.hadoop.security.UserGroupInformation&nbsp;user)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
 </td>
 </tr>
-<tr id="i1" class="rowColor">
+<tr id="i4" 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/AuthUtil.html#getGroupName-java.lang.String-">getGroupName</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;aclKey)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the actual name for a group principal (stripped of the
  group prefix).</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#isGroupPrincipal-java.lang.String-">isGroupPrincipal</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"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns whether or not the given name should be interpreted as a group
  principal.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#loginClient-org.apache.hadoop.conf.Configuration-">loginClient</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">For kerberized cluster, return login user (from kinit or from keytab if specified).</div>
+</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#loginClientAsService-org.apache.hadoop.conf.Configuration-">loginClientAsService</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">For kerberized cluster, return login user (from kinit or from keytab).</div>
+</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#loginFromKeytabAndReturnUser-org.apache.hadoop.hbase.security.UserProvider-">loginFromKeytabAndReturnUser</a></span>(<a href="../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;provider)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr id="i9" class="rowColor">
 <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/AuthUtil.html#toGroupEntry-java.lang.String-">toGroupEntry</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"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the group entry with the group prefix for a group principal.</div>
 </td>
 </tr>
@@ -262,16 +335,18 @@ 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/AuthUtil.html#line.71">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.81">LOG</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
 <a name="GROUP_PREFIX">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>GROUP_PREFIX</h4>
-<pre>private static 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> <a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.74">GROUP_PREFIX</a></pre>
+<pre>private static 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> <a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.84">GROUP_PREFIX</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Prefix character to denote group names</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -279,6 +354,36 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="HBASE_CLIENT_KEYTAB_FILE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>HBASE_CLIENT_KEYTAB_FILE</h4>
+<pre>public static 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> <a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.87">HBASE_CLIENT_KEYTAB_FILE</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Client keytab file</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.AuthUtil.HBASE_CLIENT_KEYTAB_FILE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="HBASE_CLIENT_KERBEROS_PRINCIPAL">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>HBASE_CLIENT_KERBEROS_PRINCIPAL</h4>
+<pre>public static 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> <a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.90">HBASE_CLIENT_KERBEROS_PRINCIPAL</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Client principal</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.AuthUtil.HBASE_CLIENT_KERBEROS_PRINCIPAL">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -293,7 +398,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AuthUtil</h4>
-<pre>private&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.76">AuthUtil</a>()</pre>
+<pre>private&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.92">AuthUtil</a>()</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
 </li>
@@ -304,14 +410,105 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="loginClient-org.apache.hadoop.conf.Configuration-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>loginClient</h4>
+<pre>@InterfaceAudience.Private
+public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.104">loginClient</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"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">For kerberized cluster, return login user (from kinit or from keytab if specified).
+ For non-kerberized cluster, return system user.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>conf</code> - configuartion file</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>user</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> - login exception</dd>
+</dl>
+</li>
+</ul>
+<a name="checkPrincipalMatch-org.apache.hadoop.conf.Configuration-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkPrincipalMatch</h4>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.132">checkPrincipalMatch</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;loginUserName)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+</li>
+</ul>
+<a name="loginFromKeytabAndReturnUser-org.apache.hadoop.hbase.security.UserProvider-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>loginFromKeytabAndReturnUser</h4>
+<pre>private static&nbsp;<a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.142">loginFromKeytabAndReturnUser</a>(<a href="../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;provider)
+                                          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="deprecatedLabel">Deprecated.</span>&nbsp;</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="loginClientAsService-org.apache.hadoop.conf.Configuration-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>loginClientAsService</h4>
+<pre>private static&nbsp;<a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.165">loginClientAsService</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"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">For kerberized cluster, return login user (from kinit or from keytab).
+ Principal should be the following format: name/fully.qualified.domain.name@REALM.
+ For non-kerberized cluster, return system user.
+ <p>
+ NOT recommend to use to method unless you're sure what you're doing, it is for canary only.
+ Please use User#loginClient.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>conf</code> - configuration file</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>user</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> - login exception</dd>
+</dl>
+</li>
+</ul>
+<a name="getAuthRenewalChore-org.apache.hadoop.security.UserGroupInformation-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getAuthRenewalChore</h4>
+<pre>@InterfaceAudience.Private
+public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.191">getAuthRenewalChore</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;user)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+<div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>a ScheduledChore for renewals.</dd>
+</dl>
+</li>
+</ul>
 <a name="getAuthChore-org.apache.hadoop.conf.Configuration-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getAuthChore</h4>
-<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.85">getAuthChore</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><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
+public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.220">getAuthChore</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"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Deprecated since 2.2.0, this method will be internal use only after 3.0.0.</span></div>
 <div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -323,6 +520,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="createDummyStoppable--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createDummyStoppable</h4>
+<pre>private static&nbsp;<a href="../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.226">createDummyStoppable</a>()</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+</li>
+</ul>
 <a name="isGroupPrincipal-java.lang.String-">
 <!--   -->
 </a>
@@ -330,7 +537,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>isGroupPrincipal</h4>
 <pre>@InterfaceAudience.Private
-public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.146">isGroupPrincipal</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>
+public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.248">isGroupPrincipal</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"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns whether or not the given name should be interpreted as a group
  principal.  Currently this simply checks if the name starts with the
  special group prefix character ("@").</div>
@@ -343,7 +551,8 @@ public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/
 <li class="blockList">
 <h4>getGroupName</h4>
 <pre>@InterfaceAudience.Private
-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/AuthUtil.html#line.155">getGroupName</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;aclKey)</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/AuthUtil.html#line.257">getGroupName</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;aclKey)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the actual name for a group principal (stripped of the
  group prefix).</div>
 </li>
@@ -355,7 +564,8 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <li class="blockList">
 <h4>toGroupEntry</h4>
 <pre>@InterfaceAudience.Private
-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/AuthUtil.html#line.167">toGroupEntry</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>
+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/AuthUtil.html#line.269">toGroupEntry</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"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the group entry with the group prefix for a group principal.</div>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 f11e74d..44aeebe 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -168,8 +168,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.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>
 <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>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/class-use/ChoreService.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ChoreService.html b/devapidocs/org/apache/hadoop/hbase/class-use/ChoreService.html
index 1d3d90c..4210012 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ChoreService.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ChoreService.html
@@ -87,18 +87,24 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.client">org.apache.hadoop.hbase.client</a></td>
+<td class="colLast">
+<div class="block">Provides HBase Client</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.master">org.apache.hadoop.hbase.master</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver">org.apache.hadoop.hbase.regionserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -125,6 +131,28 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.client">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a> in <a href="../../../../../org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</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/client/package-summary.html">org.apache.hadoop.hbase.client</a> declared as <a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</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/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ConnectionImplementation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#authService">authService</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AsyncConnectionImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html#authService">authService</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.master">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html b/devapidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
index fe3cc29..ecb28b9 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
@@ -166,6 +166,15 @@
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AuthUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/AuthUtil.html#getAuthChore-org.apache.hadoop.conf.Configuration-">getAuthChore</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">Deprecated since 2.2.0, this method will be internal use only after 3.0.0.</span></div>
+</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AuthUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/AuthUtil.html#getAuthRenewalChore-org.apache.hadoop.security.UserGroupInformation-">getAuthRenewalChore</a></span>(org.apache.hadoop.security.UserGroupInformation&nbsp;user)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
 </td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html b/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
index 60fabe9..f7b3ad5 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
@@ -216,6 +216,12 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AuthUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/AuthUtil.html#createDummyStoppable--">createDummyStoppable</a></span>()</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
+&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></td>
 <td class="colLast"><span class="typeNameLabel">ScheduledChore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#getStopper--">getStopper</a></span>()</code>&nbsp;</td>
 </tr>


[22/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 21d8326..ef9d7be 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="20180730" />
+    <meta name="Date-Revision-yyyymmdd" content="20180731" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -284,7 +284,7 @@
 <td>3697</td>
 <td>0</td>
 <td>0</td>
-<td>15629</td></tr></table></div>
+<td>15627</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -304,9486 +304,9481 @@
 <td>0</td>
 <td>25</td></tr>
 <tr class="b">
-<td><a href="#org.apache.hadoop.hbase.AuthUtil.java">org/apache/hadoop/hbase/AuthUtil.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>2</td></tr>
-<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.BBKVComparator.java">org/apache/hadoop/hbase/BBKVComparator.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.ByteBufferKeyOnlyKeyValue.java">org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.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.Cell.java">org/apache/hadoop/hbase/Cell.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.CellBuilderFactory.java">org/apache/hadoop/hbase/CellBuilderFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.CellComparator.java">org/apache/hadoop/hbase/CellComparator.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.CellComparatorImpl.java">org/apache/hadoop/hbase/CellComparatorImpl.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.CellScanner.java">org/apache/hadoop/hbase/CellScanner.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.CellUtil.java">org/apache/hadoop/hbase/CellUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>67</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ChoreService.java">org/apache/hadoop/hbase/ChoreService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ClassFinder.java">org/apache/hadoop/hbase/ClassFinder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ClusterId.java">org/apache/hadoop/hbase/ClusterId.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ClusterManager.java">org/apache/hadoop/hbase/ClusterManager.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.ClusterStatus.java">org/apache/hadoop/hbase/ClusterStatus.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.CompoundConfiguration.java">org/apache/hadoop/hbase/CompoundConfiguration.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.CoordinatedStateManager.java">org/apache/hadoop/hbase/CoordinatedStateManager.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.Coprocessor.java">org/apache/hadoop/hbase/Coprocessor.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.DistributedHBaseCluster.java">org/apache/hadoop/hbase/DistributedHBaseCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.DoNotRetryIOException.java">org/apache/hadoop/hbase/DoNotRetryIOException.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.DroppedSnapshotException.java">org/apache/hadoop/hbase/DroppedSnapshotException.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.ExtendedCell.java">org/apache/hadoop/hbase/ExtendedCell.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.GenericTestUtils.java">org/apache/hadoop/hbase/GenericTestUtils.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.HBaseClassTestRuleChecker.java">org/apache/hadoop/hbase/HBaseClassTestRuleChecker.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.HBaseCluster.java">org/apache/hadoop/hbase/HBaseCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.HBaseClusterManager.java">org/apache/hadoop/hbase/HBaseClusterManager.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.HBaseCommonTestingUtility.java">org/apache/hadoop/hbase/HBaseCommonTestingUtility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.HBaseConfiguration.java">org/apache/hadoop/hbase/HBaseConfiguration.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.HBaseTestCase.java">org/apache/hadoop/hbase/HBaseTestCase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.HBaseTestingUtility.java">org/apache/hadoop/hbase/HBaseTestingUtility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>276</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.HColumnDescriptor.java">org/apache/hadoop/hbase/HColumnDescriptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.HFilePerformanceEvaluation.java">org/apache/hadoop/hbase/HFilePerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.HRegionInfo.java">org/apache/hadoop/hbase/HRegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>59</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.HRegionLocation.java">org/apache/hadoop/hbase/HRegionLocation.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.HTableDescriptor.java">org/apache/hadoop/hbase/HTableDescriptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>38</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.HTestConst.java">org/apache/hadoop/hbase/HTestConst.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.HealthChecker.java">org/apache/hadoop/hbase/HealthChecker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.IndividualBytesFieldCell.java">org/apache/hadoop/hbase/IndividualBytesFieldCell.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.IntegrationTestBackupRestore.java">org/apache/hadoop/hbase/IntegrationTestBackupRestore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.IntegrationTestDDLMasterFailover.java">org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>52</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.IntegrationTestIngest.java">org/apache/hadoop/hbase/IntegrationTestIngest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.IntegrationTestIngestWithACL.java">org/apache/hadoop/hbase/IntegrationTestIngestWithACL.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.IntegrationTestIngestWithEncryption.java">org/apache/hadoop/hbase/IntegrationTestIngestWithEncryption.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.IntegrationTestIngestWithMOB.java">org/apache/hadoop/hbase/IntegrationTestIngestWithMOB.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.IntegrationTestIngestWithVisibilityLabels.java">org/apache/hadoop/hbase/IntegrationTestIngestWithVisibilityLabels.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.IntegrationTestManyRegions.java">org/apache/hadoop/hbase/IntegrationTestManyRegions.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.IntegrationTestMetaReplicas.java">org/apache/hadoop/hbase/IntegrationTestMetaReplicas.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.IntegrationTestRegionReplicaPerf.java">org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.IntegrationTestingUtility.java">org/apache/hadoop/hbase/IntegrationTestingUtility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.KeyValue.java">org/apache/hadoop/hbase/KeyValue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>117</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.KeyValueTestUtil.java">org/apache/hadoop/hbase/KeyValueTestUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.KeyValueUtil.java">org/apache/hadoop/hbase/KeyValueUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.LocalHBaseCluster.java">org/apache/hadoop/hbase/LocalHBaseCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>32</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.MetaMockingUtil.java">org/apache/hadoop/hbase/MetaMockingUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.MetaMutationAnnotation.java">org/apache/hadoop/hbase/MetaMutationAnnotation.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.MetaTableAccessor.java">org/apache/hadoop/hbase/MetaTableAccessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>66</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.MiniHBaseCluster.java">org/apache/hadoop/hbase/MiniHBaseCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.MockRegionServerServices.java">org/apache/hadoop/hbase/MockRegionServerServices.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.MultithreadedTestUtil.java">org/apache/hadoop/hbase/MultithreadedTestUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.NamespaceDescriptor.java">org/apache/hadoop/hbase/NamespaceDescriptor.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.NotAllMetaRegionsOnlineException.java">org/apache/hadoop/hbase/NotAllMetaRegionsOnlineException.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.NotServingRegionException.java">org/apache/hadoop/hbase/NotServingRegionException.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.PerformanceEvaluation.java">org/apache/hadoop/hbase/PerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>39</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.PerformanceEvaluationCommons.java">org/apache/hadoop/hbase/PerformanceEvaluationCommons.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.PrivateCellUtil.java">org/apache/hadoop/hbase/PrivateCellUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>67</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.QosTestHelper.java">org/apache/hadoop/hbase/QosTestHelper.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.RESTApiClusterManager.java">org/apache/hadoop/hbase/RESTApiClusterManager.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.RegionLoad.java">org/apache/hadoop/hbase/RegionLoad.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.RegionLocations.java">org/apache/hadoop/hbase/RegionLocations.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.RegionStateListener.java">org/apache/hadoop/hbase/RegionStateListener.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.ResourceChecker.java">org/apache/hadoop/hbase/ResourceChecker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ScanPerformanceEvaluation.java">org/apache/hadoop/hbase/ScanPerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ScheduledChore.java">org/apache/hadoop/hbase/ScheduledChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.Server.java">org/apache/hadoop/hbase/Server.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.ServerLoad.java">org/apache/hadoop/hbase/ServerLoad.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.ServerName.java">org/apache/hadoop/hbase/ServerName.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.SplitLogCounters.java">org/apache/hadoop/hbase/SplitLogCounters.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.SplitLogTask.java">org/apache/hadoop/hbase/SplitLogTask.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.StripeCompactionsPerformanceEvaluation.java">org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.TableDescriptors.java">org/apache/hadoop/hbase/TableDescriptors.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TableInfoMissingException.java">org/apache/hadoop/hbase/TableInfoMissingException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.TableName.java">org/apache/hadoop/hbase/TableName.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TableNotDisabledException.java">org/apache/hadoop/hbase/TableNotDisabledException.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.TableNotEnabledException.java">org/apache/hadoop/hbase/TableNotEnabledException.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.TableNotFoundException.java">org/apache/hadoop/hbase/TableNotFoundException.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.TagType.java">org/apache/hadoop/hbase/TagType.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.TestCellUtil.java">org/apache/hadoop/hbase/TestCellUtil.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.TestCheckTestClasses.java">org/apache/hadoop/hbase/TestCheckTestClasses.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.TestClassFinder.java">org/apache/hadoop/hbase/TestClassFinder.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.TestClientClusterStatus.java">org/apache/hadoop/hbase/TestClientClusterStatus.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.TestClientOperationTimeout.java">org/apache/hadoop/hbase/TestClientOperationTimeout.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.TestClusterPortAssignment.java">org/apache/hadoop/hbase/TestClusterPortAssignment.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.TestFSTableDescriptorForceCreation.java">org/apache/hadoop/hbase/TestFSTableDescriptorForceCreation.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.TestGlobalMemStoreSize.java">org/apache/hadoop/hbase/TestGlobalMemStoreSize.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TestHBaseConfiguration.java">org/apache/hadoop/hbase/TestHBaseConfiguration.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.TestHBaseTestingUtility.java">org/apache/hadoop/hbase/TestHBaseTestingUtility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TestHColumnDescriptor.java">org/apache/hadoop/hbase/TestHColumnDescriptor.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.TestHColumnDescriptorDefaultVersions.java">org/apache/hadoop/hbase/TestHColumnDescriptorDefaultVersions.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.TestHTableDescriptor.java">org/apache/hadoop/hbase/TestHTableDescriptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.TestIOFencing.java">org/apache/hadoop/hbase/TestIOFencing.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.TestInfoServers.java">org/apache/hadoop/hbase/TestInfoServers.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.TestJMXConnectorServer.java">org/apache/hadoop/hbase/TestJMXConnectorServer.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.TestKeyValue.java">org/apache/hadoop/hbase/TestKeyValue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.TestLocalHBaseCluster.java">org/apache/hadoop/hbase/TestLocalHBaseCluster.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.TestMetaTableAccessor.java">org/apache/hadoop/hbase/TestMetaTableAccessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.TestMetaTableAccessorNoCluster.java">org/apache/hadoop/hbase/TestMetaTableAccessorNoCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TestMetaTableLocator.java">org/apache/hadoop/hbase/TestMetaTableLocator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>41</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.TestMovedRegionsCleaner.java">org/apache/hadoop/hbase/TestMovedRegionsCleaner.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.TestMultiVersions.java">org/apache/hadoop/hbase/TestMultiVersions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.TestNamespace.java">org/apache/hadoop/hbase/TestNamespace.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.TestNodeHealthCheckChore.java">org/apache/hadoop/hbase/TestNodeHealthCheckChore.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.TestPartialResultsFromClientSide.java">org/apache/hadoop/hbase/TestPartialResultsFromClientSide.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TestPerformanceEvaluation.java">org/apache/hadoop/hbase/TestPerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.TestRegionRebalancing.java">org/apache/hadoop/hbase/TestRegionRebalancing.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TestSerialization.java">org/apache/hadoop/hbase/TestSerialization.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.TestServerSideScanMetricsFromClientSide.java">org/apache/hadoop/hbase/TestServerSideScanMetricsFromClientSide.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TestStochasticBalancerJmxMetrics.java">org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.TestTimeout.java">org/apache/hadoop/hbase/TestTimeout.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TimestampTestBase.java">org/apache/hadoop/hbase/TimestampTestBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.UnknownRegionException.java">org/apache/hadoop/hbase/UnknownRegionException.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.Waiter.java">org/apache/hadoop/hbase/Waiter.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.ZKNamespaceManager.java">org/apache/hadoop/hbase/ZKNamespaceManager.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.ZNodeClearer.java">org/apache/hadoop/hbase/ZNodeClearer.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.backup.BackupDriver.java">org/apache/hadoop/hbase/backup/BackupDriver.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.backup.FailedArchiveException.java">org/apache/hadoop/hbase/backup/FailedArchiveException.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.backup.HFileArchiver.java">org/apache/hadoop/hbase/backup/HFileArchiver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.backup.TestBackupMerge.java">org/apache/hadoop/hbase/backup/TestBackupMerge.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.backup.TestHFileArchiving.java">org/apache/hadoop/hbase/backup/TestHFileArchiving.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.backup.example.HFileArchiveManager.java">org/apache/hadoop/hbase/backup/example/HFileArchiveManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.backup.example.LongTermArchivingHFileCleaner.java">org/apache/hadoop/hbase/backup/example/LongTermArchivingHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.backup.example.TableHFileArchiveTracker.java">org/apache/hadoop/hbase/backup/example/TableHFileArchiveTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.backup.example.TestZooKeeperTableArchiveClient.java">org/apache/hadoop/hbase/backup/example/TestZooKeeperTableArchiveClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.backup.example.ZKTableArchiveClient.java">org/apache/hadoop/hbase/backup/example/ZKTableArchiveClient.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.backup.impl.BackupCommands.java">org/apache/hadoop/hbase/backup/impl/BackupCommands.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.backup.impl.BackupManager.java">org/apache/hadoop/hbase/backup/impl/BackupManager.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.backup.impl.BackupSystemTable.java">org/apache/hadoop/hbase/backup/impl/BackupSystemTable.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.chaos.actions.Action.java">org/apache/hadoop/hbase/chaos/actions/Action.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.chaos.actions.ChangeCompressionAction.java">org/apache/hadoop/hbase/chaos/actions/ChangeCompressionAction.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.chaos.actions.ChangeEncodingAction.java">org/apache/hadoop/hbase/chaos/actions/ChangeEncodingAction.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.chaos.actions.ChangeSplitPolicyAction.java">org/apache/hadoop/hbase/chaos/actions/ChangeSplitPolicyAction.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.chaos.actions.ChangeVersionsAction.java">org/apache/hadoop/hbase/chaos/actions/ChangeVersionsAction.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.chaos.actions.RestartRandomDataNodeAction.java">org/apache/hadoop/hbase/chaos/actions/RestartRandomDataNodeAction.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.chaos.actions.RollingBatchRestartRsAction.java">org/apache/hadoop/hbase/chaos/actions/RollingBatchRestartRsAction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.chaos.actions.SplitAllRegionOfTableAction.java">org/apache/hadoop/hbase/chaos/actions/SplitAllRegionOfTableAction.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.chaos.actions.TruncateTableAction.java">org/apache/hadoop/hbase/chaos/actions/TruncateTableAction.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.chaos.factories.MasterKillingMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/MasterKillingMonkeyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.chaos.factories.MobNoKillMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/MobNoKillMonkeyFactory.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.chaos.factories.MobSlowDeterministicMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/MobSlowDeterministicMonkeyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.chaos.factories.MonkeyConstants.java">org/apache/hadoop/hbase/chaos/factories/MonkeyConstants.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.chaos.factories.MonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/MonkeyFactory.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.chaos.factories.NoKillMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/NoKillMonkeyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.chaos.factories.ServerKillingMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/ServerKillingMonkeyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.chaos.factories.SlowDeterministicMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/SlowDeterministicMonkeyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>42</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.chaos.factories.StressAssignmentManagerMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/StressAssignmentManagerMonkeyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.chaos.monkies.PolicyBasedChaosMonkey.java">org/apache/hadoop/hbase/chaos/monkies/PolicyBasedChaosMonkey.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.chaos.policies.PeriodicPolicy.java">org/apache/hadoop/hbase/chaos/policies/PeriodicPolicy.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.chaos.policies.TwoConcurrentActionPolicy.java">org/apache/hadoop/hbase/chaos/policies/TwoConcurrentActionPolicy.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.client.AbstractClientScanner.java">org/apache/hadoop/hbase/client/AbstractClientScanner.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.client.AbstractResponse.java">org/apache/hadoop/hbase/client/AbstractResponse.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.client.Action.java">org/apache/hadoop/hbase/client/Action.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.client.Admin.java">org/apache/hadoop/hbase/client/Admin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>107</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.Append.java">org/apache/hadoop/hbase/client/Append.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.client.AsyncAdmin.java">org/apache/hadoop/hbase/client/AsyncAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.AsyncAdminBuilder.java">org/apache/hadoop/hbase/client/AsyncAdminBuilder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.AsyncAdminRequestRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.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.client.AsyncBatchRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncBatchRpcRetryingCaller.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.AsyncClientScanner.java">org/apache/hadoop/hbase/client/AsyncClientScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.AsyncConnectionConfiguration.java">org/apache/hadoop/hbase/client/AsyncConnectionConfiguration.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.client.AsyncConnectionImpl.java">org/apache/hadoop/hbase/client/AsyncConnectionImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.AsyncHBaseAdmin.java">org/apache/hadoop/hbase/client/AsyncHBaseAdmin.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.client.AsyncMasterRequestRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncMasterRequestRpcRetryingCaller.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.client.AsyncMetaRegionLocator.java">org/apache/hadoop/hbase/client/AsyncMetaRegionLocator.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.client.AsyncNonMetaRegionLocator.java">org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.AsyncProcess.java">org/apache/hadoop/hbase/client/AsyncProcess.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.AsyncProcessTask.java">org/apache/hadoop/hbase/client/AsyncProcessTask.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.client.AsyncRegionLocator.java">org/apache/hadoop/hbase/client/AsyncRegionLocator.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.client.AsyncRegistryFactory.java">org/apache/hadoop/hbase/client/AsyncRegistryFactory.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.client.AsyncRequestFuture.java">org/apache/hadoop/hbase/client/AsyncRequestFuture.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.client.AsyncRequestFutureImpl.java">org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.AsyncRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncRpcRetryingCaller.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.client.AsyncRpcRetryingCallerFactory.java">org/apache/hadoop/hbase/client/AsyncRpcRetryingCallerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.AsyncScanSingleRegionRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.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.client.AsyncServerRequestRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncServerRequestRpcRetryingCaller.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.client.AsyncSingleRequestRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncSingleRequestRpcRetryingCaller.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.AsyncTableImpl.java">org/apache/hadoop/hbase/client/AsyncTableImpl.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.client.AsyncTableResultScanner.java">org/apache/hadoop/hbase/client/AsyncTableResultScanner.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.client.BatchErrors.java">org/apache/hadoop/hbase/client/BatchErrors.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.client.BatchScanResultCache.java">org/apache/hadoop/hbase/client/BatchScanResultCache.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.client.BufferingScanResultConsumer.java">org/apache/hadoop/hbase/client/BufferingScanResultConsumer.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.client.CancellableRegionServerCallable.java">org/apache/hadoop/hbase/client/CancellableRegionServerCallable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.ClientAsyncPrefetchScanner.java">org/apache/hadoop/hbase/client/ClientAsyncPrefetchScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.ClientIdGenerator.java">org/apache/hadoop/hbase/client/ClientIdGenerator.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.client.ClientScanner.java">org/apache/hadoop/hbase/client/ClientScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.ClientServiceCallable.java">org/apache/hadoop/hbase/client/ClientServiceCallable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.ClientSideRegionScanner.java">org/apache/hadoop/hbase/client/ClientSideRegionScanner.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.client.ClientSimpleScanner.java">org/apache/hadoop/hbase/client/ClientSimpleScanner.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.client.ClientUtil.java">org/apache/hadoop/hbase/client/ClientUtil.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.client.ClusterConnection.java">org/apache/hadoop/hbase/client/ClusterConnection.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.client.ColumnCountOnRowFilter.java">org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.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.client.ColumnFamilyDescriptor.java">org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder.java">org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.CompactType.java">org/apache/hadoop/hbase/client/CompactType.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.client.CompleteScanResultCache.java">org/apache/hadoop/hbase/client/CompleteScanResultCache.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.client.ConnectionFactory.java">org/apache/hadoop/hbase/client/ConnectionFactory.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.client.ConnectionImplementation.java">org/apache/hadoop/hbase/client/ConnectionImplementation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.ConnectionUtils.java">org/apache/hadoop/hbase/client/ConnectionUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.DelayingRunner.java">org/apache/hadoop/hbase/client/DelayingRunner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.Delete.java">org/apache/hadoop/hbase/client/Delete.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.Get.java">org/apache/hadoop/hbase/client/Get.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.HBaseAdmin.java">org/apache/hadoop/hbase/client/HBaseAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>96</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.HConnectionTestingUtility.java">org/apache/hadoop/hbase/client/HConnectionTestingUtility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.HRegionLocator.java">org/apache/hadoop/hbase/client/HRegionLocator.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.client.HTable.java">org/apache/hadoop/hbase/client/HTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>51</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.HTableMultiplexer.java">org/apache/hadoop/hbase/client/HTableMultiplexer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.ImmutableHColumnDescriptor.java">org/apache/hadoop/hbase/client/ImmutableHColumnDescriptor.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.client.ImmutableHRegionInfo.java">org/apache/hadoop/hbase/client/ImmutableHRegionInfo.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.client.ImmutableHTableDescriptor.java">org/apache/hadoop/hbase/client/ImmutableHTableDescriptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.Increment.java">org/apache/hadoop/hbase/client/Increment.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.client.MasterCallable.java">org/apache/hadoop/hbase/client/MasterCallable.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.client.MasterCoprocessorRpcChannelImpl.java">org/apache/hadoop/hbase/client/MasterCoprocessorRpcChannelImpl.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.client.MasterKeepAliveConnection.java">org/apache/hadoop/hbase/client/MasterKeepAliveConnection.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.client.MetaCache.java">org/apache/hadoop/hbase/client/MetaCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.MetricsConnection.java">org/apache/hadoop/hbase/client/MetricsConnection.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>41</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.MultiAction.java">org/apache/hadoop/hbase/client/MultiAction.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.client.MultiResponse.java">org/apache/hadoop/hbase/client/MultiResponse.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.client.MultiServerCallable.java">org/apache/hadoop/hbase/client/MultiServerCallable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.Mutation.java">org/apache/hadoop/hbase/client/Mutation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>23</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.NoOpRetryableCallerInterceptor.java">org/apache/hadoop/hbase/client/NoOpRetryableCallerInterceptor.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.client.NoncedRegionServerCallable.java">org/apache/hadoop/hbase/client/NoncedRegionServerCallable.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.client.Operation.java">org/apache/hadoop/hbase/client/Operation.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.client.PackagePrivateFieldAccessor.java">org/apache/hadoop/hbase/client/PackagePrivateFieldAccessor.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.client.PreemptiveFastFailInterceptor.java">org/apache/hadoop/hbase/client/PreemptiveFastFailInterceptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.Put.java">org/apache/hadoop/hbase/client/Put.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.Query.java">org/apache/hadoop/hbase/client/Query.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.QuotaStatusCalls.java">org/apache/hadoop/hbase/client/QuotaStatusCalls.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.RawAsyncHBaseAdmin.java">org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>89</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.RegionAdminServiceCallable.java">org/apache/hadoop/hbase/client/RegionAdminServiceCallable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.RegionCoprocessorRpcChannel.java">org/apache/hadoop/hbase/client/RegionCoprocessorRpcChannel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.RegionCoprocessorRpcChannelImpl.java">org/apache/hadoop/hbase/client/RegionCoprocessorRpcChannelImpl.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.client.RegionCoprocessorServiceExec.java">org/apache/hadoop/hbase/client/RegionCoprocessorServiceExec.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.client.RegionInfo.java">org/apache/hadoop/hbase/client/RegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>57</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.RegionInfoBuilder.java">org/apache/hadoop/hbase/client/RegionInfoBuilder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.RegionInfoDisplay.java">org/apache/hadoop/hbase/client/RegionInfoDisplay.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.RegionLocator.java">org/apache/hadoop/hbase/client/RegionLocator.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.client.RegionReplicaUtil.java">org/apache/hadoop/hbase/client/RegionReplicaUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.RegionServerCallable.java">org/apache/hadoop/hbase/client/RegionServerCallable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.RegionServerCoprocessorRpcChannelImpl.java">org/apache/hadoop/hbase/client/RegionServerCoprocessorRpcChannelImpl.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.client.RequestController.java">org/apache/hadoop/hbase/client/RequestController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.RequestControllerFactory.java">org/apache/hadoop/hbase/client/RequestControllerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.Result.java">org/apache/hadoop/hbase/client/Result.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.ResultBoundedCompletionService.java">org/apache/hadoop/hbase/client/ResultBoundedCompletionService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.ResultScanner.java">org/apache/hadoop/hbase/client/ResultScanner.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.client.RetriesExhaustedException.java">org/apache/hadoop/hbase/client/RetriesExhaustedException.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.client.RetriesExhaustedWithDetailsException.java">org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.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.client.RetryingCallerInterceptor.java">org/apache/hadoop/hbase/client/RetryingCallerInterceptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.ReversedClientScanner.java">org/apache/hadoop/hbase/client/ReversedClientScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.ReversedScannerCallable.java">org/apache/hadoop/hbase/client/ReversedScannerCallable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.RowAccess.java">org/apache/hadoop/hbase/client/RowAccess.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.client.RowMutations.java">org/apache/hadoop/hbase/client/RowMutations.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.client.RpcRetryingCaller.java">org/apache/hadoop/hbase/client/RpcRetryingCaller.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.client.RpcRetryingCallerImpl.java">org/apache/hadoop/hbase/client/RpcRetryingCallerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.java">org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.Scan.java">org/apache/hadoop/hbase/client/Scan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.ScannerCallable.java">org/apache/hadoop/hbase/client/ScannerCallable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.java">org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.SecureBulkLoadClient.java">org/apache/hadoop/hbase/client/SecureBulkLoadClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.ServerStatisticTracker.java">org/apache/hadoop/hbase/client/ServerStatisticTracker.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.client.ShortCircuitMasterConnection.java">org/apache/hadoop/hbase/client/ShortCircuitMasterConnection.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.client.SimpleRequestController.java">org/apache/hadoop/hbase/client/SimpleRequestController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.SimpleScanResultConsumer.java">org/apache/hadoop/hbase/client/SimpleScanResultConsumer.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.client.SyncCoprocessorRpcChannel.java">org/apache/hadoop/hbase/client/SyncCoprocessorRpcChannel.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.client.Table.java">org/apache/hadoop/hbase/client/Table.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TableDescriptor.java">org/apache/hadoop/hbase/client/TableDescriptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TableDescriptorBuilder.java">org/apache/hadoop/hbase/client/TableDescriptorBuilder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>32</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TableState.java">org/apache/hadoop/hbase/client/TableState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>35</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestAdmin1.java">org/apache/hadoop/hbase/client/TestAdmin1.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>36</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestAdmin2.java">org/apache/hadoop/hbase/client/TestAdmin2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestAppendFromClientSide.java">org/apache/hadoop/hbase/client/TestAppendFromClientSide.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.client.TestAsyncClusterAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncClusterAdminApi.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestAsyncNamespaceAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncNamespaceAdminApi.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.client.TestAsyncProcess.java">org/apache/hadoop/hbase/client/TestAsyncProcess.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestAsyncQuotaAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncQuotaAdminApi.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestAsyncRegionAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncRegionAdminApi.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestAsyncRegionAdminApi2.java">org/apache/hadoop/hbase/client/TestAsyncRegionAdminApi2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestAsyncReplicationAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApi.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestAsyncSingleRequestRpcRetryingCaller.java">org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestAsyncTable.java">org/apache/hadoop/hbase/client/TestAsyncTable.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.client.TestAsyncTableAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncTableAdminApi.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.client.TestAsyncTableAdminApi2.java">org/apache/hadoop/hbase/client/TestAsyncTableAdminApi2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestAsyncTableAdminApi3.java">org/apache/hadoop/hbase/client/TestAsyncTableAdminApi3.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.client.TestAsyncTableScanMetrics.java">org/apache/hadoop/hbase/client/TestAsyncTableScanMetrics.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.client.TestAsyncTableScanner.java">org/apache/hadoop/hbase/client/TestAsyncTableScanner.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.client.TestAttributes.java">org/apache/hadoop/hbase/client/TestAttributes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestAvoidCellReferencesIntoShippedBlocks.java">org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.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.client.TestBlockEvictionFromClient.java">org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestBufferedMutator.java">org/apache/hadoop/hbase/client/TestBufferedMutator.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.client.TestCheckAndMutate.java">org/apache/hadoop/hbase/client/TestCheckAndMutate.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.client.TestClientExponentialBackoff.java">org/apache/hadoop/hbase/client/TestClientExponentialBackoff.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.client.TestClientNoCluster.java">org/apache/hadoop/hbase/client/TestClientNoCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>37</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestClientPushback.java">org/apache/hadoop/hbase/client/TestClientPushback.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestClientScanner.java">org/apache/hadoop/hbase/client/TestClientScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestClientTimeouts.java">org/apache/hadoop/hbase/client/TestClientTimeouts.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.client.TestCloneSnapshotFromClient.java">org/apache/hadoop/hbase/client/TestCloneSnapshotFromClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestColumnFamilyDescriptorBuilder.java">org/apache/hadoop/hbase/client/TestColumnFamilyDescriptorBuilder.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.client.TestConnectionImplementation.java">org/apache/hadoop/hbase/client/TestConnectionImplementation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestEnableTable.java">org/apache/hadoop/hbase/client/TestEnableTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestFastFail.java">org/apache/hadoop/hbase/client/TestFastFail.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestFromClientSide.java">org/apache/hadoop/hbase/client/TestFromClientSide.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>100</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestFromClientSide3.java">org/apache/hadoop/hbase/client/TestFromClientSide3.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestFromClientSideNoCodec.java">org/apache/hadoop/hbase/client/TestFromClientSideNoCodec.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.client.TestFromClientSideScanExcpetion.java">org/apache/hadoop/hbase/client/TestFromClientSideScanExcpetion.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.client.TestGet.java">org/apache/hadoop/hbase/client/TestGet.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.client.TestHBaseAdminNoCluster.java">org/apache/hadoop/hbase/client/TestHBaseAdminNoCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestHTableMultiplexer.java">org/apache/hadoop/hbase/client/TestHTableMultiplexer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestHTableMultiplexerFlushCache.java">org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.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.client.TestImmutableHTableDescriptor.java">org/apache/hadoop/hbase/client/TestImmutableHTableDescriptor.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.client.TestIncrementsFromClientSide.java">org/apache/hadoop/hbase/client/TestIncrementsFromClientSide.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.client.TestIntraRowPagination.java">org/apache/hadoop/hbase/client/TestIntraRowPagination.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.client.TestLeaseRenewal.java">org/apache/hadoop/hbase/client/TestLeaseRenewal.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestLimitedScanWithFilter.java">org/apache/hadoop/hbase/client/TestLimitedScanWithFilter.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.client.TestMetaCache.java">org/apache/hadoop/hbase/client/TestMetaCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestMetricsConnection.java">org/apache/hadoop/hbase/client/TestMetricsConnection.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.client.TestMobCloneSnapshotFromClient.java">org/apache/hadoop/hbase/client/TestMobCloneSnapshotFromClient.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.client.TestMultiParallel.java">org/apache/hadoop/hbase/client/TestMultiParallel.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.client.TestMultipleTimestamps.java">org/apache/hadoop/hbase/client/TestMultipleTimestamps.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>37</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestOperation.java">org/apache/hadoop/hbase/client/TestOperation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestPutDeleteEtcCellIteration.java">org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.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.client.TestPutWithDelete.java">org/apache/hadoop/hbase/client/TestPutWithDelete.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.client.TestRawAsyncTableLimitedScanWithFilter.java">org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.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.client.TestRawAsyncTableScan.java">org/apache/hadoop/hbase/client/TestRawAsyncTableScan.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.client.TestReplicaWithCluster.java">org/apache/hadoop/hbase/client/TestReplicaWithCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestReplicasClient.java">org/apache/hadoop/hbase/client/TestReplicasClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestRestoreSnapshotFromClient.java">org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.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.client.TestResult.java">org/apache/hadoop/hbase/client/TestResult.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.client.TestResultSizeEstimation.java">org/apache/hadoop/hbase/client/TestResultSizeEstimation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestReversedScannerCallable.java">org/apache/hadoop/hbase/client/TestReversedScannerCallable.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.client.TestScan.java">org/apache/hadoop/hbase/client/TestScan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestScannerTimeout.java">org/apache/hadoop/hbase/client/TestScannerTimeout.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestScannersFromClientSide.java">org/apache/hadoop/hbase/client/TestScannersFromClientSide.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestScannersFromClientSide2.java">org/apache/hadoop/hbase/client/TestScannersFromClientSide2.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.client.TestServerBusyException.java">org/apache/hadoop/hbase/client/TestServerBusyException.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.client.TestSmallReversedScanner.java">org/apache/hadoop/hbase/client/TestSmallReversedScanner.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.client.TestSnapshotCloneIndependence.java">org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.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.client.TestSnapshotFromAdmin.java">org/apache/hadoop/hbase/client/TestSnapshotFromAdmin.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.client.TestSnapshotFromClient.java">org/apache/hadoop/hbase/client/TestSnapshotFromClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestSnapshotMetadata.java">org/apache/hadoop/hbase/client/TestSnapshotMetadata.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.client.TestSplitOrMergeStatus.java">org/apache/hadoop/hbase/client/TestSplitOrMergeStatus.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.client.TestTableDescriptorBuilder.java">org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestTableFavoredNodes.java">org/apache/hadoop/hbase/client/TestTableFavoredNodes.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.client.TestTableSnapshotScanner.java">org/apache/hadoop/hbase/client/TestTableSnapshotScanner.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.client.TestTimestampsFilter.java">org/apache/hadoop/hbase/client/TestTimestampsFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.VersionInfoUtil.java">org/apache/hadoop/hbase/client/VersionInfoUtil.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.client.backoff.ClientBackoffPolicyFactory.java">org/apache/hadoop/hbase/client/backoff/ClientBackoffPolicyFactory.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.client.backoff.ServerStatistics.java">org/apache/hadoop/hbase/client/backoff/ServerStatistics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.coprocessor.BigDecimalColumnInterpreter.java">org/apache/hadoop/hbase/client/coprocessor/BigDecimalColumnInterpreter.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.client.coprocessor.DoubleColumnInterpreter.java">org/apache/hadoop/hbase/client/coprocessor/DoubleColumnInterpreter.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.client.coprocessor.LongColumnInterpreter.java">org/apache/hadoop/hbase/client/coprocessor/LongColumnInterpreter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.coprocessor.RowProcessorClient.java">org/apache/hadoop/hbase/client/coprocessor/RowProcessorClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.coprocessor.package-info.java">org/apache/hadoop/hbase/client/coprocessor/package-info.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.example.RefreshHFilesClient.java">org/apache/hadoop/hbase/client/example/RefreshHFilesClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.locking.EntityLock.java">org/apache/hadoop/hbase/client/locking/EntityLock.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.locking.TestEntityLocks.java">org/apache/hadoop/hbase/client/locking/TestEntityLocks.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.client.metrics.ScanMetrics.java">org/apache/hadoop/hbase/client/metrics/ScanMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics.java">org/apache/hadoop/hbase/client/metrics/ServerSideScanMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.replication.ReplicationAdmin.java">org/apache/hadoop/hbase/client/replication/ReplicationAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>33</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.replication.ReplicationPeerConfigUtil.java">org/apache/hadoop/hbase/client/replication/ReplicationPeerConfigUtil.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.client.replication.TestReplicationAdmin.java">org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.codec.BaseDecoder.java">org/apache/hadoop/hbase/codec/BaseDecoder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.codec.BaseEncoder.java">org/apache/hadoop/hbase/codec/BaseEncoder.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.codec.CellCodec.java">org/apache/hadoop/hbase/codec/CellCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.codec.CellCodecWithTags.java">org/apache/hadoop/hbase/codec/CellCodecWithTags.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.codec.CodecPerformance.java">org/apache/hadoop/hbase/codec/CodecPerformance.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.codec.MessageCodec.java">org/apache/hadoop/hbase/codec/MessageCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.codec.TestCellCodecWithTags.java">org/apache/hadoop/hbase/codec/TestCellCodecWithTags.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.codec.TestCellMessageCodec.java">org/apache/hadoop/hbase/codec/TestCellMessageCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.codec.TestKeyValueCodecWithTags.java">org/apache/hadoop/hbase/codec/TestKeyValueCodecWithTags.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.conf.ConfigurationManager.java">org/apache/hadoop/hbase/conf/ConfigurationManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.constraint.BaseConstraint.java">org/apache/hadoop/hbase/constraint/BaseConstraint.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.constraint.CheckConfigurationConstraint.java">org/apache/hadoop/hbase/constraint/CheckConfigurationConstraint.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.constraint.Constraint.java">org/apache/hadoop/hbase/constraint/Constraint.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.constraint.ConstraintException.java">org/apache/hadoop/hbase/constraint/ConstraintException.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.constraint.ConstraintProcessor.java">org/apache/hadoop/hbase/constraint/ConstraintProcessor.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.constraint.Constraints.java">org/apache/hadoop/hbase/constraint/Constraints.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.constraint.TestConstraint.java">org/apache/hadoop/hbase/constraint/TestConstraint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.constraint.TestConstraints.java">org/apache/hadoop/hbase/constraint/TestConstraints.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.constraint.package-info.java">org/apache/hadoop/hbase/constraint/package-info.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>61</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coordination.SplitLogManagerCoordination.java">org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.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.coordination.SplitLogWorkerCoordination.java">org/apache/hadoop/hbase/coordination/SplitLogWorkerCoordination.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.coordination.ZKSplitLogManagerCoordination.java">org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coordination.ZkCoordinatedStateManager.java">org/apache/hadoop/hbase/coordination/ZkCoordinatedStateManager.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.coordination.ZkSplitLogWorkerCoordination.java">org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.BaseEnvironment.java">org/apache/hadoop/hbase/coprocessor/BaseEnvironment.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.coprocessor.BaseRowProcessorEndpoint.java">org/apache/hadoop/hbase/coprocessor/BaseRowProcessorEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.BulkLoadObserver.java">org/apache/hadoop/hbase/coprocessor/BulkLoadObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.ColumnInterpreter.java">org/apache/hadoop/hbase/coprocessor/ColumnInterpreter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.CoprocessorException.java">org/apache/hadoop/hbase/coprocessor/CoprocessorException.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.coprocessor.CoprocessorHost.java">org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.CoprocessorService.java">org/apache/hadoop/hbase/coprocessor/CoprocessorService.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.coprocessor.CoprocessorServiceBackwardCompatiblity.java">org/apache/hadoop/hbase/coprocessor/CoprocessorServiceBackwardCompatiblity.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.coprocessor.CoreCoprocessor.java">org/apache/hadoop/hbase/coprocessor/CoreCoprocessor.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.coprocessor.EndpointObserver.java">org/apache/hadoop/hbase/coprocessor/EndpointObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.HasMasterServices.java">org/apache/hadoop/hbase/coprocessor/HasMasterServices.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.coprocessor.HasRegionServerServices.java">org/apache/hadoop/hbase/coprocessor/HasRegionServerServices.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.coprocessor.MasterCoprocessor.java">org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.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.coprocessor.MasterObserver.java">org/apache/hadoop/hbase/coprocessor/MasterObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.MetricsCoprocessor.java">org/apache/hadoop/hbase/coprocessor/MetricsCoprocessor.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.coprocessor.MultiRowMutationEndpoint.java">org/apache/hadoop/hbase/coprocessor/MultiRowMutationEndpoint.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.coprocessor.ObserverContext.java">org/apache/hadoop/hbase/coprocessor/ObserverContext.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.coprocessor.ObserverContextImpl.java">org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.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.coprocessor.RegionCoprocessor.java">org/apache/hadoop/hbase/coprocessor/RegionCoprocessor.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.coprocessor.RegionCoprocessorEnvironment.java">org/apache/hadoop/hbase/coprocessor/RegionCoprocessorEnvironment.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.coprocessor.RegionObserver.java">org/apache/hadoop/hbase/coprocessor/RegionObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor.java">org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessor.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.coprocessor.RegionServerObserver.java">org/apache/hadoop/hbase/coprocessor/RegionServerObserver.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.coprocessor.SimpleRegionObserver.java">org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.SingletonCoprocessorService.java">org/apache/hadoop/hbase/coprocessor/SingletonCoprocessorService.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.coprocessor.TestCoprocessorInterface.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.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.coprocessor.TestCoprocessorMetrics.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.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.coprocessor.TestCoprocessorStop.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorStop.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.coprocessor.TestCoreMasterCoprocessor.java">org/apache/hadoop/hbase/coprocessor/TestCoreMasterCoprocessor.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.coprocessor.TestCoreRegionCoprocessor.java">org/apache/hadoop/hb

<TRUNCATED>

[13/30] hbase-site git commit: Published site at a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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/5fd895c6/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 d1202d0..9375fd1 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -515,14 +515,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/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/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/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/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/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/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/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/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/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/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/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/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index bcb1724..c6caa9b 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -191,8 +191,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.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 f16f8df..30bba22 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/AuthUtil.html
@@ -30,152 +30,254 @@
 <span class="sourceLineNo">022</span>import java.net.UnknownHostException;<a name="line.22"></a>
 <span class="sourceLineNo">023</span><a name="line.23"></a>
 <span class="sourceLineNo">024</span>import org.apache.hadoop.conf.Configuration;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.slf4j.Logger;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.slf4j.LoggerFactory;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>/**<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * Utility methods for helping with security tasks. Downstream users<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * may rely on this class to handle authenticating via keytab where<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * long running services need access to a secure HBase cluster.<a name="line.36"></a>
-<span class="sourceLineNo">037</span> *<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * Callers must ensure:<a name="line.38"></a>
-<span class="sourceLineNo">039</span> *<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * &lt;ul&gt;<a name="line.40"></a>
-<span class="sourceLineNo">041</span> *   &lt;li&gt;HBase configuration files are in the Classpath<a name="line.41"></a>
-<span class="sourceLineNo">042</span> *   &lt;li&gt;hbase.client.keytab.file points to a valid keytab on the local filesystem<a name="line.42"></a>
-<span class="sourceLineNo">043</span> *   &lt;li&gt;hbase.client.kerberos.principal gives the Kerberos principal to use<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * &lt;/ul&gt;<a name="line.44"></a>
-<span class="sourceLineNo">045</span> *<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * &lt;pre&gt;<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * {@code<a name="line.47"></a>
-<span class="sourceLineNo">048</span> *   ChoreService choreService = null;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> *   // Presumes HBase configuration files are on the classpath<a name="line.49"></a>
-<span class="sourceLineNo">050</span> *   final Configuration conf = HBaseConfiguration.create();<a name="line.50"></a>
-<span class="sourceLineNo">051</span> *   final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.51"></a>
-<span class="sourceLineNo">052</span> *   if (authChore != null) {<a name="line.52"></a>
-<span class="sourceLineNo">053</span> *     choreService = new ChoreService("MY_APPLICATION");<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *     choreService.scheduleChore(authChore);<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *   }<a name="line.55"></a>
-<span class="sourceLineNo">056</span> *   try {<a name="line.56"></a>
-<span class="sourceLineNo">057</span> *     // do application work<a name="line.57"></a>
-<span class="sourceLineNo">058</span> *   } finally {<a name="line.58"></a>
-<span class="sourceLineNo">059</span> *     if (choreService != null) {<a name="line.59"></a>
-<span class="sourceLineNo">060</span> *       choreService.shutdown();<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> * }<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * &lt;/pre&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> *<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * See the "Running Canary in a Kerberos-enabled Cluster" section of the HBase Reference Guide for<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * an example of configuring a user of this Auth Chore to run on a secure cluster.<a name="line.67"></a>
-<span class="sourceLineNo">068</span> */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>@InterfaceAudience.Public<a name="line.69"></a>
-<span class="sourceLineNo">070</span>public class AuthUtil {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private static final Logger LOG = LoggerFactory.getLogger(AuthUtil.class);<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  /** Prefix character to denote group names */<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static final String GROUP_PREFIX = "@";<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private AuthUtil() {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    super();<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>  /**<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param conf the hbase service configuration<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @return a ScheduledChore for renewals, if needed, and null otherwise.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   */<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static ScheduledChore getAuthChore(Configuration conf) throws IOException {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    UserProvider userProvider = UserProvider.instantiate(conf);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    // login the principal (if using secure Hadoop)<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    boolean securityEnabled =<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        userProvider.isHadoopSecurityEnabled() &amp;&amp; userProvider.isHBaseSecurityEnabled();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    if (!securityEnabled) return null;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    String host = null;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    try {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      host = Strings.domainNamePointerToHostName(DNS.getDefaultHost(<a name="line.93"></a>
-<span class="sourceLineNo">094</span>          conf.get("hbase.client.dns.interface", "default"),<a name="line.94"></a>
-<span class="sourceLineNo">095</span>          conf.get("hbase.client.dns.nameserver", "default")));<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      userProvider.login("hbase.client.keytab.file", "hbase.client.kerberos.principal", host);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    } catch (UnknownHostException e) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      LOG.error("Error resolving host name: " + e.getMessage(), e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      throw e;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    } catch (IOException e) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      LOG.error("Error while trying to perform the initial login: " + e.getMessage(), e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      throw e;<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>    final UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    Stoppable stoppable = new Stoppable() {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      private volatile boolean isStopped = false;<a name="line.107"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.security.User;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.slf4j.Logger;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.slf4j.LoggerFactory;<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> * Utility methods for helping with security tasks. Downstream users<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * may rely on this class to handle authenticating via keytab where<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * long running services need access to a secure HBase cluster.<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * Callers must ensure:<a name="line.39"></a>
+<span class="sourceLineNo">040</span> *<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * &lt;ul&gt;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> *   &lt;li&gt;HBase configuration files are in the Classpath<a name="line.42"></a>
+<span class="sourceLineNo">043</span> *   &lt;li&gt;hbase.client.keytab.file points to a valid keytab on the local filesystem<a name="line.43"></a>
+<span class="sourceLineNo">044</span> *   &lt;li&gt;hbase.client.kerberos.principal gives the Kerberos principal to use<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * &lt;/ul&gt;<a name="line.45"></a>
+<span class="sourceLineNo">046</span> *<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * &lt;pre&gt;<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * {@code<a name="line.48"></a>
+<span class="sourceLineNo">049</span> *   ChoreService choreService = null;<a name="line.49"></a>
+<span class="sourceLineNo">050</span> *   // Presumes HBase configuration files are on the classpath<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *   final Configuration conf = HBaseConfiguration.create();<a name="line.51"></a>
+<span class="sourceLineNo">052</span> *   final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.52"></a>
+<span class="sourceLineNo">053</span> *   if (authChore != null) {<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *     choreService = new ChoreService("MY_APPLICATION");<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *     choreService.scheduleChore(authChore);<a name="line.55"></a>
+<span class="sourceLineNo">056</span> *   }<a name="line.56"></a>
+<span class="sourceLineNo">057</span> *   try {<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *     // do application work<a name="line.58"></a>
+<span class="sourceLineNo">059</span> *   } finally {<a name="line.59"></a>
+<span class="sourceLineNo">060</span> *     if (choreService != null) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span> *       choreService.shutdown();<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> * &lt;/pre&gt;<a name="line.65"></a>
+<span class="sourceLineNo">066</span> *<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * See the "Running Canary in a Kerberos-enabled Cluster" section of the HBase Reference Guide for<a name="line.67"></a>
+<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">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>
+<span class="sourceLineNo">075</span> * @deprecated since 2.2.0, to be removed in hbase-3.0.0.<a name="line.75"></a>
+<span class="sourceLineNo">076</span> */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>@Deprecated<a name="line.77"></a>
+<span class="sourceLineNo">078</span>@InterfaceAudience.Public<a name="line.78"></a>
+<span class="sourceLineNo">079</span>public final class AuthUtil {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  // TODO: Mark this class InterfaceAudience.Private from 3.0.0<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private static final Logger LOG = LoggerFactory.getLogger(AuthUtil.class);<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  /** Prefix character to denote group names */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private static final String GROUP_PREFIX = "@";<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  /** Client keytab file */<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  public static final String HBASE_CLIENT_KEYTAB_FILE = "hbase.client.keytab.file";<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  /** Client principal */<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static final String HBASE_CLIENT_KERBEROS_PRINCIPAL = "hbase.client.keytab.principal";<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private AuthUtil() {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    super();<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>   * For kerberized cluster, return login user (from kinit or from keytab if specified).<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * For non-kerberized cluster, return system user.<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * @param conf configuartion file<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * @return user<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * @throws IOException login exception<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  @InterfaceAudience.Private<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public static User loginClient(Configuration conf) throws IOException {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    UserProvider provider = UserProvider.instantiate(conf);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    User user = provider.getCurrent();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    boolean securityOn = provider.isHBaseSecurityEnabled() &amp;&amp; provider.isHadoopSecurityEnabled();<a name="line.107"></a>
 <span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>      @Override<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      public void stop(String why) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        isStopped = true;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>      @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      public boolean isStopped() {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        return isStopped;<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>    // if you're in debug mode this is useful to avoid getting spammed by the getTGT()<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    // you can increase this, keeping in mind that the default refresh window is 0.8<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    // e.g. 5min tgt * 0.8 = 4min refresh so interval is better be way less than 1min<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    final int CHECK_TGT_INTERVAL = 30 * 1000; // 30sec<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>    ScheduledChore refreshCredentials =<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        new ScheduledChore("RefreshCredentials", stoppable, CHECK_TGT_INTERVAL) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      @Override<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      protected void chore() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        try {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>          ugi.checkTGTAndReloginFromKeytab();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        } catch (IOException e) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>          LOG.error("Got exception while trying to refresh credentials: " + e.getMessage(), e);<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><a name="line.136"></a>
-<span class="sourceLineNo">137</span>    return refreshCredentials;<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>  /**<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * Returns whether or not the given name should be interpreted as a group<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * principal.  Currently this simply checks if the name starts with the<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * special group prefix character ("@").<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @InterfaceAudience.Private<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public static boolean isGroupPrincipal(String name) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return name != null &amp;&amp; name.startsWith(GROUP_PREFIX);<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>  /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * Returns the actual name for a group principal (stripped of the<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * group prefix).<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  @InterfaceAudience.Private<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  public static String getGroupName(String aclKey) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    if (!isGroupPrincipal(aclKey)) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      return aclKey;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>    return aclKey.substring(GROUP_PREFIX.length());<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>   * Returns the group entry with the group prefix for a group principal.<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @InterfaceAudience.Private<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public static String toGroupEntry(String name) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    return GROUP_PREFIX + name;<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">109</span>    if (securityOn) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      boolean fromKeytab = provider.shouldLoginFromKeytab();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      if (user.getUGI().hasKerberosCredentials()) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        // There's already a login user.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>        // But we should avoid misuse credentials which is a dangerous security issue,<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        // so here check whether user specified a keytab and a principal:<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        // 1. Yes, check if user principal match.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        //    a. match, just return.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        //    b. mismatch, login using keytab.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        // 2. No, user may login through kinit, this is the old way, also just return.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        if (fromKeytab) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>          return checkPrincipalMatch(conf, user.getUGI().getUserName()) ? user :<a name="line.120"></a>
+<span class="sourceLineNo">121</span>            loginFromKeytabAndReturnUser(provider);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        }<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        return user;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      } else if (fromKeytab) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        // Kerberos is on and client specify a keytab and principal, but client doesn't login yet.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        return loginFromKeytabAndReturnUser(provider);<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>    return user;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  private static boolean checkPrincipalMatch(Configuration conf, String loginUserName) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    String configuredUserName = conf.get(HBASE_CLIENT_KERBEROS_PRINCIPAL);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    boolean match = configuredUserName.equals(loginUserName);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    if (!match) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.warn("Trying to login with a different user: {}, existed user is {}.",<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        configuredUserName, loginUserName);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return match;<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>  private static User loginFromKeytabAndReturnUser(UserProvider provider) throws IOException {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    try {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      provider.login(HBASE_CLIENT_KEYTAB_FILE, HBASE_CLIENT_KERBEROS_PRINCIPAL);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    } catch (IOException ioe) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      LOG.error("Error while trying to login as user {} through {}, with message: {}.",<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        HBASE_CLIENT_KERBEROS_PRINCIPAL, HBASE_CLIENT_KEYTAB_FILE,<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        ioe.getMessage());<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      throw ioe;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    return provider.getCurrent();<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>   * For kerberized cluster, return login user (from kinit or from keytab).<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * Principal should be the following format: name/fully.qualified.domain.name@REALM.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * For non-kerberized cluster, return system user.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * &lt;p&gt;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * NOT recommend to use to method unless you're sure what you're doing, it is for canary only.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Please use User#loginClient.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @param conf configuration file<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @return user<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @throws IOException login exception<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   */<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  private static User loginClientAsService(Configuration conf) throws IOException {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    UserProvider provider = UserProvider.instantiate(conf);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    if (provider.isHBaseSecurityEnabled() &amp;&amp; provider.isHadoopSecurityEnabled()) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      try {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>        if (provider.shouldLoginFromKeytab()) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>          String host = Strings.domainNamePointerToHostName(DNS.getDefaultHost(<a name="line.170"></a>
+<span class="sourceLineNo">171</span>            conf.get("hbase.client.dns.interface", "default"),<a name="line.171"></a>
+<span class="sourceLineNo">172</span>            conf.get("hbase.client.dns.nameserver", "default")));<a name="line.172"></a>
+<span class="sourceLineNo">173</span>          provider.login(HBASE_CLIENT_KEYTAB_FILE, HBASE_CLIENT_KERBEROS_PRINCIPAL, host);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      } catch (UnknownHostException e) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        LOG.error("Error resolving host name: " + e.getMessage(), e);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        throw e;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      } catch (IOException e) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        LOG.error("Error while trying to perform the initial login: " + e.getMessage(), e);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        throw e;<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>    return provider.getCurrent();<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 if security is enabled and if so, launches chore for refreshing kerberos ticket.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * @return a ScheduledChore for renewals.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  @InterfaceAudience.Private<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  public static ScheduledChore getAuthRenewalChore(final UserGroupInformation user) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    if (!user.hasKerberosCredentials()) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      return null;<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>    Stoppable stoppable = createDummyStoppable();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // if you're in debug mode this is useful to avoid getting spammed by the getTGT()<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // you can increase this, keeping in mind that the default refresh window is 0.8<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    // e.g. 5min tgt * 0.8 = 4min refresh so interval is better be way less than 1min<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    final int CHECK_TGT_INTERVAL = 30 * 1000; // 30sec<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    return new ScheduledChore("RefreshCredentials", stoppable, CHECK_TGT_INTERVAL) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      @Override<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      protected void chore() {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        try {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          user.checkTGTAndReloginFromKeytab();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        } catch (IOException e) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          LOG.error("Got exception while trying to refresh credentials: " + e.getMessage(), e);<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>    };<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>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * @param conf the hbase service configuration<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * @return a ScheduledChore for renewals, if needed, and null otherwise.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * @deprecated Deprecated since 2.2.0, this method will be internal use only after 3.0.0.<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   */<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  @Deprecated<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  public static ScheduledChore getAuthChore(Configuration conf) throws IOException {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    // TODO: Mark this method InterfaceAudience.Private from 3.0.0<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    User user = loginClientAsService(conf);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    return getAuthRenewalChore(user.getUGI());<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>  private static Stoppable createDummyStoppable() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    return new Stoppable() {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      private volatile boolean isStopped = false;<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>      @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      public void stop(String why) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        isStopped = true;<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>      @Override<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      public boolean isStopped() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        return isStopped;<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><a name="line.241"></a>
+<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * Returns whether or not the given name should be interpreted as a group<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   * principal.  Currently this simply checks if the name starts with the<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * special group prefix character ("@").<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  @InterfaceAudience.Private<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  public static boolean isGroupPrincipal(String name) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    return name != null &amp;&amp; name.startsWith(GROUP_PREFIX);<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>   * Returns the actual name for a group principal (stripped of the<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * group prefix).<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  @InterfaceAudience.Private<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  public static String getGroupName(String aclKey) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    if (!isGroupPrincipal(aclKey)) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      return aclKey;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return aclKey.substring(GROUP_PREFIX.length());<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 the group entry with the group prefix for a group principal.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  @InterfaceAudience.Private<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  public static String toGroupEntry(String name) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return GROUP_PREFIX + name;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/5fd895c6/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 c836b55..cdaa8c0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <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 = "c075f33fc72fa0e959845fb0f381fdafffbaf8f0";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "a8e184dc77470bdf9d62e19c5d36bc1de7cf4c6d";<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 = "Mon Jul 30 14:39:44 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Tue Jul 31 14:39:51 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 = "7bd486154ac85e85ee3e2de1c6cc54de";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "c2a84e90859b2952d20d4ce32262b078";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>