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/04/07 14:48:13 UTC

[01/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 40396e2de -> 1ee650677


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html
index 37f3bd1..04be717 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html
@@ -95,9 +95,9 @@
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
 <span class="sourceLineNo">088</span><a name="line.88"></a>
 <span class="sourceLineNo">089</span>    @Override<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void preScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e, Scan scan)<a name="line.90"></a>
-<span class="sourceLineNo">091</span>        throws IOException {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      if (e.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.92"></a>
+<span class="sourceLineNo">090</span>    public boolean preScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt; c,<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        InternalScanner s, List&lt;Result&gt; result, int limit, boolean hasNext) throws IOException {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      if (c.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.92"></a>
 <span class="sourceLineNo">093</span>        int concurrency = CONCURRENCY.incrementAndGet();<a name="line.93"></a>
 <span class="sourceLineNo">094</span>        for (;;) {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>          int max = MAX_CONCURRENCY.get();<a name="line.95"></a>
@@ -110,68 +110,71 @@
 <span class="sourceLineNo">102</span>        }<a name="line.102"></a>
 <span class="sourceLineNo">103</span>        Threads.sleepWithoutInterrupt(10);<a name="line.103"></a>
 <span class="sourceLineNo">104</span>      }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>    @Override<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void postScannerClose(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e, InternalScanner s)<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        throws IOException {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      if (e.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        CONCURRENCY.decrementAndGet();<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>  }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  @BeforeClass<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  public static void setUp() throws Exception {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    conf.set(REGION_COPROCESSOR_CONF_KEY, CountingRegionObserver.class.getName());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setInt(MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, MAX_ALLOWED);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    TEST_UTIL.startMiniCluster(3);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    TEST_UTIL.getAdmin().setBalancerRunning(false, true);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry,<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        registry.getClusterId().get(), User.getCurrent());<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    LOCATOR = new AsyncNonMetaRegionLocator(CONN);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    SPLIT_KEYS = IntStream.range(1, 256).mapToObj(i -&gt; Bytes.toBytes(String.format("%02x", i)))<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        .toArray(byte[][]::new);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    TEST_UTIL.createTable(TABLE_NAME, FAMILY, SPLIT_KEYS);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    TEST_UTIL.waitTableAvailable(TABLE_NAME);<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>  @AfterClass<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  public static void tearDown() throws Exception {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    IOUtils.closeQuietly(CONN);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    TEST_UTIL.shutdownMiniCluster();<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>  private void assertLocs(List&lt;CompletableFuture&lt;HRegionLocation&gt;&gt; futures)<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      throws InterruptedException, ExecutionException {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    assertEquals(256, futures.size());<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    for (int i = 0; i &lt; futures.size(); i++) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      HRegionLocation loc = futures.get(i).get();<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      if (i == 0) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        assertTrue(isEmptyStartRow(loc.getRegionInfo().getStartKey()));<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      } else {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        assertEquals(String.format("%02x", i), Bytes.toString(loc.getRegionInfo().getStartKey()));<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      }<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      if (i == futures.size() - 1) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        assertTrue(isEmptyStopRow(loc.getRegionInfo().getEndKey()));<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      } else {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        assertEquals(String.format("%02x", i + 1), Bytes.toString(loc.getRegionInfo().getEndKey()));<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>  }<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>  @Test<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  public void test() throws InterruptedException, ExecutionException {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    List&lt;CompletableFuture&lt;HRegionLocation&gt;&gt; futures =<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        IntStream.range(0, 256).mapToObj(i -&gt; Bytes.toBytes(String.format("%02x", i)))<a name="line.160"></a>
-<span class="sourceLineNo">161</span>            .map(r -&gt; LOCATOR.getRegionLocation(TABLE_NAME, r, RegionLocateType.CURRENT, false))<a name="line.161"></a>
-<span class="sourceLineNo">162</span>            .collect(toList());<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    assertLocs(futures);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    assertTrue(MAX_CONCURRENCY.get() &lt;= MAX_ALLOWED);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>}<a name="line.166"></a>
+<span class="sourceLineNo">105</span>      return hasNext;<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>    @Override<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    public boolean postScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt; c,<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        InternalScanner s, List&lt;Result&gt; result, int limit, boolean hasNext) throws IOException {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      if (c.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        CONCURRENCY.decrementAndGet();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      return hasNext;<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>  @BeforeClass<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public static void setUp() throws Exception {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    conf.set(REGION_COPROCESSOR_CONF_KEY, CountingRegionObserver.class.getName());<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    conf.setInt(MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, MAX_ALLOWED);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    TEST_UTIL.startMiniCluster(3);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    TEST_UTIL.getAdmin().balancerSwitch(false, true);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry,<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        registry.getClusterId().get(), User.getCurrent());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    LOCATOR = new AsyncNonMetaRegionLocator(CONN);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    SPLIT_KEYS = IntStream.range(1, 256).mapToObj(i -&gt; Bytes.toBytes(String.format("%02x", i)))<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        .toArray(byte[][]::new);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    TEST_UTIL.createTable(TABLE_NAME, FAMILY, SPLIT_KEYS);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    TEST_UTIL.waitTableAvailable(TABLE_NAME);<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>  @AfterClass<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public static void tearDown() throws Exception {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    IOUtils.closeQuietly(CONN);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    TEST_UTIL.shutdownMiniCluster();<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>  private void assertLocs(List&lt;CompletableFuture&lt;HRegionLocation&gt;&gt; futures)<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      throws InterruptedException, ExecutionException {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    assertEquals(256, futures.size());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    for (int i = 0; i &lt; futures.size(); i++) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      HRegionLocation loc = futures.get(i).get();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      if (i == 0) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        assertTrue(isEmptyStartRow(loc.getRegion().getStartKey()));<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      } else {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        assertEquals(String.format("%02x", i), Bytes.toString(loc.getRegion().getStartKey()));<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      if (i == futures.size() - 1) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        assertTrue(isEmptyStopRow(loc.getRegion().getEndKey()));<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      } else {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        assertEquals(String.format("%02x", i + 1), Bytes.toString(loc.getRegion().getEndKey()));<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  @Test<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public void test() throws InterruptedException, ExecutionException {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    List&lt;CompletableFuture&lt;HRegionLocation&gt;&gt; futures =<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        IntStream.range(0, 256).mapToObj(i -&gt; Bytes.toBytes(String.format("%02x", i)))<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            .map(r -&gt; LOCATOR.getRegionLocation(TABLE_NAME, r, RegionLocateType.CURRENT, false))<a name="line.163"></a>
+<span class="sourceLineNo">164</span>            .collect(toList());<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    assertLocs(futures);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    assertTrue("max allowed is " + MAX_ALLOWED + " but actual is " + MAX_CONCURRENCY.get(),<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      MAX_CONCURRENCY.get() &lt;= MAX_ALLOWED);<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html
index 37f3bd1..04be717 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html
@@ -95,9 +95,9 @@
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
 <span class="sourceLineNo">088</span><a name="line.88"></a>
 <span class="sourceLineNo">089</span>    @Override<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void preScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e, Scan scan)<a name="line.90"></a>
-<span class="sourceLineNo">091</span>        throws IOException {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      if (e.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.92"></a>
+<span class="sourceLineNo">090</span>    public boolean preScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt; c,<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        InternalScanner s, List&lt;Result&gt; result, int limit, boolean hasNext) throws IOException {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      if (c.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.92"></a>
 <span class="sourceLineNo">093</span>        int concurrency = CONCURRENCY.incrementAndGet();<a name="line.93"></a>
 <span class="sourceLineNo">094</span>        for (;;) {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>          int max = MAX_CONCURRENCY.get();<a name="line.95"></a>
@@ -110,68 +110,71 @@
 <span class="sourceLineNo">102</span>        }<a name="line.102"></a>
 <span class="sourceLineNo">103</span>        Threads.sleepWithoutInterrupt(10);<a name="line.103"></a>
 <span class="sourceLineNo">104</span>      }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>    @Override<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void postScannerClose(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e, InternalScanner s)<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        throws IOException {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      if (e.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        CONCURRENCY.decrementAndGet();<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>  }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  @BeforeClass<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  public static void setUp() throws Exception {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    conf.set(REGION_COPROCESSOR_CONF_KEY, CountingRegionObserver.class.getName());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setInt(MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, MAX_ALLOWED);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    TEST_UTIL.startMiniCluster(3);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    TEST_UTIL.getAdmin().setBalancerRunning(false, true);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry,<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        registry.getClusterId().get(), User.getCurrent());<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    LOCATOR = new AsyncNonMetaRegionLocator(CONN);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    SPLIT_KEYS = IntStream.range(1, 256).mapToObj(i -&gt; Bytes.toBytes(String.format("%02x", i)))<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        .toArray(byte[][]::new);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    TEST_UTIL.createTable(TABLE_NAME, FAMILY, SPLIT_KEYS);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    TEST_UTIL.waitTableAvailable(TABLE_NAME);<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>  @AfterClass<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  public static void tearDown() throws Exception {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    IOUtils.closeQuietly(CONN);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    TEST_UTIL.shutdownMiniCluster();<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>  private void assertLocs(List&lt;CompletableFuture&lt;HRegionLocation&gt;&gt; futures)<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      throws InterruptedException, ExecutionException {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    assertEquals(256, futures.size());<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    for (int i = 0; i &lt; futures.size(); i++) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      HRegionLocation loc = futures.get(i).get();<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      if (i == 0) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        assertTrue(isEmptyStartRow(loc.getRegionInfo().getStartKey()));<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      } else {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        assertEquals(String.format("%02x", i), Bytes.toString(loc.getRegionInfo().getStartKey()));<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      }<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      if (i == futures.size() - 1) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        assertTrue(isEmptyStopRow(loc.getRegionInfo().getEndKey()));<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      } else {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        assertEquals(String.format("%02x", i + 1), Bytes.toString(loc.getRegionInfo().getEndKey()));<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>  }<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>  @Test<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  public void test() throws InterruptedException, ExecutionException {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    List&lt;CompletableFuture&lt;HRegionLocation&gt;&gt; futures =<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        IntStream.range(0, 256).mapToObj(i -&gt; Bytes.toBytes(String.format("%02x", i)))<a name="line.160"></a>
-<span class="sourceLineNo">161</span>            .map(r -&gt; LOCATOR.getRegionLocation(TABLE_NAME, r, RegionLocateType.CURRENT, false))<a name="line.161"></a>
-<span class="sourceLineNo">162</span>            .collect(toList());<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    assertLocs(futures);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    assertTrue(MAX_CONCURRENCY.get() &lt;= MAX_ALLOWED);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>}<a name="line.166"></a>
+<span class="sourceLineNo">105</span>      return hasNext;<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>    @Override<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    public boolean postScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt; c,<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        InternalScanner s, List&lt;Result&gt; result, int limit, boolean hasNext) throws IOException {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      if (c.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        CONCURRENCY.decrementAndGet();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      return hasNext;<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>  @BeforeClass<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public static void setUp() throws Exception {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    conf.set(REGION_COPROCESSOR_CONF_KEY, CountingRegionObserver.class.getName());<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    conf.setInt(MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, MAX_ALLOWED);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    TEST_UTIL.startMiniCluster(3);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    TEST_UTIL.getAdmin().balancerSwitch(false, true);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry,<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        registry.getClusterId().get(), User.getCurrent());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    LOCATOR = new AsyncNonMetaRegionLocator(CONN);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    SPLIT_KEYS = IntStream.range(1, 256).mapToObj(i -&gt; Bytes.toBytes(String.format("%02x", i)))<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        .toArray(byte[][]::new);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    TEST_UTIL.createTable(TABLE_NAME, FAMILY, SPLIT_KEYS);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    TEST_UTIL.waitTableAvailable(TABLE_NAME);<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>  @AfterClass<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public static void tearDown() throws Exception {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    IOUtils.closeQuietly(CONN);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    TEST_UTIL.shutdownMiniCluster();<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>  private void assertLocs(List&lt;CompletableFuture&lt;HRegionLocation&gt;&gt; futures)<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      throws InterruptedException, ExecutionException {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    assertEquals(256, futures.size());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    for (int i = 0; i &lt; futures.size(); i++) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      HRegionLocation loc = futures.get(i).get();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      if (i == 0) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        assertTrue(isEmptyStartRow(loc.getRegion().getStartKey()));<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      } else {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        assertEquals(String.format("%02x", i), Bytes.toString(loc.getRegion().getStartKey()));<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      if (i == futures.size() - 1) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        assertTrue(isEmptyStopRow(loc.getRegion().getEndKey()));<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      } else {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        assertEquals(String.format("%02x", i + 1), Bytes.toString(loc.getRegion().getEndKey()));<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  @Test<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public void test() throws InterruptedException, ExecutionException {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    List&lt;CompletableFuture&lt;HRegionLocation&gt;&gt; futures =<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        IntStream.range(0, 256).mapToObj(i -&gt; Bytes.toBytes(String.format("%02x", i)))<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            .map(r -&gt; LOCATOR.getRegionLocation(TABLE_NAME, r, RegionLocateType.CURRENT, false))<a name="line.163"></a>
+<span class="sourceLineNo">164</span>            .collect(toList());<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    assertLocs(futures);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    assertTrue("max allowed is " + MAX_ALLOWED + " but actual is " + MAX_CONCURRENCY.get(),<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      MAX_CONCURRENCY.get() &lt;= MAX_ALLOWED);<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>
 
 
 


[15/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index e68863b..dba23a1 100644
--- a/book.html
+++ b/book.html
@@ -517,7 +517,7 @@ In this case, you can set <code>JAVA_HOME</code> to the directory containing the
 </li>
 <li>
 <p>Edit <em>conf/hbase-site.xml</em>, which is the main HBase configuration file.
-At this time, you only need to specify the directory on the local filesystem where HBase and ZooKeeper write data.
+At this time, you need to specify the directory on the local filesystem where HBase and ZooKeeper write data and acknowledge some risks.
 By default, a new directory is created under /tmp.
 Many servers are configured to delete the contents of <em>/tmp</em> upon reboot, so you should store the data elsewhere.
 The following configuration will store HBase&#8217;s data in the <em>hbase</em> directory, in the home directory of the user called <code>testuser</code>.
@@ -536,6 +536,21 @@ Paste the <code>&lt;property&gt;</code> tags beneath the <code>&lt;configuration
     <span class="tag">&lt;name&gt;</span>hbase.zookeeper.property.dataDir<span class="tag">&lt;/name&gt;</span>
     <span class="tag">&lt;value&gt;</span>/home/testuser/zookeeper<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.unsafe.stream.capability.enforce<span class="tag">&lt;/name&gt;</span>
+    <span class="tag">&lt;value&gt;</span>false<span class="tag">&lt;/value&gt;</span>
+    <span class="tag">&lt;description&gt;</span>
+      Controls whether HBase will check for stream capabilities (hflush/hsync).
+
+      Disable this if you intend to run on LocalFileSystem, denoted by a rootdir
+      with the 'file://' scheme, but be mindful of the NOTE below.
+
+      WARNING: Setting this to false blinds you to potential data loss and
+      inconsistent system state in the event of process and/or node failures. If
+      HBase is complaining of an inability to use hsync or hflush it's most
+      likely not a false positive.
+    <span class="tag">&lt;/description&gt;</span>
+  <span class="tag">&lt;/property&gt;</span>
 <span class="tag">&lt;/configuration&gt;</span></code></pre>
 </div>
 </div>
@@ -554,15 +569,27 @@ HBase will attempt to do a migration, which is not what you want.</p>
 </td>
 <td class="content">
 The <em>hbase.rootdir</em> in the above example points to a directory
-in the <em>local filesystem</em>. The 'file:/' prefix is how we denote local filesystem.
-To home HBase on an existing instance of HDFS, set the <em>hbase.rootdir</em> to point at a
-directory up on your instance: e.g. <em>hdfs://namenode.example.org:8020/hbase</em>.
-For more on this variant, see the section below on Standalone HBase over HDFS.
+in the <em>local filesystem</em>. The 'file://' prefix is how we denote local
+filesystem. You should take the WARNING present in the configuration example
+to heart. In standalone mode HBase makes use of the local filesystem abstraction
+from the Apache Hadoop project. That abstraction doesn&#8217;t provide the durability
+promises that HBase needs to operate safely. This is fine for local development
+and testing use cases where the cost of cluster failure is well contained. It is
+not appropriate for production deployments; eventually you will lose data.
 </td>
 </tr>
 </table>
 </div>
 </li>
+</ol>
+</div>
+<div class="paragraph">
+<p>To home HBase on an existing instance of HDFS, set the <em>hbase.rootdir</em> to point at a
+directory up on your instance: e.g. <em>hdfs://namenode.example.org:8020/hbase</em>.
+For more on this variant, see the section below on Standalone HBase over HDFS.</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
 <li>
 <p>The <em>bin/start-hbase.sh</em> script is provided as a convenient way to start HBase.
 Issue the command, and if all goes well, a message is logged to standard output showing that HBase started successfully.
@@ -631,7 +658,7 @@ You must specify the table name and the ColumnFamily name.</p>
 <li>
 <p>List Information About your Table</p>
 <div class="paragraph">
-<p>Use the <code>list</code> command to</p>
+<p>Use the <code>list</code> command to confirm your table exists</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -643,6 +670,23 @@ test
 =&gt; ["test"]</pre>
 </div>
 </div>
+<div class="paragraph">
+<p>Now use the <code>describe</code> command to see details, including configuration defaults</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>hbase(main):003:0&gt; describe 'test'
+Table test is ENABLED
+test
+COLUMN FAMILIES DESCRIPTION
+{NAME =&gt; 'cf', VERSIONS =&gt; '1', EVICT_BLOCKS_ON_CLOSE =&gt; 'false', NEW_VERSION_BEHAVIOR =&gt; 'false', KEEP_DELETED_CELLS =&gt; 'FALSE', CACHE_DATA_ON_WRITE =&gt;
+'false', DATA_BLOCK_ENCODING =&gt; 'NONE', TTL =&gt; 'FOREVER', MIN_VERSIONS =&gt; '0', REPLICATION_SCOPE =&gt; '0', BLOOMFILTER =&gt; 'ROW', CACHE_INDEX_ON_WRITE =&gt; 'f
+alse', IN_MEMORY =&gt; 'false', CACHE_BLOOMS_ON_WRITE =&gt; 'false', PREFETCH_BLOCKS_ON_OPEN =&gt; 'false', COMPRESSION =&gt; 'NONE', BLOCKCACHE =&gt; 'true', BLOCKSIZE
+ =&gt; '65536'}
+1 row(s)
+Took 0.9998 seconds</pre>
+</div>
+</div>
 </li>
 <li>
 <p>Put data into your table.</p>
@@ -826,7 +870,7 @@ First, add the following property which directs HBase to run in distributed mode
 </div>
 <div class="paragraph">
 <p>Next, change the <code>hbase.rootdir</code> from the local filesystem to the address of your HDFS instance, using the <code>hdfs:////</code> URI syntax.
-In this example, HDFS is running on the localhost at port 8020.</p>
+In this example, HDFS is running on the localhost at port 8020. Be sure to either remove the entry for <code>hbase.unsafe.stream.capability.enforce</code> or set it to true.</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -6858,9 +6902,12 @@ Quitting...</code></pre>
 <div class="title">Special upgrading for Replication users from pre-HBase 1.4</div>
 <p>User running versions of HBase prior to the 1.4.0 release that make use of replication should be sure to read the instructions in the section <a href="#upgrade1.4.replication">Replication peer&#8217;s TableCFs config</a>.</p>
 </div>
-<div id="upgrade2.0.jruby" class="paragraph">
-<div class="title">HBase shell now based on JRuby 9.1.10.0</div>
-<p>The bundled JRuby 1.6.8 has been updated to version 9.1.10.0. The represents a change from Ruby 1.8 to Ruby 2.3.3, which introduces non-compatible language changes for user scripts.</p>
+<div id="upgrade2.0.shell" class="paragraph">
+<div class="title">HBase shell changes</div>
+<p>The HBase shell command relies on a bundled JRuby instance. This bundled JRuby been updated from version 1.6.8 to version 9.1.10.0. The represents a change from Ruby 1.8 to Ruby 2.3.3, which introduces non-compatible language changes for user scripts.</p>
+</div>
+<div class="paragraph">
+<p>The HBase shell command now ignores the '--return-values' flag that was present in early HBase 1.4 releases. Instead the shell always behaves as though that flag were passed. If you wish to avoid having expression results printed in the console you should alter your IRB configuration as noted in the section <a href="#irbrc"><em>irbrc</em></a>.</p>
 </div>
 <div id="upgrade2.0.coprocessors" class="paragraph">
 <div class="title">Coprocessor APIs have changed in HBase 2.0+</div>
@@ -7349,7 +7396,7 @@ The table reference can be used to perform data read write operations such as pu
 </div>
 <div class="listingblock">
 <div class="content">
-<pre>hbase(main):000:0&gt; create ‘t’, ‘f’
+<pre>hbase(main):000:0&gt; create 't', 'f'
 0 row(s) in 1.0970 seconds
 hbase(main):001:0&gt; put 't', 'rold', 'f', 'v'
 0 row(s) in 0.0080 seconds
@@ -7417,7 +7464,7 @@ hbase(main):012:0&gt; tab = get_table 't'
 0 row(s) in 0.0010 seconds
 
 =&gt; Hbase::Table - t
-hbase(main):013:0&gt; tab.put ‘r1’ ,’f’, ‘v’
+hbase(main):013:0&gt; tab.put 'r1' ,'f', 'v'
 0 row(s) in 0.0100 seconds
 hbase(main):014:0&gt; tab.scan
 ROW                                COLUMN+CELL
@@ -7433,7 +7480,7 @@ The list_snapshots command also acts similarly.</p>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre>hbase(main):016 &gt; tables = list(‘t.*’)
+<pre>hbase(main):016 &gt; tables = list('t.*')
 TABLE
 t
 1 row(s) in 0.1040 seconds
@@ -7448,7 +7495,7 @@ hbase(main):018:0&gt;</pre>
 </div>
 </div>
 <div class="sect2">
-<h3 id="__em_irbrc_em"><a class="anchor" href="#__em_irbrc_em"></a>19.2. <em>irbrc</em></h3>
+<h3 id="irbrc"><a class="anchor" href="#irbrc"></a>19.2. <em>irbrc</em></h3>
 <div class="paragraph">
 <p>Create an <em>.irbrc</em> file for yourself in your home directory.
 Add customizations.
@@ -7463,6 +7510,14 @@ IRB.conf[:HISTORY_FILE] = &quot;#{ENV['HOME']}/.irb-save-history&quot;</code></p
 </div>
 </div>
 <div class="paragraph">
+<p>If you&#8217;d like to avoid printing the result of evaluting each expression to stderr, for example the array of tables returned from the "list" command:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">$ echo &quot;IRB.conf[:ECHO] = false&quot; &gt;&gt;~/.irbrc</code></pre>
+</div>
+</div>
+<div class="paragraph">
 <p>See the <code>ruby</code> documentation of <em>.irbrc</em> to learn about other possible configurations.</p>
 </div>
 </div>
@@ -15096,16 +15151,16 @@ The general process for log splitting, as described in <a href="#log.splitting.s
 <p>The split log manager manages all log files which need to be scanned and split.</p>
 </li>
 <li>
-<p>The split log manager places all the logs into the ZooKeeper splitlog node (<em>/hbase/splitlog</em>) as tasks.</p>
+<p>The split log manager places all the logs into the ZooKeeper splitWAL node (<em>/hbase/splitWAL</em>) as tasks.</p>
 </li>
 <li>
-<p>You can view the contents of the splitlog by issuing the following <code>zkCli</code> command. Example output is shown.</p>
+<p>You can view the contents of the splitWAL by issuing the following <code>zkCli</code> command. Example output is shown.</p>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="bash">ls /hbase/splitlog
-[hdfs%3A%2F%2Fhost2.sample.com%3A56020%2Fhbase%2F.logs%2Fhost8.sample.com%2C57020%2C1340474893275-splitting%2Fhost8.sample.com%253A57020.1340474893900,
-hdfs%3A%2F%2Fhost2.sample.com%3A56020%2Fhbase%2F.logs%2Fhost3.sample.com%2C57020%2C1340474893299-splitting%2Fhost3.sample.com%253A57020.1340474893931,
-hdfs%3A%2F%2Fhost2.sample.com%3A56020%2Fhbase%2F.logs%2Fhost4.sample.com%2C57020%2C1340474893287-splitting%2Fhost4.sample.com%253A57020.1340474893946]</code></pre>
+<pre class="CodeRay highlight"><code data-lang="bash">ls /hbase/splitWAL
+[hdfs%3A%2F%2Fhost2.sample.com%3A56020%2Fhbase%2FWALs%2Fhost8.sample.com%2C57020%2C1340474893275-splitting%2Fhost8.sample.com%253A57020.1340474893900,
+hdfs%3A%2F%2Fhost2.sample.com%3A56020%2Fhbase%2FWALs%2Fhost3.sample.com%2C57020%2C1340474893299-splitting%2Fhost3.sample.com%253A57020.1340474893931,
+hdfs%3A%2F%2Fhost2.sample.com%3A56020%2Fhbase%2FWALs%2Fhost4.sample.com%2C57020%2C1340474893287-splitting%2Fhost4.sample.com%253A57020.1340474893946]</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -15114,13 +15169,13 @@ When decoded, it looks much more simple:</p>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre>[hdfs://host2.sample.com:56020/hbase/.logs
+<pre>[hdfs://host2.sample.com:56020/hbase/WALs
 /host8.sample.com,57020,1340474893275-splitting
 /host8.sample.com%3A57020.1340474893900,
-hdfs://host2.sample.com:56020/hbase/.logs
+hdfs://host2.sample.com:56020/hbase/WALs
 /host3.sample.com,57020,1340474893299-splitting
 /host3.sample.com%3A57020.1340474893931,
-hdfs://host2.sample.com:56020/hbase/.logs
+hdfs://host2.sample.com:56020/hbase/WALs
 /host4.sample.com,57020,1340474893287-splitting
 /host4.sample.com%3A57020.1340474893946]</pre>
 </div>
@@ -15140,7 +15195,7 @@ hdfs://host2.sample.com:56020/hbase/.logs
 <div class="ulist">
 <ul>
 <li>
-<p>Once the split log manager publishes all the tasks to the splitlog znode, it monitors these task nodes and waits for them to be processed.</p>
+<p>Once the split log manager publishes all the tasks to the splitWAL znode, it monitors these task nodes and waits for them to be processed.</p>
 </li>
 <li>
 <p>Checks to see if there are any dead split log workers queued up.
@@ -15166,7 +15221,7 @@ You can use the <code>zkCli</code> <code>get</code> command to retrieve the curr
 In the example output below, the first line of the output shows that the task is currently unassigned.</p>
 <div class="listingblock">
 <div class="content">
-<pre>get /hbase/splitlog/hdfs%3A%2F%2Fhost2.sample.com%3A56020%2Fhbase%2F.logs%2Fhost6.sample.com%2C57020%2C1340474893287-splitting%2Fhost6.sample.com%253A57020.1340474893945
+<pre>get /hbase/splitWAL/hdfs%3A%2F%2Fhost2.sample.com%3A56020%2Fhbase%2FWALs%2Fhost6.sample.com%2C57020%2C1340474893287-splitting%2Fhost6.sample.com%253A57020.1340474893945
 
 unassigned host2.sample.com:57000
 cZxid = 0×7115
@@ -15232,13 +15287,13 @@ ctime = Sat Jun 23 11:13:40 PDT 2012
 <div class="paragraph">
 <p>Each RegionServer runs a daemon thread called the <em>split log worker</em>, which does the work to split the logs.
 The daemon thread starts when the RegionServer starts, and registers itself to watch HBase znodes.
-If any splitlog znode children change, it notifies a sleeping worker thread to wake up and grab more tasks.
+If any splitWAL znode children change, it notifies a sleeping worker thread to wake up and grab more tasks.
 If a worker&#8217;s current task&#8217;s node data is changed,
 the worker checks to see if the task has been taken by another worker.
 If so, the worker thread stops work on the current task.</p>
 </div>
 <div class="paragraph">
-<p>The worker monitors the splitlog znode constantly.
+<p>The worker monitors the splitWAL znode constantly.
 When a new task appears, the split log worker retrieves the task paths and checks each one until it finds an unclaimed task, which it attempts to claim.
 If the claim was successful, it attempts to perform the task and updates the task&#8217;s <code>state</code> property based on the splitting outcome.
 At this point, the split log worker scans for another unclaimed task.</p>
@@ -15966,11 +16021,11 @@ Type the following to see usage:</p>
 </div>
 </div>
 <div class="paragraph">
-<p>For example, to view the content of the file <em>hdfs://10.81.47.41:8020/hbase/TEST/1418428042/DSMP/4759508618286845475</em>, type the following:</p>
+<p>For example, to view the content of the file <em>hdfs://10.81.47.41:8020/hbase/default/TEST/1418428042/DSMP/4759508618286845475</em>, type the following:</p>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="bash"> $ ${HBASE_HOME}/bin/hbase org.apache.hadoop.hbase.io.hfile.HFile -v -f hdfs://10.81.47.41:8020/hbase/TEST/1418428042/DSMP/4759508618286845475</code></pre>
+<pre class="CodeRay highlight"><code data-lang="bash"> $ ${HBASE_HOME}/bin/hbase org.apache.hadoop.hbase.io.hfile.HFile -v -f hdfs://10.81.47.41:8020/hbase/default/TEST/1418428042/DSMP/4759508618286845475</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -25027,10 +25082,12 @@ The NameNode web application will provide links to the all the DataNodes in the
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="java">/hbase
-    /&lt;Table&gt;                    (Tables in the cluster)
-        /&lt;<span class="predefined-type">Region</span>&gt;               (Regions <span class="keyword">for</span> the table)
-            /&lt;ColumnFamily&gt;     (ColumnFamilies <span class="keyword">for</span> the <span class="predefined-type">Region</span> <span class="keyword">for</span> the table)
-                /&lt;StoreFile&gt;    (StoreFiles <span class="keyword">for</span> the ColumnFamily <span class="keyword">for</span> the Regions <span class="keyword">for</span> the table)</code></pre>
+    /data
+        /&lt;Namespace&gt;                    (Namespaces in the cluster)
+            /&lt;Table&gt;                    (Tables in the cluster)
+                /&lt;<span class="predefined-type">Region</span>&gt;               (Regions <span class="keyword">for</span> the table)
+                    /&lt;ColumnFamily&gt;     (ColumnFamilies <span class="keyword">for</span> the <span class="predefined-type">Region</span> <span class="keyword">for</span> the table)
+                        /&lt;StoreFile&gt;    (StoreFiles <span class="keyword">for</span> the ColumnFamily <span class="keyword">for</span> the Regions <span class="keyword">for</span> the table)</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -25039,7 +25096,7 @@ The NameNode web application will provide links to the all the DataNodes in the
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="java">/hbase
-    /.logs
+    /WALs
         /&lt;RegionServer&gt;    (RegionServers)
             /&lt;WAL&gt;         (WAL files <span class="keyword">for</span> the RegionServer)</code></pre>
 </div>
@@ -25050,7 +25107,7 @@ The NameNode web application will provide links to the all the DataNodes in the
 <div class="sect3">
 <h4 id="trouble.namenode.0size.hlogs"><a class="anchor" href="#trouble.namenode.0size.hlogs"></a>130.2.1. Zero size WALs with data in them</h4>
 <div class="paragraph">
-<p>Problem: when getting a listing of all the files in a RegionServer&#8217;s <em>.logs</em> directory, one file has a size of 0 but it contains data.</p>
+<p>Problem: when getting a listing of all the files in a RegionServer&#8217;s <em>WALs</em> directory, one file has a size of 0 but it contains data.</p>
 </div>
 <div class="paragraph">
 <p>Answer: It&#8217;s an HDFS quirk.
@@ -25194,6 +25251,47 @@ java.lang.UnsatisfiedLinkError: no gplcompression in java.library.path
 See the Configuration section on link:[LZO compression configuration].</p>
 </div>
 </div>
+<div class="sect3">
+<h4 id="trouble.rs.startup.hsync"><a class="anchor" href="#trouble.rs.startup.hsync"></a>132.1.3. RegionServer aborts due to lack of hsync for filesystem</h4>
+<div class="paragraph">
+<p>In order to provide data durability for writes to the cluster HBase relies on the ability to durably save state in a write ahead log. When using a version of Apache Hadoop Common&#8217;s filesystem API that supports checking on the availability of needed calls, HBase will proactively abort the cluster if it finds it can&#8217;t operate safely.</p>
+</div>
+<div class="paragraph">
+<p>For RegionServer roles, the failure will show up in logs like this:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>2018-04-05 11:36:22,785 ERROR [regionserver/192.168.1.123:16020] wal.AsyncFSWALProvider: The RegionServer async write ahead log provider relies on the ability to call hflush and hsync for proper operation during component failures, but the current FileSystem does not support doing so. Please check the config value of 'hbase.wal.dir' and ensure it points to a FileSystem mount that has suitable capabilities for output streams.
+2018-04-05 11:36:22,799 ERROR [regionserver/192.168.1.123:16020] regionserver.HRegionServer: ***** ABORTING region server 192.168.1.123,16020,1522946074234: Unhandled: cannot get log writer *****
+java.io.IOException: cannot get log writer
+        at org.apache.hadoop.hbase.wal.AsyncFSWALProvider.createAsyncWriter(AsyncFSWALProvider.java:112)
+        at org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.createWriterInstance(AsyncFSWAL.java:612)
+        at org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.createWriterInstance(AsyncFSWAL.java:124)
+        at org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.rollWriter(AbstractFSWAL.java:759)
+        at org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.rollWriter(AbstractFSWAL.java:489)
+        at org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.&lt;init&gt;(AsyncFSWAL.java:251)
+        at org.apache.hadoop.hbase.wal.AsyncFSWALProvider.createWAL(AsyncFSWALProvider.java:69)
+        at org.apache.hadoop.hbase.wal.AsyncFSWALProvider.createWAL(AsyncFSWALProvider.java:44)
+        at org.apache.hadoop.hbase.wal.AbstractFSWALProvider.getWAL(AbstractFSWALProvider.java:138)
+        at org.apache.hadoop.hbase.wal.AbstractFSWALProvider.getWAL(AbstractFSWALProvider.java:57)
+        at org.apache.hadoop.hbase.wal.WALFactory.getWAL(WALFactory.java:252)
+        at org.apache.hadoop.hbase.regionserver.HRegionServer.getWAL(HRegionServer.java:2105)
+        at org.apache.hadoop.hbase.regionserver.HRegionServer.buildServerLoad(HRegionServer.java:1326)
+        at org.apache.hadoop.hbase.regionserver.HRegionServer.tryRegionServerReport(HRegionServer.java:1191)
+        at org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:1007)
+        at java.lang.Thread.run(Thread.java:745)
+Caused by: org.apache.hadoop.hbase.util.CommonFSUtils$StreamLacksCapabilityException: hflush and hsync
+        at org.apache.hadoop.hbase.io.asyncfs.AsyncFSOutputHelper.createOutput(AsyncFSOutputHelper.java:69)
+        at org.apache.hadoop.hbase.regionserver.wal.AsyncProtobufLogWriter.initOutput(AsyncProtobufLogWriter.java:168)
+        at org.apache.hadoop.hbase.regionserver.wal.AbstractProtobufLogWriter.init(AbstractProtobufLogWriter.java:167)
+        at org.apache.hadoop.hbase.wal.AsyncFSWALProvider.createAsyncWriter(AsyncFSWALProvider.java:99)
+        ... 15 more</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>If you are attempting to run in standalone mode and see this error, please walk back through the section <a href="#quickstart">Quick Start - Standalone HBase</a> and ensure you have included <strong>all</strong> the given configuration settings.</p>
+</div>
+</div>
 </div>
 <div class="sect2">
 <h3 id="trouble.rs.runtime"><a class="anchor" href="#trouble.rs.runtime"></a>132.2. Runtime Errors</h3>
@@ -25416,6 +25514,33 @@ Sure fire solution is to just use Hadoop dfs to delete the HBase root and let HB
 <p>If you have many regions on your cluster and you see an error like that reported above in this sections title in your logs, see <a href="https://issues.apache.org/jira/browse/HBASE-4246">HBASE-4246 Cluster with too many regions cannot withstand some master failover scenarios</a>.</p>
 </div>
 </div>
+<div class="sect3">
+<h4 id="trouble.master.startup.hsync"><a class="anchor" href="#trouble.master.startup.hsync"></a>133.1.3. Master fails to become active due to lack of hsync for filesystem</h4>
+<div class="paragraph">
+<p>HBase&#8217;s internal framework for cluster operations requires the ability to durably save state in a write ahead log. When using a version of Apache Hadoop Common&#8217;s filesystem API that supports checking on the availability of needed calls, HBase will proactively abort the cluster if it finds it can&#8217;t operate safely.</p>
+</div>
+<div class="paragraph">
+<p>For Master roles, the failure will show up in logs like this:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>2018-04-05 11:18:44,653 ERROR [Thread-21] master.HMaster: Failed to become active master
+java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for proper operation during component failures, but the underlying filesystem does not support doing so. Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired level of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount that can provide it.
+        at org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.rollWriter(WALProcedureStore.java:1034)
+        at org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.recoverLease(WALProcedureStore.java:374)
+        at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.start(ProcedureExecutor.java:530)
+        at org.apache.hadoop.hbase.master.HMaster.startProcedureExecutor(HMaster.java:1267)
+        at org.apache.hadoop.hbase.master.HMaster.startServiceThreads(HMaster.java:1173)
+        at org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:881)
+        at org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2048)
+        at org.apache.hadoop.hbase.master.HMaster.lambda$run$0(HMaster.java:568)
+        at java.lang.Thread.run(Thread.java:745)</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>If you are attempting to run in standalone mode and see this error, please walk back through the section <a href="#quickstart">Quick Start - Standalone HBase</a> and ensure you have included <strong>all</strong> the given configuration settings.</p>
+</div>
+</div>
 </div>
 <div class="sect2">
 <h3 id="trouble.master.shutdown"><a class="anchor" href="#trouble.master.shutdown"></a>133.2. Shutdown Errors</h3>
@@ -26497,7 +26622,7 @@ directory.</p>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre> $ ./bin/hbase org.apache.hadoop.hbase.regionserver.wal.FSHLog --dump hdfs://example.org:8020/hbase/.logs/example.org,60020,1283516293161/10.10.21.10%3A60020.1283973724012</pre>
+<pre> $ ./bin/hbase org.apache.hadoop.hbase.regionserver.wal.FSHLog --dump hdfs://example.org:8020/hbase/WALs/example.org,60020,1283516293161/10.10.21.10%3A60020.1283973724012</pre>
 </div>
 </div>
 <div class="paragraph">
@@ -26508,7 +26633,7 @@ directory.</p>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre> $ ./bin/hbase org.apache.hadoop.hbase.regionserver.wal.FSHLog --split hdfs://example.org:8020/hbase/.logs/example.org,60020,1283516293161/</pre>
+<pre> $ ./bin/hbase org.apache.hadoop.hbase.regionserver.wal.FSHLog --split hdfs://example.org:8020/hbase/WALs/example.org,60020,1283516293161/</pre>
 </div>
 </div>
 <div class="sect4">
@@ -26519,7 +26644,7 @@ You can invoke it via the HBase cli with the 'wal' command.</p>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre> $ ./bin/hbase wal hdfs://example.org:8020/hbase/.logs/example.org,60020,1283516293161/10.10.21.10%3A60020.1283973724012</pre>
+<pre> $ ./bin/hbase wal hdfs://example.org:8020/hbase/WALs/example.org,60020,1283516293161/10.10.21.10%3A60020.1283973724012</pre>
 </div>
 </div>
 <div class="admonitionblock note">
@@ -37506,7 +37631,7 @@ The server will return cellblocks compressed using this same compressor as long
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-04-06 14:30:18 UTC
+Last updated 2018-04-07 14:29:58 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 9400161..bc7aab8 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -296,7 +296,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 1011f18..72efe98 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -271,10 +271,10 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>3600</td>
+<td>3601</td>
 <td>0</td>
 <td>0</td>
-<td>15910</td></tr></table></div>
+<td>15906</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -1302,7 +1302,7 @@
 <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>9</td></tr>
+<td>5</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.ConnectionUtils.java">org/apache/hadoop/hbase/client/ConnectionUtils.java</a></td>
 <td>0</td>
@@ -10312,12 +10312,12 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>784</td>
+<td>798</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3846</td>
+<td>3832</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
@@ -10335,7 +10335,7 @@
 <ul>
 <li>max: <tt>&quot;100&quot;</tt></li>
 <li>ignorePattern: <tt>&quot;^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated&quot;</tt></li></ul></td>
-<td>1619</td>
+<td>1616</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -10350,7 +10350,7 @@
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_whitespace.html#MethodParamPad">MethodParamPad</a></td>
-<td>174</td>
+<td>173</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td></td>
@@ -14526,7 +14526,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 26 has parse error. Missed HTML close tag 'arg'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>44</td></tr></table></div>
 <div class="section">
@@ -15162,7 +15162,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 4 has parse error. Missed HTML close tag 'pre'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>59</td></tr></table></div>
 <div class="section">
@@ -16917,7 +16917,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 19 has parse error. Details: no viable alternative at input '&lt;code&gt;\n   *   List&lt;Future&lt;' while parsing HTML_TAG</td>
 <td>167</td></tr></table></div>
 <div class="section">
@@ -19839,7 +19839,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 2 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>83</td></tr>
 <tr class="a">
@@ -22481,25 +22481,25 @@
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'locateType' must be private and have accessor methods.</td>
-<td>79</td></tr>
+<td>78</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'cache' must be private and have accessor methods.</td>
-<td>103</td></tr>
+<td>102</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'pendingRequests' must be private and have accessor methods.</td>
-<td>106</td></tr>
+<td>105</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'allRequests' must be private and have accessor methods.</td>
-<td>108</td></tr></table></div>
+<td>107</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.AsyncProcess.java">org/apache/hadoop/hbase/client/AsyncProcess.java</h3>
 <table border="0" class="table table-striped">
@@ -23678,55 +23678,31 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>315</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 102).</td>
-<td>840</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 120).</td>
-<td>861</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 104).</td>
-<td>866</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>whitespace</td>
-<td>MethodParamPad</td>
-<td>'(' is preceded with whitespace.</td>
-<td>866</td></tr>
+<td>316</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>1029</td></tr>
+<td>1022</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 510 lines (max allowed is 150).</td>
-<td>1216</td></tr>
+<td>1209</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
-<td>1669</td></tr>
+<td>1662</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>NoFinalizer</td>
 <td>Avoid using finalizer method.</td>
-<td>1942</td></tr></table></div>
+<td>1935</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.ConnectionUtils.java">org/apache/hadoop/hbase/client/ConnectionUtils.java</h3>
 <table border="0" class="table table-striped">
@@ -33846,7 +33822,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 37 has parse error. Details: no viable alternative at input '&lt;ColumnFamily,' while parsing HTML_ELEMENT</td>
 <td>29</td></tr></table></div>
 <div class="section">
@@ -50142,7 +50118,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 24 has parse error. Details: no viable alternative at input '&lt;key,' while parsing HTML_ELEMENT</td>
 <td>25</td></tr>
 <tr class="b">
@@ -53730,7 +53706,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 2 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>587</td></tr>
 <tr class="a">
@@ -73482,7 +73458,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 60 has parse error. Missed HTML close tag 'Comparable'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>29</td></tr>
 <tr class="b">
@@ -77670,7 +77646,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 0 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>74</td></tr>
 <tr class="a">
@@ -87654,7 +87630,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 33 has parse error. Missed HTML close tag 'number'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>127</td></tr>
 <tr class="a">
@@ -116205,7 +116181,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 23 has parse error. Details: no viable alternative at input '&lt;expected,' while parsing HTML_ELEMENT</td>
 <td>143</td></tr>
 <tr class="b">
@@ -116409,7 +116385,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 78 has parse error. Details: no viable alternative at input '&lt;Object&gt;, Map&lt;String,' while parsing HTML_TAG</td>
 <td>33</td></tr>
 <tr class="b">
@@ -117009,7 +116985,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 35 has parse error. Missed HTML close tag 'index'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>823</td></tr>
 <tr class="a">
@@ -120816,7 +120792,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 58 has parse error. Details: no viable alternative at input '&lt;byte[' while parsing HTML_ELEMENT</td>
 <td>426</td></tr>
 <tr class="b">
@@ -123669,7 +123645,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 037ca70..9daa741 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 3600,
-             Errors: 15910,
+      <title>File: 3601,
+             Errors: 15906,
              Warnings: 0,
              Infos: 0
       </title>
@@ -8679,7 +8679,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  9
+                  5
                 </td>
               </tr>
                           <tr>
@@ -50432,6 +50432,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestSplitMerge.java">org/apache/hadoop/hbase/TestSplitMerge.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.backup.impl.ExclusiveOperationException.java">org/apache/hadoop/hbase/backup/impl/ExclusiveOperationException.java</a>
                 </td>
                 <td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 0f65f5e..3f683b5 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -365,7 +365,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index ee4340c..25f507a 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -430,7 +430,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 1374f47..f1e3c3b 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -1095,7 +1095,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 13d9441..4036bdf 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -303,7 +303,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 6be11cd..ad944a0 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -959,7 +959,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index a930114..9c6f502 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3768,21 +3768,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>"Fri Apr  6 14:41:34 UTC 2018"</code></td>
+<td class="colLast"><code>"Sat Apr  7 14:41:23 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>"c310ef7ffd0680f8efd9a92e0a5179c02655ea6d"</code></td>
+<td class="colLast"><code>"adc0e85e8532870fa83cb21a44061c83ae77ec34"</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>"773dade883b569c27248623a9e03ad9b"</code></td>
+<td class="colLast"><code>"8dd37d815e763739c2885e1f16b7714a"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 5d198f2..31c7e11 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -66554,7 +66554,10 @@
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ConnectionImplementation.html#locateRegion-org.apache.hadoop.hbase.TableName-byte:A-boolean-boolean-int-">locateRegion(TableName, byte[], boolean, boolean, int)</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/client/ConnectionImplementation.html#locateRegionInMeta-org.apache.hadoop.hbase.TableName-byte:A-boolean-boolean-int-">locateRegionInMeta(TableName, byte[], boolean, boolean, int)</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>
+<dd>
+<div class="block">Search the hbase:meta table for the HRegionLocation info that contains the table and row we're
+ seeking.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ClusterConnection.html#locateRegions-org.apache.hadoop.hbase.TableName-">locateRegions(TableName)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a></dt>
 <dd>
 <div class="block">Gets the locations of all regions in the specified table, <i>tableName</i>.</div>
@@ -77793,8 +77796,6 @@
 <dd>
 <div class="block">Process region split reverted event.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#onScanComplete-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-java.util.List-java.lang.Throwable-">onScanComplete(TableName, AsyncNonMetaRegionLocator.LocateRequest, List&lt;Result&gt;, Throwable)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncTableResultScanner.html#onScanMetricsCreated-org.apache.hadoop.hbase.client.metrics.ScanMetrics-">onScanMetricsCreated(ScanMetrics)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncTableResultScanner.html" title="class in org.apache.hadoop.hbase.client">AsyncTableResultScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ScanResultConsumerBase.html#onScanMetricsCreated-org.apache.hadoop.hbase.client.metrics.ScanMetrics-">onScanMetricsCreated(ScanMetrics)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ScanResultConsumerBase.html" title="interface in org.apache.hadoop.hbase.client">ScanResultConsumerBase</a></dt>
@@ -77803,6 +77804,8 @@
  all other methods in this interface to give you the <a href="org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics"><code>ScanMetrics</code></a> instance for this scan
  operation.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#onScanNext-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-org.apache.hadoop.hbase.client.Result-java.lang.Throwable-">onScanNext(TableName, AsyncNonMetaRegionLocator.LocateRequest, Result, Throwable)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#onShutdown--">onShutdown()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog.RingBufferEventHandler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#onStart--">onStart()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog.RingBufferEventHandler</a></dt>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/org/apache/hadoop/hbase/class-use/RegionLocations.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/RegionLocations.html b/devapidocs/org/apache/hadoop/hbase/class-use/RegionLocations.html
index 6e6ab8e..a8d7227 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/RegionLocations.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/RegionLocations.html
@@ -288,7 +288,10 @@
                   byte[]&nbsp;row,
                   boolean&nbsp;useCache,
                   boolean&nbsp;retry,
-                  int&nbsp;replicaId)</code>&nbsp;</td>
+                  int&nbsp;replicaId)</code>
+<div class="block">Search the hbase:meta table for the HRegionLocation info that contains the table and row we're
+ seeking.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a></code></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
index 5e32e9f..6ab856e 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -3920,7 +3920,10 @@ service.</div>
                   byte[]&nbsp;row,
                   boolean&nbsp;useCache,
                   boolean&nbsp;retry,
-                  int&nbsp;replicaId)</code>&nbsp;</td>
+                  int&nbsp;replicaId)</code>
+<div class="block">Search the hbase:meta table for the HRegionLocation info that contains the table and row we're
+ seeking.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;</code></td>
@@ -4153,11 +4156,11 @@ service.</div>
 <td class="colLast"><span class="typeNameLabel">RegionInfoBuilder.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfoBuilder.html#newBuilder-org.apache.hadoop.hbase.TableName-">newBuilder</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">AsyncNonMetaRegionLocator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#onScanComplete-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-java.util.List-java.lang.Throwable-">onScanComplete</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-              <a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;results,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</code>&nbsp;</td>
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AsyncNonMetaRegionLocator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#onScanNext-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-org.apache.hadoop.hbase.client.Result-java.lang.Throwable-">onScanNext</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+          <a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
+          <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
+          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><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="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
index 1c3ccf4..784f1a1 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.75">AsyncNonMetaRegionLocator.LocateRequest</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.74">AsyncNonMetaRegionLocator.LocateRequest</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>
@@ -210,7 +210,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>row</h4>
-<pre>public final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html#line.77">row</a></pre>
+<pre>public final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html#line.76">row</a></pre>
 </li>
 </ul>
 <a name="locateType">
@@ -219,7 +219,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>locateType</h4>
-<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client">RegionLocateType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html#line.79">locateType</a></pre>
+<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client">RegionLocateType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html#line.78">locateType</a></pre>
 </li>
 </ul>
 </li>
@@ -236,7 +236,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LocateRequest</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html#line.81">LocateRequest</a>(byte[]&nbsp;row,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html#line.80">LocateRequest</a>(byte[]&nbsp;row,
                      <a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client">RegionLocateType</a>&nbsp;locateType)</pre>
 </li>
 </ul>
@@ -254,7 +254,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/client/AsyncNonMetaRegionLocator.LocateRequest.html#line.87">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html#line.86">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>
@@ -267,7 +267,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html#line.92">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html#line.91">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
index 66090a4..f8f9be5 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.101">AsyncNonMetaRegionLocator.TableCache</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.100">AsyncNonMetaRegionLocator.TableCache</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>
@@ -233,7 +233,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cache</h4>
-<pre>public final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a>&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.103">cache</a></pre>
+<pre>public final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a>&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.102">cache</a></pre>
 </li>
 </ul>
 <a name="pendingRequests">
@@ -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>pendingRequests</h4>
-<pre>public final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.106">pendingRequests</a></pre>
+<pre>public final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.105">pendingRequests</a></pre>
 </li>
 </ul>
 <a name="allRequests">
@@ -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>allRequests</h4>
-<pre>public 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="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</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;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.108">allRequests</a></pre>
+<pre>public 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="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</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;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.107">allRequests</a></pre>
 </li>
 </ul>
 </li>
@@ -268,7 +268,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TableCache</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.101">TableCache</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.100">TableCache</a>()</pre>
 </li>
 </ul>
 </li>
@@ -285,7 +285,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasQuota</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.111">hasQuota</a>(int&nbsp;max)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.110">hasQuota</a>(int&nbsp;max)</pre>
 </li>
 </ul>
 <a name="isPending-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-">
@@ -294,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>isPending</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.115">isPending</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.114">isPending</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req)</pre>
 </li>
 </ul>
 <a name="send-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-">
@@ -303,7 +303,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>send</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.119">send</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.118">send</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req)</pre>
 </li>
 </ul>
 <a name="getCandidate--">
@@ -312,7 +312,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCandidate</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.123">getCandidate</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.122">getCandidate</a>()</pre>
 </li>
 </ul>
 <a name="clearCompletedRequests-java.util.Optional-">
@@ -321,7 +321,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>clearCompletedRequests</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.127">clearCompletedRequests</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;location)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.126">clearCompletedRequests</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;location)</pre>
 </li>
 </ul>
 <a name="tryComplete-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-java.util.concurrent.CompletableFuture-java.util.Optional-">
@@ -330,7 +330,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tryComplete</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.137">tryComplete</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html#line.136">tryComplete</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
                             <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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;future,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;location)</pre>
 </li>


[03/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 8f81112..77b8415 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -321,7 +321,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 6e98f65..6b7c8d5 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -425,7 +425,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index df36939..57cc192 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -281,7 +281,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index a7e36aa..f31f5fc 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -278,7 +278,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 259efd9..e299966 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -481,7 +481,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 0046b81..173dda8 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 118e684..76ad903 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -449,7 +449,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index a0989b8..b8c671c 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -404,7 +404,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index eb50e8e..d53d9e6 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -430,7 +430,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 46ff261..281ef25 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -365,7 +365,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index d51caa6..fd9b64d 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -759,7 +759,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 80992cd..35673f8 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -325,7 +325,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index d45236f..bd99592 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -295,7 +295,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index c4b7f55..d6d15ce 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -321,7 +321,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 36b73e7..77089bd 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -298,7 +298,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index b5152ff..c884854 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -293,7 +293,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 5e859f0..5bef1f5 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -321,7 +321,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index f63c68c..fa02adb 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -289,7 +289,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 4780b70..3f5de83 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -323,7 +323,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 97dc6df..dee5272 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -510,7 +510,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 9a8476e..95b8d2d 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <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" />
@@ -720,7 +720,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 8e0c8d5..162eb18 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -2036,6 +2036,7 @@
 <li><a href="org/apache/hadoop/hbase/master/TestSplitLogManager.Expr.html" title="interface in org.apache.hadoop.hbase.master" target="classFrame"><span class="interfaceName">TestSplitLogManager.Expr</span></a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestSplitLogWorker</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestSplitLogWorker.DummyServer</a></li>
+<li><a href="org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestSplitMerge</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestSplitOrMergeStatus.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestSplitOrMergeStatus</a></li>
 <li><a href="org/apache/hadoop/hbase/mapred/TestSplitTable.html" title="class in org.apache.hadoop.hbase.mapred" target="classFrame">TestSplitTable</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestSplitTableRegionProcedure</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 6ae35f8..868e3db 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -2036,6 +2036,7 @@
 <li><a href="org/apache/hadoop/hbase/master/TestSplitLogManager.Expr.html" title="interface in org.apache.hadoop.hbase.master"><span class="interfaceName">TestSplitLogManager.Expr</span></a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitLogWorker</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitLogWorker.DummyServer</a></li>
+<li><a href="org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase">TestSplitMerge</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestSplitOrMergeStatus.html" title="class in org.apache.hadoop.hbase.client">TestSplitOrMergeStatus</a></li>
 <li><a href="org/apache/hadoop/hbase/mapred/TestSplitTable.html" title="class in org.apache.hadoop.hbase.mapred">TestSplitTable</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestSplitTableRegionProcedure</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index abaf9ef..3606867 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -6109,6 +6109,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestSize.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSize.html" title="class in org.apache.hadoop.hbase">TestSize</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestSplitMerge.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase">TestSplitMerge</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html" title="class in org.apache.hadoop.hbase">TestStochasticBalancerJmxMetrics</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestTableName.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestTableName.html" title="class in org.apache.hadoop.hbase">TestTableName</a></dt>
@@ -29150,12 +29152,12 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.CustomRegionServerObserver.html#postRollWALWriterRequest-org.apache.hadoop.hbase.coprocessor.ObserverContext-">postRollWALWriterRequest(ObserverContext&lt;RegionServerCoprocessorEnvironment&gt;)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.CustomRegionServerObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestCoprocessorMetrics.CustomRegionServerObserver</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#postScannerClose-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-">postScannerClose(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, InternalScanner)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html" title="class in org.apache.hadoop.hbase.client">TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html#postScannerClose-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-">postScannerClose(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, InternalScanner)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">SimpleRegionObserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html#postScannerFilterRow-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-org.apache.hadoop.hbase.Cell-boolean-">postScannerFilterRow(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, InternalScanner, Cell, boolean)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">SimpleRegionObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#postScannerNext-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-java.util.List-int-boolean-">postScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, InternalScanner, List&lt;Result&gt;, int, boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html" title="class in org.apache.hadoop.hbase.client">TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#postScannerNext-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-java.util.List-int-boolean-">postScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, InternalScanner, List&lt;Result&gt;, int, boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.CustomInnerRegionObserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html#postScannerNext-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-java.util.List-int-boolean-">postScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, InternalScanner, List&lt;Result&gt;, int, boolean)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">SimpleRegionObserver</a></dt>
@@ -29782,6 +29784,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html#preScannerClose-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-">preScannerClose(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, InternalScanner)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">SimpleRegionObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#preScannerNext-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-java.util.List-int-boolean-">preScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, InternalScanner, List&lt;Result&gt;, int, boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html" title="class in org.apache.hadoop.hbase.client">TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestReplicasClient.SlowMeCopro.html#preScannerNext-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-java.util.List-int-boolean-">preScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, InternalScanner, List&lt;Result&gt;, int, boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestReplicasClient.SlowMeCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicasClient.SlowMeCopro</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html#preScannerNext-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-java.util.List-int-boolean-">preScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, InternalScanner, List&lt;Result&gt;, int, boolean)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">SimpleRegionObserver</a></dt>
@@ -29792,8 +29796,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerWithCorruptHFile.CorruptHFileCoprocessor.html#preScannerNext-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-java.util.List-int-boolean-">preScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, InternalScanner, List&lt;Result&gt;, int, boolean)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerWithCorruptHFile.CorruptHFileCoprocessor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerWithCorruptHFile.CorruptHFileCoprocessor</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#preScannerOpen-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.Scan-">preScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, Scan)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html" title="class in org.apache.hadoop.hbase.client">TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncRegionLocatorTimeout.SleepRegionObserver.html#preScannerOpen-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.Scan-">preScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, Scan)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncRegionLocatorTimeout.SleepRegionObserver.html" title="class in org.apache.hadoop.hbase.client">TestAsyncRegionLocatorTimeout.SleepRegionObserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestReplicasClient.SlowMeCopro.html#preScannerOpen-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.Scan-">preScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, Scan)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestReplicasClient.SlowMeCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicasClient.SlowMeCopro</a></dt>
@@ -36221,6 +36223,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestNamespace.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestNamespace.html" title="class in org.apache.hadoop.hbase">TestNamespace</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestSplitMerge.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase">TestSplitMerge</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestZooKeeper.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestZooKeeper.html" title="class in org.apache.hadoop.hbase">TestZooKeeper</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.html#setup--">setup()</a></span> - Method in class org.apache.hadoop.hbase.thrift2.<a href="org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.html" title="class in org.apache.hadoop.hbase.thrift2">TestThriftHBaseServiceHandler</a></dt>
@@ -41062,6 +41066,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestSequenceIdMonotonicallyIncreasing.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSequenceIdMonotonicallyIncreasing.html" title="class in org.apache.hadoop.hbase">TestSequenceIdMonotonicallyIncreasing</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestSplitMerge.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase">TestSplitMerge</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/TestCanaryTool.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/TestCanaryTool.html" title="class in org.apache.hadoop.hbase.tool">TestCanaryTool</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/compaction/TestMajorCompactor.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.util.compaction.<a href="org/apache/hadoop/hbase/util/compaction/TestMajorCompactor.html" title="class in org.apache.hadoop.hbase.util.compaction">TestMajorCompactor</a></dt>
@@ -41737,6 +41743,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/token/TestGenerateDelegationToken.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.security.token.<a href="org/apache/hadoop/hbase/security/token/TestGenerateDelegationToken.html" title="class in org.apache.hadoop.hbase.security.token">TestGenerateDelegationToken</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestSplitMerge.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase">TestSplitMerge</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckReplication</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/TestReadWriteSeqIdFiles.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/TestReadWriteSeqIdFiles.html" title="class in org.apache.hadoop.hbase.wal">TestReadWriteSeqIdFiles</a></dt>
@@ -60194,6 +60202,10 @@
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestSplitLogWorker.DummyServer</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestSplitMerge</span></a> - Class in <a href="org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestSplitMerge.html#TestSplitMerge--">TestSplitMerge()</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase">TestSplitMerge</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactionPolicy.html#testSplitOffStripe--">testSplitOffStripe()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.compactions.<a href="org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactionPolicy.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">TestStripeCompactionPolicy</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactionPolicy.html#testSplitOffStripeDropDeletes--">testSplitOffStripeDropDeletes()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.compactions.<a href="org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactionPolicy.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">TestStripeCompactionPolicy</a></dt>
@@ -64681,6 +64693,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestSequenceIdMonotonicallyIncreasing.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSequenceIdMonotonicallyIncreasing.html" title="class in org.apache.hadoop.hbase">TestSequenceIdMonotonicallyIncreasing</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestSplitMerge.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase">TestSplitMerge</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html" title="class in org.apache.hadoop.hbase">TestStochasticBalancerJmxMetrics</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/thrift/TestCallQueue.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/TestCallQueue.html" title="class in org.apache.hadoop.hbase.thrift">TestCallQueue</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/org/apache/hadoop/hbase/TestSize.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/TestSize.html b/testdevapidocs/org/apache/hadoop/hbase/TestSize.html
index df69ab4..e577f3a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/TestSize.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/TestSize.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../org/apache/hadoop/hbase/TestServerSideScanMetricsFromClientSide.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?org/apache/hadoop/hbase/TestSize.html" target="_top">Frames</a></li>
@@ -289,7 +289,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../org/apache/hadoop/hbase/TestServerSideScanMetricsFromClientSide.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?org/apache/hadoop/hbase/TestSize.html" target="_top">Frames</a></li>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html b/testdevapidocs/org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html
index e294d11..89b1d21 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../org/apache/hadoop/hbase/TestSize.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../org/apache/hadoop/hbase/TestTableName.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -607,7 +607,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/master/balancer/BalancerTes
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../org/apache/hadoop/hbase/TestSize.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../org/apache/hadoop/hbase/TestTableName.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/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 e159b3f..3168ee3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -145,8 +145,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.Failure.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupDeleteWithFailures.Failure</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.Failure.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupDeleteWithFailures.Failure</span></a></li>
 </ul>
 </li>
 </ul>


[08/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

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

<TRUNCATED>

[07/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

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

<TRUNCATED>

[12/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/org/apache/hadoop/hbase/client/class-use/AsyncNonMetaRegionLocator.LocateRequest.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/AsyncNonMetaRegionLocator.LocateRequest.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/AsyncNonMetaRegionLocator.LocateRequest.html
index b7cf901..b584ce9 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/AsyncNonMetaRegionLocator.LocateRequest.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/AsyncNonMetaRegionLocator.LocateRequest.html
@@ -151,11 +151,11 @@
             <a href="../../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">AsyncNonMetaRegionLocator.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#onScanComplete-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-java.util.List-java.lang.Throwable-">onScanComplete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-              <a href="../../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;results,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</code>&nbsp;</td>
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AsyncNonMetaRegionLocator.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#onScanNext-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-org.apache.hadoop.hbase.client.Result-java.lang.Throwable-">onScanNext</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+          <a href="../../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
+          <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
+          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html
index 4734812..0c8a4ab 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html
@@ -876,50 +876,57 @@ service.</div>
       <a href="../../../../../../org/apache/hadoop/hbase/client/AdvancedScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">AdvancedScanResultConsumer.ScanController</a>&nbsp;controller)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AsyncNonMetaRegionLocator.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#onScanNext-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-org.apache.hadoop.hbase.client.Result-java.lang.Throwable-">onScanNext</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+          <a href="../../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
+          <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
+          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]</code></td>
 <td class="colLast"><span class="typeNameLabel">CompleteScanResultCache.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/CompleteScanResultCache.html#prependCombined-org.apache.hadoop.hbase.client.Result:A-int-">prependCombined</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;results,
                int&nbsp;length)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">BatchScanResultCache.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/BatchScanResultCache.html#recordLastResult-org.apache.hadoop.hbase.client.Result-">recordLastResult</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">AllowPartialScanResultCache.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/AllowPartialScanResultCache.html#recordLastResult-org.apache.hadoop.hbase.client.Result-">recordLastResult</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">ClientScanner.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/ClientScanner.html#regionExhausted-org.apache.hadoop.hbase.client.Result:A-">regionExhausted</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;values)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><span class="typeNameLabel">BatchScanResultCache.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/BatchScanResultCache.html#regroupResults-org.apache.hadoop.hbase.client.Result-">regroupResults</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">ClientScanner.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/ClientScanner.html#scanExhausted-org.apache.hadoop.hbase.client.Result:A-">scanExhausted</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;values)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">SingleResponse.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/SingleResponse.Entry.html#setResult-org.apache.hadoop.hbase.client.Result-">setResult</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">ScannerCallableWithReplicas.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#updateCurrentlyServingReplica-org.apache.hadoop.hbase.client.ScannerCallable-org.apache.hadoop.hbase.client.Result:A-java.util.concurrent.atomic.AtomicBoolean-java.util.concurrent.ExecutorService-">updateCurrentlyServingReplica</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a>&nbsp;scanner,
                              <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;result,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a>&nbsp;done,
                              <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)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">AsyncScanSingleRegionRpcRetryingCaller.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#updateNextStartRowWhenError-org.apache.hadoop.hbase.client.Result-">updateNextStartRowWhenError</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]</code></td>
 <td class="colLast"><span class="typeNameLabel">CompleteScanResultCache.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/CompleteScanResultCache.html#updateNumberOfCompleteResultsAndReturn-org.apache.hadoop.hbase.client.Result...-">updateNumberOfCompleteResultsAndReturn</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>...&nbsp;results)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ConnectionUtils.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/ConnectionUtils.html#updateResultsMetrics-org.apache.hadoop.hbase.client.metrics.ScanMetrics-org.apache.hadoop.hbase.client.Result:A-boolean-">updateResultsMetrics</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a>&nbsp;scanMetrics,
                     <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;rrs,
@@ -958,13 +965,6 @@ service.</div>
          <a href="../../../../../../org/apache/hadoop/hbase/client/RawAsyncTableImpl.Converter.html" title="interface in org.apache.hadoop.hbase.client">RawAsyncTableImpl.Converter</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest,byte[],<a href="../../../../../../org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client">RowMutations</a>&gt;&nbsp;reqConvert,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>,RESP&gt;&nbsp;respConverter)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">AsyncNonMetaRegionLocator.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#onScanComplete-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-java.util.List-java.lang.Throwable-">onScanComplete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-              <a href="../../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;results,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</code>&nbsp;</td>
-</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html b/devapidocs/org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html
index 591fa80..a3ee332 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html
@@ -341,7 +341,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter">CompareFilter.CompareOp</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html#line.241">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter">CompareFilter.CompareOp</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html#line.27">values</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
@@ -362,7 +362,7 @@ for (CompareFilter.CompareOp c : CompareFilter.CompareOp.values())
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter">CompareFilter.CompareOp</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html#line.241">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter">CompareFilter.CompareOp</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html#line.27">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/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 4ad181e..bdb26d0 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 = "c310ef7ffd0680f8efd9a92e0a5179c02655ea6d";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "adc0e85e8532870fa83cb21a44061c83ae77ec34";<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 = "Fri Apr  6 14:41:34 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Sat Apr  7 14:41:23 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 = "773dade883b569c27248623a9e03ad9b";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "8dd37d815e763739c2885e1f16b7714a";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


[11/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
index 63b8c53..88e70e2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
@@ -25,460 +25,470 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<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.HConstants.CATALOG_FAMILY;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.HConstants.NINES;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.HConstants.ZEROES;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.TableName.META_TABLE_NAME;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.createClosestRowAfter;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.isEmptyStopRow;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.client.RegionInfo.createRegionName;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.util.Bytes.BYTES_COMPARATOR;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.util.CollectionUtils.computeIfAbsent;<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.util.Arrays;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.HashSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.Iterator;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.LinkedHashMap;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.List;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Map;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.Optional;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Set;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.concurrent.CompletableFuture;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.ConcurrentMap;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.concurrent.ConcurrentNavigableMap;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.TableName;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.slf4j.Logger;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.slf4j.LoggerFactory;<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> * The asynchronous locator for regions other than meta.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.Private<a name="line.59"></a>
-<span class="sourceLineNo">060</span>class AsyncNonMetaRegionLocator {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final Logger LOG = LoggerFactory.getLogger(AsyncNonMetaRegionLocator.class);<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  static final String MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE =<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    "hbase.client.meta.max.concurrent.locate.per.table";<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final int DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE = 8;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private final AsyncConnectionImpl conn;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final int maxConcurrentLocateRequestPerTable;<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private final ConcurrentMap&lt;TableName, TableCache&gt; cache = new ConcurrentHashMap&lt;&gt;();<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static final class LocateRequest {<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>    public final byte[] row;<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public final RegionLocateType locateType;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>    public LocateRequest(byte[] row, RegionLocateType locateType) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      this.row = row;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      this.locateType = locateType;<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>    @Override<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    public int hashCode() {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      return Bytes.hashCode(row) ^ locateType.hashCode();<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>    @Override<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    public boolean equals(Object obj) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      if (obj == null || obj.getClass() != LocateRequest.class) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        return false;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      LocateRequest that = (LocateRequest) obj;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      return locateType.equals(that.locateType) &amp;&amp; Bytes.equals(row, that.row);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private static final class TableCache {<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>    public final ConcurrentNavigableMap&lt;byte[], HRegionLocation&gt; cache =<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      new ConcurrentSkipListMap&lt;&gt;(BYTES_COMPARATOR);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>    public final Set&lt;LocateRequest&gt; pendingRequests = new HashSet&lt;&gt;();<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public final Map&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt; allRequests =<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      new LinkedHashMap&lt;&gt;();<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    public boolean hasQuota(int max) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      return pendingRequests.size() &lt; max;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public boolean isPending(LocateRequest req) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      return pendingRequests.contains(req);<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>    public void send(LocateRequest req) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      pendingRequests.add(req);<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>    public Optional&lt;LocateRequest&gt; getCandidate() {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      return allRequests.keySet().stream().filter(r -&gt; !isPending(r)).findFirst();<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>    public void clearCompletedRequests(Optional&lt;HRegionLocation&gt; location) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      for (Iterator&lt;Map.Entry&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt;&gt; iter =<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        allRequests.entrySet().iterator(); iter.hasNext();) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        Map.Entry&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt; entry = iter.next();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        if (tryComplete(entry.getKey(), entry.getValue(), location)) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>          iter.remove();<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>    private boolean tryComplete(LocateRequest req, CompletableFuture&lt;HRegionLocation&gt; future,<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        Optional&lt;HRegionLocation&gt; location) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      if (future.isDone()) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        return true;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      }<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      if (!location.isPresent()) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        return false;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      }<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      HRegionLocation loc = location.get();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      boolean completed;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      if (req.locateType.equals(RegionLocateType.BEFORE)) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        // for locating the row before current row, the common case is to find the previous region<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        // in reverse scan, so we check the endKey first. In general, the condition should be<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        // startKey &lt; req.row and endKey &gt;= req.row. Here we split it to endKey == req.row ||<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        // (endKey &gt; req.row &amp;&amp; startKey &lt; req.row). The two conditions are equal since startKey &lt;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        // endKey.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        int c = Bytes.compareTo(loc.getRegion().getEndKey(), req.row);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        completed =<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          c == 0 || (c &gt; 0 &amp;&amp; Bytes.compareTo(loc.getRegion().getStartKey(), req.row) &lt; 0);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      } else {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        completed = loc.getRegion().containsRow(req.row);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      if (completed) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        future.complete(loc);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        return true;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      } else {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        return false;<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>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  AsyncNonMetaRegionLocator(AsyncConnectionImpl conn) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    this.conn = conn;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    this.maxConcurrentLocateRequestPerTable = conn.getConfiguration().getInt(<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE);<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 TableCache getTableCache(TableName tableName) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    return computeIfAbsent(cache, tableName, TableCache::new);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  private void removeFromCache(HRegionLocation loc) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    TableCache tableCache = cache.get(loc.getRegion().getTable());<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    if (tableCache == null) {<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>    tableCache.cache.computeIfPresent(loc.getRegion().getStartKey(), (k, oldLoc) -&gt; {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      if (oldLoc.getSeqNum() &gt; loc.getSeqNum() ||<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        !oldLoc.getServerName().equals(loc.getServerName())) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        return oldLoc;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return null;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    });<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  // return whether we add this loc to cache<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  private boolean addToCache(TableCache tableCache, HRegionLocation loc) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    if (LOG.isTraceEnabled()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      LOG.trace("Try adding " + loc + " to cache");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    byte[] startKey = loc.getRegion().getStartKey();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    HRegionLocation oldLoc = tableCache.cache.putIfAbsent(startKey, loc);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (oldLoc == null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      return true;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    if (oldLoc.getSeqNum() &gt; loc.getSeqNum() ||<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      oldLoc.getServerName().equals(loc.getServerName())) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      if (LOG.isTraceEnabled()) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        LOG.trace("Will not add " + loc + " to cache because the old value " + oldLoc +<a name="line.205"></a>
-<span class="sourceLineNo">206</span>          " is newer than us or has the same server name");<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      return false;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    return loc == tableCache.cache.compute(startKey, (k, oldValue) -&gt; {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (oldValue == null || oldValue.getSeqNum() &lt;= loc.getSeqNum()) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        return loc;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      if (LOG.isTraceEnabled()) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        LOG.trace("Will not add " + loc + " to cache because the old value " + oldValue +<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          " is newer than us or has the same server name." +<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          " Maybe it is updated before we replace it");<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      return oldValue;<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>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      justification = "Called by lambda expression")<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  private void addToCache(HRegionLocation loc) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    addToCache(getTableCache(loc.getRegion().getTable()), loc);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    if (LOG.isTraceEnabled()) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      LOG.trace("Try adding " + loc + " to cache");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>  private void complete(TableName tableName, LocateRequest req, HRegionLocation loc,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      Throwable error) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    if (error != null) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      LOG.warn("Failed to locate region in '" + tableName + "', row='" +<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        Bytes.toStringBinary(req.row) + "', locateType=" + req.locateType, error);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    Optional&lt;LocateRequest&gt; toSend = Optional.empty();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    TableCache tableCache = getTableCache(tableName);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    if (loc != null) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      if (!addToCache(tableCache, loc)) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        // someone is ahead of us.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        synchronized (tableCache) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          tableCache.pendingRequests.remove(req);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          tableCache.clearCompletedRequests(Optional.empty());<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          // Remove a complete locate request in a synchronized block, so the table cache must have<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          // quota to send a candidate request.<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          toSend = tableCache.getCandidate();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          toSend.ifPresent(r -&gt; tableCache.send(r));<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        toSend.ifPresent(r -&gt; locateInMeta(tableName, r));<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        return;<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>    synchronized (tableCache) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      tableCache.pendingRequests.remove(req);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      if (error instanceof DoNotRetryIOException) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        CompletableFuture&lt;?&gt; future = tableCache.allRequests.remove(req);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        if (future != null) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          future.completeExceptionally(error);<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>      tableCache.clearCompletedRequests(Optional.ofNullable(loc));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // Remove a complete locate request in a synchronized block, so the table cache must have<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      // quota to send a candidate request.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      toSend = tableCache.getCandidate();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      toSend.ifPresent(r -&gt; tableCache.send(r));<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    toSend.ifPresent(r -&gt; locateInMeta(tableName, r));<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>  private void onScanComplete(TableName tableName, LocateRequest req, List&lt;Result&gt; results,<a name="line.272"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.HConstants.NINES;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.HConstants.ZEROES;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.TableName.META_TABLE_NAME;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.createClosestRowAfter;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.isEmptyStopRow;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.client.RegionInfo.createRegionName;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.util.Bytes.BYTES_COMPARATOR;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.util.CollectionUtils.computeIfAbsent;<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.util.Arrays;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.HashSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Iterator;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.LinkedHashMap;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Optional;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.Set;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.CompletableFuture;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.ConcurrentMap;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentNavigableMap;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.slf4j.Logger;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.slf4j.LoggerFactory;<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> * The asynchronous locator for regions other than meta.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.Private<a name="line.58"></a>
+<span class="sourceLineNo">059</span>class AsyncNonMetaRegionLocator {<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private static final Logger LOG = LoggerFactory.getLogger(AsyncNonMetaRegionLocator.class);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  static final String MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE =<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    "hbase.client.meta.max.concurrent.locate.per.table";<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static final int DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE = 8;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private final AsyncConnectionImpl conn;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private final int maxConcurrentLocateRequestPerTable;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private final ConcurrentMap&lt;TableName, TableCache&gt; cache = new ConcurrentHashMap&lt;&gt;();<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final class LocateRequest {<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>    public final byte[] row;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>    public final RegionLocateType locateType;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    public LocateRequest(byte[] row, RegionLocateType locateType) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      this.row = row;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      this.locateType = locateType;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>    @Override<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    public int hashCode() {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      return Bytes.hashCode(row) ^ locateType.hashCode();<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>    @Override<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    public boolean equals(Object obj) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      if (obj == null || obj.getClass() != LocateRequest.class) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>        return false;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      LocateRequest that = (LocateRequest) obj;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      return locateType.equals(that.locateType) &amp;&amp; Bytes.equals(row, that.row);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private static final class TableCache {<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public final ConcurrentNavigableMap&lt;byte[], HRegionLocation&gt; cache =<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      new ConcurrentSkipListMap&lt;&gt;(BYTES_COMPARATOR);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public final Set&lt;LocateRequest&gt; pendingRequests = new HashSet&lt;&gt;();<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>    public final Map&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt; allRequests =<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      new LinkedHashMap&lt;&gt;();<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public boolean hasQuota(int max) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      return pendingRequests.size() &lt; max;<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>    public boolean isPending(LocateRequest req) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      return pendingRequests.contains(req);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public void send(LocateRequest req) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      pendingRequests.add(req);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    public Optional&lt;LocateRequest&gt; getCandidate() {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      return allRequests.keySet().stream().filter(r -&gt; !isPending(r)).findFirst();<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>    public void clearCompletedRequests(Optional&lt;HRegionLocation&gt; location) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      for (Iterator&lt;Map.Entry&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt;&gt; iter =<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        allRequests.entrySet().iterator(); iter.hasNext();) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        Map.Entry&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt; entry = iter.next();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        if (tryComplete(entry.getKey(), entry.getValue(), location)) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>          iter.remove();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      }<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    private boolean tryComplete(LocateRequest req, CompletableFuture&lt;HRegionLocation&gt; future,<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        Optional&lt;HRegionLocation&gt; location) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      if (future.isDone()) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        return true;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      if (!location.isPresent()) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        return false;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      HRegionLocation loc = location.get();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      boolean completed;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      if (req.locateType.equals(RegionLocateType.BEFORE)) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        // for locating the row before current row, the common case is to find the previous region<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        // in reverse scan, so we check the endKey first. In general, the condition should be<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        // startKey &lt; req.row and endKey &gt;= req.row. Here we split it to endKey == req.row ||<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        // (endKey &gt; req.row &amp;&amp; startKey &lt; req.row). The two conditions are equal since startKey &lt;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        // endKey.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        int c = Bytes.compareTo(loc.getRegion().getEndKey(), req.row);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        completed =<a name="line.153"></a>
+<span class="sourceLineNo">154</span>          c == 0 || (c &gt; 0 &amp;&amp; Bytes.compareTo(loc.getRegion().getStartKey(), req.row) &lt; 0);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      } else {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        completed = loc.getRegion().containsRow(req.row);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      if (completed) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        future.complete(loc);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        return true;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      } else {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        return false;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      }<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  AsyncNonMetaRegionLocator(AsyncConnectionImpl conn) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    this.conn = conn;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    this.maxConcurrentLocateRequestPerTable = conn.getConfiguration().getInt(<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE);<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>  private TableCache getTableCache(TableName tableName) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    return computeIfAbsent(cache, tableName, TableCache::new);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private void removeFromCache(HRegionLocation loc) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    TableCache tableCache = cache.get(loc.getRegion().getTable());<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    if (tableCache == null) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      return;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    tableCache.cache.computeIfPresent(loc.getRegion().getStartKey(), (k, oldLoc) -&gt; {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      if (oldLoc.getSeqNum() &gt; loc.getSeqNum() ||<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        !oldLoc.getServerName().equals(loc.getServerName())) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        return oldLoc;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      }<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>  }<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  // return whether we add this loc to cache<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  private boolean addToCache(TableCache tableCache, HRegionLocation loc) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    if (LOG.isTraceEnabled()) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.trace("Try adding " + loc + " to cache");<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    byte[] startKey = loc.getRegion().getStartKey();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    HRegionLocation oldLoc = tableCache.cache.putIfAbsent(startKey, loc);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    if (oldLoc == null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      return true;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (oldLoc.getSeqNum() &gt; loc.getSeqNum() ||<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      oldLoc.getServerName().equals(loc.getServerName())) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      if (LOG.isTraceEnabled()) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        LOG.trace("Will not add " + loc + " to cache because the old value " + oldLoc +<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          " is newer than us or has the same server name");<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      return false;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    return loc == tableCache.cache.compute(startKey, (k, oldValue) -&gt; {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (oldValue == null || oldValue.getSeqNum() &lt;= loc.getSeqNum()) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        return loc;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      if (LOG.isTraceEnabled()) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        LOG.trace("Will not add " + loc + " to cache because the old value " + oldValue +<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          " is newer than us or has the same server name." +<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          " Maybe it is updated before we replace it");<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      }<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      return oldValue;<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><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      justification = "Called by lambda expression")<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  private void addToCache(HRegionLocation loc) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    addToCache(getTableCache(loc.getRegion().getTable()), loc);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    if (LOG.isTraceEnabled()) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      LOG.trace("Try adding " + loc + " to cache");<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  private void complete(TableName tableName, LocateRequest req, HRegionLocation loc,<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      Throwable error) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    if (error != null) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      LOG.warn("Failed to locate region in '" + tableName + "', row='" +<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        Bytes.toStringBinary(req.row) + "', locateType=" + req.locateType, error);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    Optional&lt;LocateRequest&gt; toSend = Optional.empty();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    TableCache tableCache = getTableCache(tableName);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    if (loc != null) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      if (!addToCache(tableCache, loc)) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        // someone is ahead of us.<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        synchronized (tableCache) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          tableCache.pendingRequests.remove(req);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          tableCache.clearCompletedRequests(Optional.empty());<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          // Remove a complete locate request in a synchronized block, so the table cache must have<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          // quota to send a candidate request.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>          toSend = tableCache.getCandidate();<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          toSend.ifPresent(r -&gt; tableCache.send(r));<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        toSend.ifPresent(r -&gt; locateInMeta(tableName, r));<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        return;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    synchronized (tableCache) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      tableCache.pendingRequests.remove(req);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      if (error instanceof DoNotRetryIOException) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        CompletableFuture&lt;?&gt; future = tableCache.allRequests.remove(req);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        if (future != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          future.completeExceptionally(error);<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>      tableCache.clearCompletedRequests(Optional.ofNullable(loc));<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      // Remove a complete locate request in a synchronized block, so the table cache must have<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      // quota to send a candidate request.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      toSend = tableCache.getCandidate();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      toSend.ifPresent(r -&gt; tableCache.send(r));<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    toSend.ifPresent(r -&gt; locateInMeta(tableName, r));<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>  // return whether we should stop the scan<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  private boolean onScanNext(TableName tableName, LocateRequest req, Result result,<a name="line.272"></a>
 <span class="sourceLineNo">273</span>      Throwable error) {<a name="line.273"></a>
 <span class="sourceLineNo">274</span>    if (error != null) {<a name="line.274"></a>
 <span class="sourceLineNo">275</span>      complete(tableName, req, null, error);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return;<a name="line.276"></a>
+<span class="sourceLineNo">276</span>      return true;<a name="line.276"></a>
 <span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (results.isEmpty()) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      complete(tableName, req, null, new TableNotFoundException(tableName));<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      return;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    RegionLocations locs = MetaTableAccessor.getRegionLocations(results.get(0));<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    if (LOG.isDebugEnabled()) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      LOG.debug("The fetched location of '" + tableName + "', row='" +<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        Bytes.toStringBinary(req.row) + "', locateType=" + req.locateType + " is " + locs);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    if (locs == null || locs.getDefaultRegionLocation() == null) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      complete(tableName, req, null,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        new IOException(String.format("No location found for '%s', row='%s', locateType=%s",<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          tableName, Bytes.toStringBinary(req.row), req.locateType)));<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      return;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    HRegionLocation loc = locs.getDefaultRegionLocation();<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    RegionInfo info = loc.getRegion();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    if (info == null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      complete(tableName, req, null,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        new IOException(String.format("HRegionInfo is null for '%s', row='%s', locateType=%s",<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          tableName, Bytes.toStringBinary(req.row), req.locateType)));<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      return;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    if (!info.getTable().equals(tableName)) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      complete(tableName, req, null, new TableNotFoundException(<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          "Table '" + tableName + "' was not found, got: '" + info.getTable() + "'"));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      return;<a name="line.304"></a>
+<span class="sourceLineNo">278</span>    RegionLocations locs = MetaTableAccessor.getRegionLocations(result);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    LOG.debug("The fetched location of '{}', row='{}', locateType={} is {}", tableName,<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      Bytes.toStringBinary(req.row), req.locateType, locs);<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>    if (locs == null || locs.getDefaultRegionLocation() == null) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      complete(tableName, req, null,<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        new IOException(String.format("No location found for '%s', row='%s', locateType=%s",<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          tableName, Bytes.toStringBinary(req.row), req.locateType)));<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      return true;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    HRegionLocation loc = locs.getDefaultRegionLocation();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    RegionInfo info = loc.getRegion();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    if (info == null) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      complete(tableName, req, null,<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        new IOException(String.format("HRegionInfo is null for '%s', row='%s', locateType=%s",<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          tableName, Bytes.toStringBinary(req.row), req.locateType)));<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      return true;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    if (info.isSplitParent()) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      return false;<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    if (loc.getServerName() == null) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      complete(tableName, req, null,<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        new NoServerForRegionException(<a name="line.301"></a>
+<span class="sourceLineNo">302</span>            String.format("No server address listed for region '%s', row='%s', locateType=%s",<a name="line.302"></a>
+<span class="sourceLineNo">303</span>              info.getRegionNameAsString(), Bytes.toStringBinary(req.row), req.locateType)));<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      return true;<a name="line.304"></a>
 <span class="sourceLineNo">305</span>    }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    if (info.isSplit()) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      complete(tableName, req, null,<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        new RegionOfflineException(<a name="line.308"></a>
-<span class="sourceLineNo">309</span>            "the only available region for the required row is a split parent," +<a name="line.309"></a>
-<span class="sourceLineNo">310</span>              " the daughters should be online soon: '" + info.getRegionNameAsString() + "'"));<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      return;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    if (info.isOffline()) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      complete(tableName, req, null, new RegionOfflineException("the region is offline, could" +<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        " be caused by a disable table call: '" + info.getRegionNameAsString() + "'"));<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    if (loc.getServerName() == null) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      complete(tableName, req, null,<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        new NoServerForRegionException(<a name="line.320"></a>
-<span class="sourceLineNo">321</span>            String.format("No server address listed for region '%s', row='%s', locateType=%s",<a name="line.321"></a>
-<span class="sourceLineNo">322</span>              info.getRegionNameAsString(), Bytes.toStringBinary(req.row), req.locateType)));<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    complete(tableName, req, loc, null);<a name="line.325"></a>
+<span class="sourceLineNo">306</span>    complete(tableName, req, loc, null);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return true;<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>  private HRegionLocation locateRowInCache(TableCache tableCache, TableName tableName, byte[] row) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    Map.Entry&lt;byte[], HRegionLocation&gt; entry = tableCache.cache.floorEntry(row);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    if (entry == null) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return null;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    HRegionLocation loc = entry.getValue();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    byte[] endKey = loc.getRegion().getEndKey();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    if (isEmptyStopRow(endKey) || Bytes.compareTo(row, endKey) &lt; 0) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      if (LOG.isTraceEnabled()) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.CURRENT);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return loc;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    } else {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      return null;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  }<a name="line.326"></a>
 <span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  private HRegionLocation locateRowInCache(TableCache tableCache, TableName tableName, byte[] row) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    Map.Entry&lt;byte[], HRegionLocation&gt; entry = tableCache.cache.floorEntry(row);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    if (entry == null) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      return null;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    HRegionLocation loc = entry.getValue();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    byte[] endKey = loc.getRegion().getEndKey();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    if (isEmptyStopRow(endKey) || Bytes.compareTo(row, endKey) &lt; 0) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      if (LOG.isTraceEnabled()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.CURRENT);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      return loc;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    } else {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      return null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private HRegionLocation locateRowBeforeInCache(TableCache tableCache, TableName tableName,<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      byte[] row) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    Map.Entry&lt;byte[], HRegionLocation&gt; entry =<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      isEmptyStopRow(row) ? tableCache.cache.lastEntry() : tableCache.cache.lowerEntry(row);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    if (entry == null) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      return null;<a name="line.351"></a>
+<span class="sourceLineNo">328</span>  private HRegionLocation locateRowBeforeInCache(TableCache tableCache, TableName tableName,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      byte[] row) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Map.Entry&lt;byte[], HRegionLocation&gt; entry =<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      isEmptyStopRow(row) ? tableCache.cache.lastEntry() : tableCache.cache.lowerEntry(row);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    if (entry == null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      return null;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    HRegionLocation loc = entry.getValue();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    if (isEmptyStopRow(loc.getRegion().getEndKey()) ||<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      Bytes.compareTo(loc.getRegion().getEndKey(), row) &gt;= 0) {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      if (LOG.isTraceEnabled()) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +<a name="line.339"></a>
+<span class="sourceLineNo">340</span>          Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.BEFORE);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return loc;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    } else {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      return null;<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>  private void locateInMeta(TableName tableName, LocateRequest req) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    if (LOG.isTraceEnabled()) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      LOG.trace("Try locate '" + tableName + "', row='" + Bytes.toStringBinary(req.row) +<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        "', locateType=" + req.locateType + " in meta");<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    }<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    HRegionLocation loc = entry.getValue();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    if (isEmptyStopRow(loc.getRegion().getEndKey()) ||<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      Bytes.compareTo(loc.getRegion().getEndKey(), row) &gt;= 0) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      if (LOG.isTraceEnabled()) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +<a name="line.357"></a>
-<span class="sourceLineNo">358</span>          Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.BEFORE);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      return loc;<a name="line.360"></a>
+<span class="sourceLineNo">353</span>    byte[] metaStartKey;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    if (req.locateType.equals(RegionLocateType.BEFORE)) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      if (isEmptyStopRow(req.row)) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        byte[] binaryTableName = tableName.getName();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        metaStartKey = Arrays.copyOf(binaryTableName, binaryTableName.length + 1);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      } else {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        metaStartKey = createRegionName(tableName, req.row, ZEROES, false);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      }<a name="line.360"></a>
 <span class="sourceLineNo">361</span>    } else {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      return null;<a name="line.362"></a>
+<span class="sourceLineNo">362</span>      metaStartKey = createRegionName(tableName, req.row, NINES, false);<a name="line.362"></a>
 <span class="sourceLineNo">363</span>    }<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  }<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  private void locateInMeta(TableName tableName, LocateRequest req) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    if (LOG.isTraceEnabled()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      LOG.trace("Try locate '" + tableName + "', row='" + Bytes.toStringBinary(req.row) +<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        "', locateType=" + req.locateType + " in meta");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    byte[] metaKey;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    if (req.locateType.equals(RegionLocateType.BEFORE)) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      if (isEmptyStopRow(req.row)) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        byte[] binaryTableName = tableName.getName();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        metaKey = Arrays.copyOf(binaryTableName, binaryTableName.length + 1);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      } else {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        metaKey = createRegionName(tableName, req.row, ZEROES, false);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    } else {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      metaKey = createRegionName(tableName, req.row, NINES, false);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    conn.getTable(META_TABLE_NAME)<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        .scanAll(new Scan().withStartRow(metaKey).setReversed(true).addFamily(CATALOG_FAMILY)<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            .setOneRowLimit())<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        .whenComplete((results, error) -&gt; onScanComplete(tableName, req, results, error));<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private HRegionLocation locateInCache(TableCache tableCache, TableName tableName, byte[] row,<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      RegionLocateType locateType) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return locateType.equals(RegionLocateType.BEFORE)<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      ? locateRowBeforeInCache(tableCache, tableName, row)<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      : locateRowInCache(tableCache, tableName, row);<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>  // locateToPrevious is true means we will use the start key of a region to locate the region<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  // placed before it. Used for reverse scan. See the comment of<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  // AsyncRegionLocator.getPreviousRegionLocation.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  private CompletableFuture&lt;HRegionLocation&gt; getRegionLocationInternal(TableName tableName,<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      byte[] row, RegionLocateType locateType, boolean reload) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    // AFTER should be convert to CURRENT before calling this method<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    assert !locateType.equals(RegionLocateType.AFTER);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    TableCache tableCache = getTableCache(tableName);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    if (!reload) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      HRegionLocation loc = locateInCache(tableCache, tableName, row, locateType);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      if (loc != null) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        return CompletableFuture.completedFuture(loc);<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>    CompletableFuture&lt;HRegionLocation&gt; future;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    LocateRequest req;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    boolean sendRequest = false;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    synchronized (tableCache) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      // check again<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (!reload) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        HRegionLocation loc = locateInCache(tableCache, tableName, row, locateType);<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        if (loc != null) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          return CompletableFuture.completedFuture(loc);<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>      req = new LocateRequest(row, locateType);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      future = tableCache.allRequests.get(req);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (future == null) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        future = new CompletableFuture&lt;&gt;();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        tableCache.allRequests.put(req, future);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        if (tableCache.hasQuota(maxConcurrentLocateRequestPerTable) &amp;&amp; !tableCache.isPending(req)) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>          tableCache.send(req);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          sendRequest = true;<a name="line.427"></a>
+<span class="sourceLineNo">364</span>    byte[] metaStopKey =<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      RegionInfo.createRegionName(tableName, HConstants.EMPTY_START_ROW, "", false);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    conn.getTable(META_TABLE_NAME)<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      .scan(new Scan().withStartRow(metaStartKey).withStopRow(metaStopKey, true)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        .addFamily(HConstants.CATALOG_FAMILY).setReversed(true).setCaching(5)<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        .setReadType(ReadType.PREAD), new AdvancedScanResultConsumer() {<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>          private boolean completeNormally = false;<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>          @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          public void onError(Throwable error) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>            onScanNext(tableName, req, null, error);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>          @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          public void onComplete() {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>            if (!completeNormally) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>              onScanNext(tableName, req, null, new TableNotFoundException(tableName));<a name="line.381"></a>
+<span class="sourceLineNo">382</span>            }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>          @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          public void onNext(Result[] results, ScanController controller) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>            for (Result result : results) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>              if (onScanNext(tableName, req, result, null)) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>                completeNormally = true;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>                controller.terminate();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>                return;<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>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private HRegionLocation locateInCache(TableCache tableCache, TableName tableName, byte[] row,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      RegionLocateType locateType) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return locateType.equals(RegionLocateType.BEFORE)<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      ? locateRowBeforeInCache(tableCache, tableName, row)<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      : locateRowInCache(tableCache, tableName, row);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>  // locateToPrevious is true means we will use the start key of a region to locate the region<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  // placed before it. Used for reverse scan. See the comment of<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  // AsyncRegionLocator.getPreviousRegionLocation.<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private CompletableFuture&lt;HRegionLocation&gt; getRegionLocationInternal(TableName tableName,<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      byte[] row, RegionLocateType locateType, boolean reload) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    // AFTER should be convert to CURRENT before calling this method<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    assert !locateType.equals(RegionLocateType.AFTER);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    TableCache tableCache = getTableCache(tableName);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    if (!reload) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      HRegionLocation loc = locateInCache(tableCache, tableName, row, locateType);<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      if (loc != null) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        return CompletableFuture.completedFuture(loc);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    CompletableFuture&lt;HRegionLocation&gt; future;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    LocateRequest req;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    boolean sendRequest = false;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    synchronized (tableCache) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      // check again<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      if (!reload) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        HRegionLocation loc = locateInCache(tableCache, tableName, row, locateType);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (loc != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          return CompletableFuture.completedFuture(loc);<a name="line.427"></a>
 <span class="sourceLineNo">428</span>        }<a name="line.428"></a>
 <span class="sourceLineNo">429</span>      }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (sendRequest) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      locateInMeta(tableName, req);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    return future;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, byte[] row,<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      RegionLocateType locateType, boolean reload) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (locateType.equals(RegionLocateType.BEFORE)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      return getRegionLocationInternal(tableName, row, locateType, reload);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    } else {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      // as we know the exact row after us, so we can just create the new row, and use the same<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      // algorithm to locate it.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      if (locateType.equals(RegionLocateType.AFTER)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        row = createClosestRowAfter(row);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      return getRegionLocationInternal(tableName, row, RegionLocateType.CURRENT, reload);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  void updateCachedLocation(HRegionLocation loc, Throwable exception) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      TableCache tableCache = cache.get(l.getRegion().getTable());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      if (tableCache == null) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        return null;<a name="line.455"></a>
+<span class="sourceLineNo">430</span>      req = new LocateRequest(row, locateType);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      future = tableCache.allRequests.get(req);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      if (future == null) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        future = new CompletableFuture&lt;&gt;();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>        tableCache.allRequests.put(req, future);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>        if (tableCache.hasQuota(maxConcurrentLocateRequestPerTable) &amp;&amp; !tableCache.isPending(req)) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          tableCache.send(req);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>          sendRequest = true;<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>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    if (sendRequest) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      locateInMeta(tableName, req);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    return future;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>  CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, byte[] row,<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      RegionLocateType locateType, boolean reload) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    if (locateType.equals(RegionLocateType.BEFORE)) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      return getRegionLocationInternal(tableName, row, locateType, reload);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    } else {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // as we know the exact row after us, so we can just create the new row, and use the same<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      // algorithm to locate it.<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      if (locateType.equals(RegionLocateType.AFTER)) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        row = createClosestRowAfter(row);<a name="line.455"></a>
 <span class="sourceLineNo">456</span>      }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      return tableCache.cache.get(l.getRegion().getStartKey());<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    }, this::addToCache, this::removeFromCache);<a name="line.458"></a>
+<span class="sourceLineNo">457</span>      return getRegionLocationInternal(tableName, row, RegionLocateType.CURRENT, reload);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
 <span class="sourceLineNo">459</span>  }<a name="line.459"></a>
 <span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>  void clearCache(TableName tableName) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    TableCache tableCache = cache.remove(tableName);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    if (tableCache == null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    synchronized (tableCache) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (!tableCache.allRequests.isEmpty()) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        IOException error = new IOException("Cache cleared");<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        tableCache.allRequests.values().forEach(f -&gt; f.completeExceptionally(error));<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      }<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>}<a name="line.473"></a>
+<span class="sourceLineNo">461</span>  void updateCachedLocation(HRegionLocation loc, Throwable exception) {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      TableCache tableCache = cache.get(l.getRegion().getTable());<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      if (tableCache == null) {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        return null;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      return tableCache.cache.get(l.getRegion().getStartKey());<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    }, this::addToCache, this::removeFromCache);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span cla

<TRUNCATED>

[16/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 027a235..5cc953e 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,16 +5,16 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20180406144614+00'00')
-/CreationDate (D:20180406144614+00'00')
+/ModDate (D:20180407144604+00'00')
+/CreationDate (D:20180407144604+00'00')
 >>
 endobj
 2 0 obj
 << /Type /Catalog
 /Pages 3 0 R
 /Names 26 0 R
-/Outlines 4577 0 R
-/PageLabels 4803 0 R
+/Outlines 4588 0 R
+/PageLabels 4814 0 R
 /PageMode /UseOutlines
 /OpenAction [7 0 R /FitH 842.89]
 /ViewerPreferences << /DisplayDocTitle true
@@ -23,8 +23,8 @@ endobj
 endobj
 3 0 obj
 << /Type /Pages
-/Count 713
-/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 44 0 R 47 0 R 50 0 R 54 0 R 61 0 R 65 0 R 67 0 R 69 0 R 76 0 R 79 0 R 81 0 R 87 0 R 90 0 R 92 0 R 94 0 R 101 0 R 107 0 R 112 0 R 114 0 R 130 0 R 135 0 R 142 0 R 151 0 R 159 0 R 168 0 R 179 0 R 183 0 R 185 0 R 189 0 R 198 0 R 207 0 R 215 0 R 224 0 R 229 0 R 238 0 R 246 0 R 255 0 R 268 0 R 275 0 R 285 0 R 293 0 R 301 0 R 308 0 R 316 0 R 322 0 R 328 0 R 335 0 R 343 0 R 354 0 R 363 0 R 375 0 R 383 0 R 391 0 R 398 0 R 407 0 R 415 0 R 425 0 R 433 0 R 440 0 R 449 0 R 461 0 R 470 0 R 477 0 R 485 0 R 493 0 R 502 0 R 509 0 R 514 0 R 518 0 R 523 0 R 527 0 R 543 0 R 554 0 R 558 0 R 573 0 R 578 0 R 583 0 R 585 0 R 587 0 R 590 0 R 592 0 R 594 0 R 602 0 R 608 0 R 613 0 R 618 0 R 625 0 R 635 0 R 643 0 R 647 0 R 651 0 R 653 0 R 663 0 R 677 0 R 685 0 R 692 0 R 703 0 R 711 0 R 728 0 R 742 0 R 747 0 R 753 0 R 756 0 R 760 0 R 764 0 R 767 0 R 770 0 R 772 0 R 775 0 R 780 0 R 782 0 R 787 0 R 791 0 R 796 0 R 800 0 R 803 0 R 809 0 R 811 0 R 816 0 
 R 824 0 R 826 0 R 829 0 R 832 0 R 835 0 R 838 0 R 853 0 R 860 0 R 869 0 R 880 0 R 886 0 R 896 0 R 907 0 R 910 0 R 914 0 R 917 0 R 922 0 R 931 0 R 939 0 R 943 0 R 947 0 R 952 0 R 956 0 R 958 0 R 973 0 R 984 0 R 989 0 R 996 0 R 999 0 R 1007 0 R 1015 0 R 1020 0 R 1025 0 R 1030 0 R 1032 0 R 1034 0 R 1036 0 R 1046 0 R 1054 0 R 1058 0 R 1065 0 R 1072 0 R 1080 0 R 1084 0 R 1090 0 R 1095 0 R 1103 0 R 1107 0 R 1112 0 R 1114 0 R 1121 0 R 1129 0 R 1134 0 R 1141 0 R 1151 0 R 1155 0 R 1157 0 R 1159 0 R 1163 0 R 1166 0 R 1171 0 R 1174 0 R 1186 0 R 1190 0 R 1196 0 R 1205 0 R 1210 0 R 1214 0 R 1218 0 R 1220 0 R 1223 0 R 1226 0 R 1229 0 R 1233 0 R 1237 0 R 1241 0 R 1246 0 R 1250 0 R 1253 0 R 1255 0 R 1265 0 R 1268 0 R 1276 0 R 1285 0 R 1291 0 R 1295 0 R 1297 0 R 1309 0 R 1312 0 R 1318 0 R 1326 0 R 1329 0 R 1336 0 R 1344 0 R 1346 0 R 1348 0 R 1357 0 R 1359 0 R 1361 0 R 1364 0 R 1366 0 R 1368 0 R 1370 0 R 1372 0 R 1375 0 R 1379 0 R 1384 0 R 1386 0 R 1388 0 R 1390 0 R 1395 0 R 1402 0 R 1408 0 R 1411 0 
 R 1413 0 R 1416 0 R 1420 0 R 1424 0 R 1427 0 R 1429 0 R 1431 0 R 1434 0 R 1439 0 R 1445 0 R 1453 0 R 1467 0 R 1481 0 R 1484 0 R 1489 0 R 1502 0 R 1507 0 R 1522 0 R 1530 0 R 1534 0 R 1543 0 R 1558 0 R 1572 0 R 1584 0 R 1589 0 R 1595 0 R 1605 0 R 1610 0 R 1615 0 R 1623 0 R 1626 0 R 1635 0 R 1641 0 R 1646 0 R 1658 0 R 1663 0 R 1669 0 R 1671 0 R 1677 0 R 1685 0 R 1693 0 R 1697 0 R 1699 0 R 1701 0 R 1713 0 R 1719 0 R 1728 0 R 1734 0 R 1748 0 R 1753 0 R 1762 0 R 1770 0 R 1776 0 R 1781 0 R 1786 0 R 1789 0 R 1792 0 R 1797 0 R 1802 0 R 1809 0 R 1813 0 R 1818 0 R 1827 0 R 1832 0 R 1837 0 R 1839 0 R 1848 0 R 1855 0 R 1861 0 R 1866 0 R 1870 0 R 1873 0 R 1878 0 R 1883 0 R 1892 0 R 1894 0 R 1896 0 R 1899 0 R 1908 0 R 1911 0 R 1918 0 R 1926 0 R 1931 0 R 1934 0 R 1939 0 R 1941 0 R 1944 0 R 1949 0 R 1952 0 R 1954 0 R 1957 0 R 1960 0 R 1963 0 R 1973 0 R 1978 0 R 1983 0 R 1985 0 R 1993 0 R 2000 0 R 2007 0 R 2013 0 R 2018 0 R 2020 0 R 2029 0 R 2039 0 R 2049 0 R 2055 0 R 2062 0 R 2064 0 R 2069 0 R 2071 
 0 R 2073 0 R 2077 0 R 2080 0 R 2083 0 R 2088 0 R 2092 0 R 2103 0 R 2106 0 R 2111 0 R 2114 0 R 2116 0 R 2121 0 R 2131 0 R 2133 0 R 2135 0 R 2137 0 R 2139 0 R 2142 0 R 2144 0 R 2146 0 R 2149 0 R 2151 0 R 2153 0 R 2158 0 R 2163 0 R 2172 0 R 2174 0 R 2176 0 R 2182 0 R 2184 0 R 2189 0 R 2191 0 R 2193 0 R 2200 0 R 2205 0 R 2209 0 R 2214 0 R 2218 0 R 2220 0 R 2222 0 R 2226 0 R 2229 0 R 2231 0 R 2233 0 R 2237 0 R 2239 0 R 2242 0 R 2244 0 R 2246 0 R 2248 0 R 2255 0 R 2258 0 R 2263 0 R 2265 0 R 2267 0 R 2269 0 R 2271 0 R 2279 0 R 2290 0 R 2304 0 R 2315 0 R 2320 0 R 2325 0 R 2329 0 R 2332 0 R 2337 0 R 2342 0 R 2344 0 R 2347 0 R 2349 0 R 2351 0 R 2353 0 R 2358 0 R 2360 0 R 2373 0 R 2376 0 R 2384 0 R 2390 0 R 2402 0 R 2416 0 R 2429 0 R 2446 0 R 2450 0 R 2452 0 R 2456 0 R 2474 0 R 2480 0 R 2492 0 R 2496 0 R 2500 0 R 2509 0 R 2519 0 R 2524 0 R 2536 0 R 2549 0 R 2567 0 R 2576 0 R 2579 0 R 2588 0 R 2606 0 R 2613 0 R 2616 0 R 2621 0 R 2625 0 R 2628 0 R 2637 0 R 2645 0 R 2649 0 R 2651 0 R 2655 0 R 266
 9 0 R 2678 0 R 2683 0 R 2687 0 R 2690 0 R 2692 0 R 2694 0 R 2696 0 R 2701 0 R 2714 0 R 2724 0 R 2732 0 R 2738 0 R 2744 0 R 2754 0 R 2761 0 R 2767 0 R 2769 0 R 2778 0 R 2787 0 R 2796 0 R 2800 0 R 2809 0 R 2813 0 R 2823 0 R 2831 0 R 2839 0 R 2844 0 R 2848 0 R 2852 0 R 2854 0 R 2860 0 R 2864 0 R 2868 0 R 2874 0 R 2880 0 R 2883 0 R 2889 0 R 2893 0 R 2902 0 R 2907 0 R 2912 0 R 2922 0 R 2928 0 R 2935 0 R 2938 0 R 2941 0 R 2948 0 R 2953 0 R 2956 0 R 2961 0 R 2971 0 R 2976 0 R 2978 0 R 2982 0 R 2989 0 R 2992 0 R 3003 0 R 3009 0 R 3018 0 R 3021 0 R 3031 0 R 3036 0 R 3040 0 R 3048 0 R 3054 0 R 3058 0 R 3060 0 R 3071 0 R 3076 0 R 3079 0 R 3081 0 R 3083 0 R 3093 0 R 3100 0 R 3104 0 R 3107 0 R 3113 0 R 3116 0 R 3119 0 R 3122 0 R 3129 0 R 3134 0 R 3140 0 R 3144 0 R 3147 0 R 3150 0 R 3152 0 R 3156 0 R 3167 0 R 3169 0 R 3173 0 R 3176 0 R 3180 0 R 3183 0 R 3187 0 R 3189 0 R 3202 0 R 3207 0 R 3212 0 R 3219 0 R 3227 0 R 3229 0 R 3237 0 R 3255 0 R 3267 0 R 3273 0 R 3289 0 R 3292 0 R 3297 0 R 3299 0 R 3
 306 0 R 3311 0 R 3314 0 R 3316 0 R 3318 0 R 3320 0 R 3323 0 R 3341 0 R 3344 0 R 3349 0 R 3355 0 R 3365 0 R 3370 0 R 3380 0 R 3391 0 R 3398 0 R 3407 0 R 3412 0 R 3415 0 R 3423 0 R 3427 0 R 3432 0 R 3437 0 R 3450 0 R 3453 0 R 3459 0 R 3464 0 R 3473 0 R 3483 0 R 3489 0 R 3498 0 R 3507 0 R 3512 0 R 3518 0 R 3524 0 R 3529 0 R 3531 0 R 3537 0 R 3544 0 R 3546 0 R 3553 0 R 3555 0 R 3561 0 R 3569 0 R 3575 0 R 3584 0 R 3591 0 R 3602 0 R 3611 0 R 3622 0 R 3635 0 R 3638 0 R 3640 0 R 3645 0 R 3658 0 R 3663 0 R 3669 0 R 3673 0 R 3676 0 R 3681 0 R 3683 0 R 3687 0 R 3689 0 R 3693 0 R 3696 0 R 3699 0 R 3707 0 R 3709 0 R 3713 0 R 3716 0 R 3724 0 R 3731 0 R 3735 0 R 3738 0 R 3740 0 R 3744 0 R 3749 0 R 3754 0 R 3757 0 R 3766 0 R 3771 0 R 3775 0 R 3778 0 R 3786 0 R 3791 0 R 3799 0 R 3804 0 R 3806 0 R 3812 0 R 3814 0 R 3819 0 R 3823 0 R 3829 0 R 3833 0 R 3845 0 R 3861 0 R 3876 0 R 3881 0 R 3884 0 R 3887 0 R 3893 0 R 3898 0 R 3900 0 R 3902 0 R 3904 0 R 3906 0 R 3908 0 R 3917 0 R 3921 0 R 3925 0 R 3929 0 R
  3931 0 R 3938 0 R 3948 0 R 3955 0 R 3958 0 R 3961 0 R 3963 0 R 3970 0 R 3977 0 R 3987 0 R 3991 0 R 3994 0 R 3998 0 R 4001 0 R 4007 0 R 4010 0 R 4026 0 R 4031 0 R 4055 0 R 4059 0 R 4066 0 R 4077 0 R 4086 0 R 4089 0 R 4092 0 R 4095 0 R 4111 0 R 4118 0 R 4125 0 R]
+/Count 717
+/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 44 0 R 47 0 R 50 0 R 54 0 R 61 0 R 63 0 R 67 0 R 69 0 R 71 0 R 78 0 R 81 0 R 83 0 R 89 0 R 92 0 R 94 0 R 96 0 R 103 0 R 109 0 R 114 0 R 116 0 R 132 0 R 137 0 R 144 0 R 153 0 R 161 0 R 170 0 R 181 0 R 185 0 R 187 0 R 191 0 R 200 0 R 209 0 R 217 0 R 226 0 R 231 0 R 240 0 R 248 0 R 257 0 R 270 0 R 277 0 R 287 0 R 295 0 R 303 0 R 310 0 R 318 0 R 324 0 R 330 0 R 337 0 R 345 0 R 356 0 R 365 0 R 377 0 R 385 0 R 393 0 R 400 0 R 409 0 R 417 0 R 427 0 R 435 0 R 442 0 R 451 0 R 463 0 R 472 0 R 479 0 R 487 0 R 495 0 R 504 0 R 511 0 R 516 0 R 520 0 R 525 0 R 529 0 R 545 0 R 556 0 R 560 0 R 575 0 R 580 0 R 585 0 R 587 0 R 589 0 R 592 0 R 594 0 R 596 0 R 604 0 R 610 0 R 615 0 R 620 0 R 627 0 R 637 0 R 645 0 R 649 0 R 653 0 R 655 0 R 665 0 R 679 0 R 687 0 R 694 0 R 706 0 R 714 0 R 730 0 R 744 0 R 750 0 R 756 0 R 759 0 R 763 0 R 767 0 R 770 0 R 773 0 R 775 0 R 778 0 R 782 0 R 784 0 R 788 0 R 794 0 R 799 0 R 803 0 R 806 0 R 812 0 R 814 0 R
  818 0 R 826 0 R 828 0 R 831 0 R 834 0 R 837 0 R 840 0 R 854 0 R 862 0 R 872 0 R 883 0 R 889 0 R 899 0 R 910 0 R 913 0 R 917 0 R 920 0 R 925 0 R 934 0 R 942 0 R 946 0 R 950 0 R 955 0 R 959 0 R 961 0 R 976 0 R 987 0 R 992 0 R 999 0 R 1002 0 R 1010 0 R 1018 0 R 1023 0 R 1028 0 R 1033 0 R 1035 0 R 1037 0 R 1039 0 R 1049 0 R 1057 0 R 1061 0 R 1068 0 R 1075 0 R 1083 0 R 1087 0 R 1093 0 R 1098 0 R 1106 0 R 1110 0 R 1115 0 R 1117 0 R 1123 0 R 1131 0 R 1138 0 R 1145 0 R 1156 0 R 1160 0 R 1162 0 R 1164 0 R 1168 0 R 1171 0 R 1176 0 R 1179 0 R 1191 0 R 1195 0 R 1201 0 R 1209 0 R 1214 0 R 1218 0 R 1222 0 R 1224 0 R 1227 0 R 1230 0 R 1233 0 R 1237 0 R 1241 0 R 1245 0 R 1250 0 R 1254 0 R 1257 0 R 1259 0 R 1269 0 R 1272 0 R 1280 0 R 1289 0 R 1295 0 R 1299 0 R 1301 0 R 1312 0 R 1315 0 R 1321 0 R 1329 0 R 1332 0 R 1339 0 R 1347 0 R 1349 0 R 1351 0 R 1360 0 R 1362 0 R 1364 0 R 1367 0 R 1369 0 R 1371 0 R 1373 0 R 1375 0 R 1378 0 R 1382 0 R 1387 0 R 1389 0 R 1391 0 R 1393 0 R 1398 0 R 1405 0 R 1411 0 R
  1414 0 R 1416 0 R 1419 0 R 1423 0 R 1427 0 R 1430 0 R 1432 0 R 1434 0 R 1437 0 R 1442 0 R 1448 0 R 1456 0 R 1470 0 R 1484 0 R 1487 0 R 1492 0 R 1505 0 R 1510 0 R 1525 0 R 1533 0 R 1537 0 R 1546 0 R 1561 0 R 1575 0 R 1587 0 R 1592 0 R 1598 0 R 1608 0 R 1613 0 R 1618 0 R 1626 0 R 1629 0 R 1638 0 R 1644 0 R 1649 0 R 1661 0 R 1666 0 R 1672 0 R 1674 0 R 1680 0 R 1688 0 R 1696 0 R 1700 0 R 1702 0 R 1704 0 R 1716 0 R 1722 0 R 1731 0 R 1737 0 R 1750 0 R 1756 0 R 1762 0 R 1773 0 R 1779 0 R 1784 0 R 1789 0 R 1792 0 R 1795 0 R 1800 0 R 1805 0 R 1812 0 R 1816 0 R 1821 0 R 1830 0 R 1835 0 R 1840 0 R 1842 0 R 1851 0 R 1858 0 R 1864 0 R 1869 0 R 1873 0 R 1876 0 R 1881 0 R 1886 0 R 1892 0 R 1894 0 R 1896 0 R 1899 0 R 1910 0 R 1913 0 R 1920 0 R 1928 0 R 1933 0 R 1937 0 R 1942 0 R 1944 0 R 1947 0 R 1952 0 R 1955 0 R 1957 0 R 1960 0 R 1963 0 R 1966 0 R 1976 0 R 1981 0 R 1986 0 R 1988 0 R 1996 0 R 2003 0 R 2010 0 R 2016 0 R 2021 0 R 2023 0 R 2032 0 R 2042 0 R 2052 0 R 2058 0 R 2065 0 R 2067 0 R 2072 0
  R 2074 0 R 2076 0 R 2080 0 R 2083 0 R 2086 0 R 2091 0 R 2095 0 R 2106 0 R 2109 0 R 2114 0 R 2117 0 R 2119 0 R 2124 0 R 2134 0 R 2136 0 R 2138 0 R 2140 0 R 2142 0 R 2145 0 R 2147 0 R 2149 0 R 2152 0 R 2154 0 R 2156 0 R 2161 0 R 2166 0 R 2175 0 R 2177 0 R 2179 0 R 2185 0 R 2187 0 R 2192 0 R 2194 0 R 2196 0 R 2203 0 R 2208 0 R 2212 0 R 2217 0 R 2221 0 R 2223 0 R 2225 0 R 2229 0 R 2232 0 R 2234 0 R 2236 0 R 2240 0 R 2242 0 R 2245 0 R 2247 0 R 2249 0 R 2251 0 R 2258 0 R 2261 0 R 2266 0 R 2268 0 R 2270 0 R 2272 0 R 2274 0 R 2282 0 R 2293 0 R 2307 0 R 2318 0 R 2322 0 R 2327 0 R 2331 0 R 2334 0 R 2339 0 R 2345 0 R 2347 0 R 2350 0 R 2352 0 R 2354 0 R 2356 0 R 2361 0 R 2363 0 R 2376 0 R 2379 0 R 2387 0 R 2393 0 R 2405 0 R 2419 0 R 2432 0 R 2449 0 R 2453 0 R 2455 0 R 2459 0 R 2477 0 R 2483 0 R 2495 0 R 2499 0 R 2503 0 R 2512 0 R 2524 0 R 2529 0 R 2539 0 R 2552 0 R 2571 0 R 2580 0 R 2583 0 R 2592 0 R 2609 0 R 2616 0 R 2619 0 R 2624 0 R 2628 0 R 2631 0 R 2640 0 R 2648 0 R 2652 0 R 2654 0 R 2658
  0 R 2672 0 R 2681 0 R 2686 0 R 2690 0 R 2693 0 R 2695 0 R 2697 0 R 2699 0 R 2704 0 R 2717 0 R 2727 0 R 2735 0 R 2741 0 R 2747 0 R 2757 0 R 2764 0 R 2770 0 R 2772 0 R 2781 0 R 2790 0 R 2792 0 R 2800 0 R 2808 0 R 2810 0 R 2819 0 R 2822 0 R 2832 0 R 2836 0 R 2844 0 R 2852 0 R 2857 0 R 2861 0 R 2865 0 R 2867 0 R 2873 0 R 2877 0 R 2881 0 R 2887 0 R 2893 0 R 2896 0 R 2902 0 R 2906 0 R 2915 0 R 2920 0 R 2925 0 R 2935 0 R 2941 0 R 2948 0 R 2951 0 R 2954 0 R 2961 0 R 2966 0 R 2969 0 R 2974 0 R 2984 0 R 2989 0 R 2991 0 R 2995 0 R 3002 0 R 3005 0 R 3016 0 R 3022 0 R 3031 0 R 3034 0 R 3044 0 R 3049 0 R 3053 0 R 3061 0 R 3067 0 R 3071 0 R 3073 0 R 3084 0 R 3089 0 R 3092 0 R 3094 0 R 3096 0 R 3106 0 R 3113 0 R 3117 0 R 3120 0 R 3126 0 R 3129 0 R 3132 0 R 3135 0 R 3142 0 R 3147 0 R 3153 0 R 3157 0 R 3160 0 R 3163 0 R 3165 0 R 3169 0 R 3180 0 R 3182 0 R 3186 0 R 3189 0 R 3193 0 R 3196 0 R 3200 0 R 3202 0 R 3215 0 R 3220 0 R 3225 0 R 3231 0 R 3239 0 R 3241 0 R 3249 0 R 3267 0 R 3278 0 R 3285 0 R 33
 01 0 R 3304 0 R 3309 0 R 3311 0 R 3318 0 R 3323 0 R 3326 0 R 3328 0 R 3330 0 R 3332 0 R 3335 0 R 3353 0 R 3356 0 R 3361 0 R 3367 0 R 3377 0 R 3382 0 R 3392 0 R 3402 0 R 3410 0 R 3419 0 R 3424 0 R 3427 0 R 3435 0 R 3439 0 R 3444 0 R 3449 0 R 3462 0 R 3465 0 R 3471 0 R 3476 0 R 3485 0 R 3495 0 R 3501 0 R 3510 0 R 3519 0 R 3524 0 R 3530 0 R 3536 0 R 3541 0 R 3543 0 R 3549 0 R 3556 0 R 3558 0 R 3565 0 R 3567 0 R 3573 0 R 3581 0 R 3587 0 R 3596 0 R 3603 0 R 3614 0 R 3623 0 R 3634 0 R 3647 0 R 3650 0 R 3652 0 R 3657 0 R 3670 0 R 3675 0 R 3681 0 R 3685 0 R 3688 0 R 3693 0 R 3695 0 R 3699 0 R 3701 0 R 3705 0 R 3708 0 R 3711 0 R 3719 0 R 3721 0 R 3725 0 R 3728 0 R 3736 0 R 3743 0 R 3747 0 R 3750 0 R 3752 0 R 3756 0 R 3761 0 R 3766 0 R 3769 0 R 3778 0 R 3783 0 R 3787 0 R 3790 0 R 3798 0 R 3803 0 R 3811 0 R 3816 0 R 3818 0 R 3824 0 R 3826 0 R 3831 0 R 3835 0 R 3841 0 R 3845 0 R 3857 0 R 3873 0 R 3888 0 R 3893 0 R 3896 0 R 3899 0 R 3905 0 R 3910 0 R 3912 0 R 3914 0 R 3916 0 R 3918 0 R 3920 0 R 
 3929 0 R 3933 0 R 3937 0 R 3941 0 R 3943 0 R 3950 0 R 3960 0 R 3967 0 R 3970 0 R 3973 0 R 3975 0 R 3982 0 R 3989 0 R 3999 0 R 4003 0 R 4006 0 R 4010 0 R 4014 0 R 4020 0 R 4023 0 R 4039 0 R 4044 0 R 4067 0 R 4071 0 R 4078 0 R 4089 0 R 4098 0 R 4101 0 R 4104 0 R 4107 0 R 4123 0 R 4129 0 R 4136 0 R]
 >>
 endobj
 4 0 obj
@@ -187,11 +187,11 @@ endobj
 << /Type /Font
 /BaseFont /71be00+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4805 0 R
+/FontDescriptor 4816 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4807 0 R
-/ToUnicode 4806 0 R
+/Widths 4818 0 R
+/ToUnicode 4817 0 R
 >>
 endobj
 11 0 obj
@@ -407,7 +407,7 @@ ET
 BT
 535.301 677.936 Td
 /F1.0 10.5 Tf
-<3137> Tj
+<3138> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -447,7 +447,7 @@ ET
 BT
 535.301 659.456 Td
 /F1.0 10.5 Tf
-<3138> Tj
+<3139> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -487,7 +487,7 @@ ET
 BT
 535.301 640.976 Td
 /F1.0 10.5 Tf
-<3230> Tj
+<3231> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -527,7 +527,7 @@ ET
 BT
 535.301 622.496 Td
 /F1.0 10.5 Tf
-<3235> Tj
+<3236> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -567,7 +567,7 @@ ET
 BT
 535.301 604.016 Td
 /F1.0 10.5 Tf
-<3239> Tj
+<3330> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -607,7 +607,7 @@ ET
 BT
 535.301 585.536 Td
 /F1.0 10.5 Tf
-<3330> Tj
+<3331> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -647,7 +647,7 @@ ET
 BT
 535.301 567.056 Td
 /F1.0 10.5 Tf
-<3730> Tj
+<3731> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -687,7 +687,7 @@ ET
 BT
 535.301 548.576 Td
 /F1.0 10.5 Tf
-<3732> Tj
+<3733> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -727,7 +727,7 @@ ET
 BT
 535.301 530.096 Td
 /F1.0 10.5 Tf
-<3830> Tj
+<3831> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -767,7 +767,7 @@ ET
 BT
 535.301 511.616 Td
 /F1.0 10.5 Tf
-<3833> Tj
+<3834> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -807,7 +807,7 @@ ET
 BT
 535.301 493.136 Td
 /F1.0 10.5 Tf
-<3834> Tj
+<3835> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -847,7 +847,7 @@ ET
 BT
 535.301 474.656 Td
 /F1.0 10.5 Tf
-<3839> Tj
+<3930> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -887,7 +887,7 @@ ET
 BT
 535.301 456.176 Td
 /F1.0 10.5 Tf
-<3933> Tj
+<3934> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -927,7 +927,7 @@ ET
 BT
 529.4315 437.696 Td
 /F1.0 10.5 Tf
-<313032> Tj
+<313033> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -967,7 +967,7 @@ ET
 BT
 529.4315 419.216 Td
 /F1.0 10.5 Tf
-<313033> Tj
+<313034> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1007,7 +1007,7 @@ ET
 BT
 529.4315 400.736 Td
 /F1.0 10.5 Tf
-<313034> Tj
+<313035> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1047,7 +1047,7 @@ ET
 BT
 529.4315 382.256 Td
 /F1.0 10.5 Tf
-<313035> Tj
+<313036> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1087,7 +1087,7 @@ ET
 BT
 529.4315 363.776 Td
 /F1.0 10.5 Tf
-<313037> Tj
+<313038> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1127,7 +1127,7 @@ ET
 BT
 529.4315 345.296 Td
 /F1.0 10.5 Tf
-<313039> Tj
+<313130> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1167,7 +1167,7 @@ ET
 BT
 529.4315 326.816 Td
 /F1.0 10.5 Tf
-<313130> Tj
+<313131> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1207,7 +1207,7 @@ ET
 BT
 529.4315 308.336 Td
 /F1.0 10.5 Tf
-<313136> Tj
+<313137> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1247,7 +1247,7 @@ ET
 BT
 529.4315 289.856 Td
 /F1.0 10.5 Tf
-<313137> Tj
+<313138> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1287,7 +1287,7 @@ ET
 BT
 529.4315 271.376 Td
 /F1.0 10.5 Tf
-<313139> Tj
+<313230> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1327,7 +1327,7 @@ ET
 BT
 529.4315 252.896 Td
 /F1.0 10.5 Tf
-<313230> Tj
+<313231> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1367,7 +1367,7 @@ ET
 BT
 529.4315 234.416 Td
 /F1.0 10.5 Tf
-<313232> Tj
+<313233> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1407,7 +1407,7 @@ ET
 BT
 529.4315 215.936 Td
 /F1.0 10.5 Tf
-<313233> Tj
+<313234> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1447,7 +1447,7 @@ ET
 BT
 529.4315 197.456 Td
 /F1.0 10.5 Tf
-<313234> Tj
+<313235> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1487,7 +1487,7 @@ ET
 BT
 529.4315 178.976 Td
 /F1.0 10.5 Tf
-<313235> Tj
+<313236> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1527,7 +1527,7 @@ ET
 BT
 529.4315 160.496 Td
 /F1.0 10.5 Tf
-<313236> Tj
+<313237> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1567,7 +1567,7 @@ ET
 BT
 529.4315 142.016 Td
 /F1.0 10.5 Tf
-<313238> Tj
+<313239> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1607,7 +1607,7 @@ ET
 BT
 529.4315 123.536 Td
 /F1.0 10.5 Tf
-<313333> Tj
+<313334> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1647,7 +1647,7 @@ ET
 BT
 529.4315 105.056 Td
 /F1.0 10.5 Tf
-<313334> Tj
+<313335> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1687,7 +1687,7 @@ ET
 BT
 529.4315 86.576 Td
 /F1.0 10.5 Tf
-<313335> Tj
+<313336> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1727,7 +1727,7 @@ ET
 BT
 529.4315 68.096 Td
 /F1.0 10.5 Tf
-<313336> Tj
+<313337> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1750,7 +1750,7 @@ endobj
 /F1.0 10 0 R
 >>
 >>
-/Annots [4127 0 R 4128 0 R 4129 0 R 4130 0 R 4131 0 R 4132 0 R 4133 0 R 4134 0 R 4135 0 R 4136 0 R 4137 0 R 4138 0 R 4139 0 R 4140 0 R 4141 0 R 4142 0 R 4143 0 R 4144 0 R 4145 0 R 4146 0 R 4147 0 R 4148 0 R 4149 0 R 4150 0 R 4151 0 R 4152 0 R 4153 0 R 4154 0 R 4155 0 R 4156 0 R 4157 0 R 4158 0 R 4159 0 R 4160 0 R 4161 0 R 4162 0 R 4163 0 R 4164 0 R 4165 0 R 4166 0 R 4167 0 R 4168 0 R 4169 0 R 4170 0 R 4171 0 R 4172 0 R 4173 0 R 4174 0 R 4175 0 R 4176 0 R 4177 0 R 4178 0 R 4179 0 R 4180 0 R 4181 0 R 4182 0 R 4183 0 R 4184 0 R 4185 0 R 4186 0 R 4187 0 R 4188 0 R 4189 0 R 4190 0 R 4191 0 R 4192 0 R 4193 0 R 4194 0 R 4195 0 R 4196 0 R 4197 0 R 4198 0 R 4199 0 R 4200 0 R 4201 0 R 4202 0 R]
+/Annots [4138 0 R 4139 0 R 4140 0 R 4141 0 R 4142 0 R 4143 0 R 4144 0 R 4145 0 R 4146 0 R 4147 0 R 4148 0 R 4149 0 R 4150 0 R 4151 0 R 4152 0 R 4153 0 R 4154 0 R 4155 0 R 4156 0 R 4157 0 R 4158 0 R 4159 0 R 4160 0 R 4161 0 R 4162 0 R 4163 0 R 4164 0 R 4165 0 R 4166 0 R 4167 0 R 4168 0 R 4169 0 R 4170 0 R 4171 0 R 4172 0 R 4173 0 R 4174 0 R 4175 0 R 4176 0 R 4177 0 R 4178 0 R 4179 0 R 4180 0 R 4181 0 R 4182 0 R 4183 0 R 4184 0 R 4185 0 R 4186 0 R 4187 0 R 4188 0 R 4189 0 R 4190 0 R 4191 0 R 4192 0 R 4193 0 R 4194 0 R 4195 0 R 4196 0 R 4197 0 R 4198 0 R 4199 0 R 4200 0 R 4201 0 R 4202 0 R 4203 0 R 4204 0 R 4205 0 R 4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R 4212 0 R 4213 0 R]
 >>
 endobj
 13 0 obj
@@ -1795,7 +1795,7 @@ ET
 BT
 529.4315 794.676 Td
 /F1.0 10.5 Tf
-<313337> Tj
+<313338> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1835,7 +1835,7 @@ ET
 BT
 529.4315 776.196 Td
 /F1.0 10.5 Tf
-<313338> Tj
+<313339> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1875,7 +1875,7 @@ ET
 BT
 529.4315 757.716 Td
 /F1.0 10.5 Tf
-<313339> Tj
+<313430> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1915,7 +1915,7 @@ ET
 BT
 529.4315 739.236 Td
 /F1.0 10.5 Tf
-<313430> Tj
+<313431> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1955,7 +1955,7 @@ ET
 BT
 529.4315 720.756 Td
 /F1.0 10.5 Tf
-<313431> Tj
+<313432> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -1995,7 +1995,7 @@ ET
 BT
 529.4315 702.276 Td
 /F1.0 10.5 Tf
-<313432> Tj
+<313433> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2035,7 +2035,7 @@ ET
 BT
 529.4315 683.796 Td
 /F1.0 10.5 Tf
-<313439> Tj
+<313530> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2075,7 +2075,7 @@ ET
 BT
 529.4315 665.316 Td
 /F1.0 10.5 Tf
-<313530> Tj
+<313531> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2115,7 +2115,7 @@ ET
 BT
 529.4315 646.836 Td
 /F1.0 10.5 Tf
-<313531> Tj
+<313532> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2155,7 +2155,7 @@ ET
 BT
 529.4315 628.356 Td
 /F1.0 10.5 Tf
-<313532> Tj
+<313533> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2195,7 +2195,7 @@ ET
 BT
 529.4315 609.876 Td
 /F1.0 10.5 Tf
-<313533> Tj
+<313534> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2235,7 +2235,7 @@ ET
 BT
 529.4315 591.396 Td
 /F1.0 10.5 Tf
-<313537> Tj
+<313538> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2275,7 +2275,7 @@ ET
 BT
 529.4315 572.916 Td
 /F1.0 10.5 Tf
-<313539> Tj
+<313630> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2315,7 +2315,7 @@ ET
 BT
 529.4315 554.436 Td
 /F1.0 10.5 Tf
-<313630> Tj
+<313631> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2355,7 +2355,7 @@ ET
 BT
 529.4315 535.956 Td
 /F1.0 10.5 Tf
-<313730> Tj
+<313731> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2395,7 +2395,7 @@ ET
 BT
 529.4315 517.476 Td
 /F1.0 10.5 Tf
-<313733> Tj
+<313734> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2435,7 +2435,7 @@ ET
 BT
 529.4315 498.996 Td
 /F1.0 10.5 Tf
-<313734> Tj
+<313735> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2475,7 +2475,7 @@ ET
 BT
 529.4315 480.516 Td
 /F1.0 10.5 Tf
-<313735> Tj
+<313736> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2515,7 +2515,7 @@ ET
 BT
 529.4315 462.036 Td
 /F1.0 10.5 Tf
-<313830> Tj
+<313831> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2555,7 +2555,7 @@ ET
 BT
 529.4315 443.556 Td
 /F1.0 10.5 Tf
-<313831> Tj
+<313832> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2595,7 +2595,7 @@ ET
 BT
 529.4315 425.076 Td
 /F1.0 10.5 Tf
-<313832> Tj
+<313833> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2635,7 +2635,7 @@ ET
 BT
 529.4315 406.596 Td
 /F1.0 10.5 Tf
-<313833> Tj
+<313834> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2675,7 +2675,7 @@ ET
 BT
 529.4315 388.116 Td
 /F1.0 10.5 Tf
-<313834> Tj
+<313835> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2715,7 +2715,7 @@ ET
 BT
 529.4315 369.636 Td
 /F1.0 10.5 Tf
-<313835> Tj
+<313836> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2755,7 +2755,7 @@ ET
 BT
 529.4315 351.156 Td
 /F1.0 10.5 Tf
-<313836> Tj
+<313837> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2795,7 +2795,7 @@ ET
 BT
 529.4315 332.676 Td
 /F1.0 10.5 Tf
-<313933> Tj
+<313934> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2835,7 +2835,7 @@ ET
 BT
 529.4315 314.196 Td
 /F1.0 10.5 Tf
-<313934> Tj
+<313935> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2875,7 +2875,7 @@ ET
 BT
 529.4315 295.716 Td
 /F1.0 10.5 Tf
-<313935> Tj
+<313936> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2915,7 +2915,7 @@ ET
 BT
 529.4315 277.236 Td
 /F1.0 10.5 Tf
-<313936> Tj
+<313937> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2955,7 +2955,7 @@ ET
 BT
 529.4315 258.756 Td
 /F1.0 10.5 Tf
-<313937> Tj
+<313938> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -2995,7 +2995,7 @@ ET
 BT
 529.4315 240.276 Td
 /F1.0 10.5 Tf
-<313938> Tj
+<313939> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3035,7 +3035,7 @@ ET
 BT
 529.4315 221.796 Td
 /F1.0 10.5 Tf
-<323030> Tj
+<323031> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3075,7 +3075,7 @@ ET
 BT
 529.4315 203.316 Td
 /F1.0 10.5 Tf
-<323037> Tj
+<323038> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3115,7 +3115,7 @@ ET
 BT
 529.4315 184.836 Td
 /F1.0 10.5 Tf
-<323130> Tj
+<323131> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3155,7 +3155,7 @@ ET
 BT
 529.4315 166.356 Td
 /F1.0 10.5 Tf
-<323132> Tj
+<323133> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3195,7 +3195,7 @@ ET
 BT
 529.4315 147.876 Td
 /F1.0 10.5 Tf
-<323338> Tj
+<323339> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3235,7 +3235,7 @@ ET
 BT
 529.4315 129.396 Td
 /F1.0 10.5 Tf
-<323431> Tj
+<323432> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3275,7 +3275,7 @@ ET
 BT
 529.4315 110.916 Td
 /F1.0 10.5 Tf
-<323432> Tj
+<323433> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3315,7 +3315,7 @@ ET
 BT
 529.4315 92.436 Td
 /F1.0 10.5 Tf
-<323434> Tj
+<323435> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3355,7 +3355,7 @@ ET
 BT
 529.4315 73.956 Td
 /F1.0 10.5 Tf
-<323435> Tj
+<323436> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3395,7 +3395,7 @@ ET
 BT
 529.4315 55.476 Td
 /F1.0 10.5 Tf
-<323439> Tj
+<323530> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3417,7 +3417,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4203 0 R 4204 0 R 4205 0 R 4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R 4212 0 R 4213 0 R 4214 0 R 4215 0 R 4216 0 R 4217 0 R 4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R 4223 0 R 4224 0 R 4225 0 R 4226 0 R 4227 0 R 4228 0 R 4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R 4236 0 R 4237 0 R 4238 0 R 4239 0 R 4240 0 R 4241 0 R 4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R 4247 0 R 4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R 4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R]
+/Annots [4214 0 R 4215 0 R 4216 0 R 4217 0 R 4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R 4223 0 R 4224 0 R 4225 0 R 4226 0 R 4227 0 R 4228 0 R 4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R 4236 0 R 4237 0 R 4238 0 R 4239 0 R 4240 0 R 4241 0 R 4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R 4247 0 R 4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R 4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R 4290 0 R 4291 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R]
 >>
 endobj
 15 0 obj
@@ -3462,7 +3462,7 @@ ET
 BT
 529.4315 794.676 Td
 /F1.0 10.5 Tf
-<323535> Tj
+<323536> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3502,7 +3502,7 @@ ET
 BT
 529.4315 776.196 Td
 /F1.0 10.5 Tf
-<323536> Tj
+<323537> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3542,7 +3542,7 @@ ET
 BT
 529.4315 757.716 Td
 /F1.0 10.5 Tf
-<323733> Tj
+<323734> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3582,7 +3582,7 @@ ET
 BT
 529.4315 739.236 Td
 /F1.0 10.5 Tf
-<333030> Tj
+<333031> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3622,7 +3622,7 @@ ET
 BT
 529.4315 720.756 Td
 /F1.0 10.5 Tf
-<333032> Tj
+<333033> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3662,7 +3662,7 @@ ET
 BT
 529.4315 702.276 Td
 /F1.0 10.5 Tf
-<333033> Tj
+<333034> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3702,7 +3702,7 @@ ET
 BT
 529.4315 683.796 Td
 /F1.0 10.5 Tf
-<333135> Tj
+<333136> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3742,7 +3742,7 @@ ET
 BT
 529.4315 665.316 Td
 /F1.0 10.5 Tf
-<333230> Tj
+<333231> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3782,7 +3782,7 @@ ET
 BT
 529.4315 646.836 Td
 /F1.0 10.5 Tf
-<333231> Tj
+<333232> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3822,7 +3822,7 @@ ET
 BT
 529.4315 628.356 Td
 /F1.0 10.5 Tf
-<333232> Tj
+<333233> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3862,7 +3862,7 @@ ET
 BT
 529.4315 609.876 Td
 /F1.0 10.5 Tf
-<333234> Tj
+<333235> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3902,7 +3902,7 @@ ET
 BT
 529.4315 591.396 Td
 /F1.0 10.5 Tf
-<333235> Tj
+<333236> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3942,7 +3942,7 @@ ET
 BT
 529.4315 572.916 Td
 /F1.0 10.5 Tf
-<333236> Tj
+<333237> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -3982,7 +3982,7 @@ ET
 BT
 529.4315 554.436 Td
 /F1.0 10.5 Tf
-<333237> Tj
+<333238> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4022,7 +4022,7 @@ ET
 BT
 529.4315 535.956 Td
 /F1.0 10.5 Tf
-<333239> Tj
+<333330> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4062,7 +4062,7 @@ ET
 BT
 529.4315 517.476 Td
 /F1.0 10.5 Tf
-<333331> Tj
+<333332> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4102,7 +4102,7 @@ ET
 BT
 529.4315 498.996 Td
 /F1.0 10.5 Tf
-<333337> Tj
+<333338> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4142,7 +4142,7 @@ ET
 BT
 529.4315 480.516 Td
 /F1.0 10.5 Tf
-<333430> Tj
+<333431> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4182,7 +4182,7 @@ ET
 BT
 529.4315 462.036 Td
 /F1.0 10.5 Tf
-<333431> Tj
+<333432> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4222,7 +4222,7 @@ ET
 BT
 529.4315 443.556 Td
 /F1.0 10.5 Tf
-<333433> Tj
+<333434> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4262,7 +4262,7 @@ ET
 BT
 529.4315 425.076 Td
 /F1.0 10.5 Tf
-<333436> Tj
+<333437> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4302,7 +4302,7 @@ ET
 BT
 529.4315 406.596 Td
 /F1.0 10.5 Tf
-<333437> Tj
+<333438> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4342,7 +4342,7 @@ ET
 BT
 529.4315 388.116 Td
 /F1.0 10.5 Tf
-<333438> Tj
+<333439> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4382,7 +4382,7 @@ ET
 BT
 529.4315 369.636 Td
 /F1.0 10.5 Tf
-<333439> Tj
+<333530> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4422,7 +4422,7 @@ ET
 BT
 529.4315 351.156 Td
 /F1.0 10.5 Tf
-<333531> Tj
+<333532> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4462,7 +4462,7 @@ ET
 BT
 529.4315 332.676 Td
 /F1.0 10.5 Tf
-<333533> Tj
+<333534> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4502,7 +4502,7 @@ ET
 BT
 529.4315 314.196 Td
 /F1.0 10.5 Tf
-<333534> Tj
+<333535> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4542,7 +4542,7 @@ ET
 BT
 529.4315 295.716 Td
 /F1.0 10.5 Tf
-<333536> Tj
+<333537> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4582,7 +4582,7 @@ ET
 BT
 529.4315 277.236 Td
 /F1.0 10.5 Tf
-<333537> Tj
+<333538> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4622,7 +4622,7 @@ ET
 BT
 529.4315 258.756 Td
 /F1.0 10.5 Tf
-<333638> Tj
+<333639> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4662,7 +4662,7 @@ ET
 BT
 529.4315 240.276 Td
 /F1.0 10.5 Tf
-<333639> Tj
+<333730> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4702,7 +4702,7 @@ ET
 BT
 529.4315 221.796 Td
 /F1.0 10.5 Tf
-<333730> Tj
+<333731> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4742,7 +4742,7 @@ ET
 BT
 529.4315 203.316 Td
 /F1.0 10.5 Tf
-<333733> Tj
+<333734> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4782,7 +4782,7 @@ ET
 BT
 529.4315 184.836 Td
 /F1.0 10.5 Tf
-<333735> Tj
+<333736> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4822,7 +4822,7 @@ ET
 BT
 529.4315 166.356 Td
 /F1.0 10.5 Tf
-<333738> Tj
+<333739> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4862,7 +4862,7 @@ ET
 BT
 529.4315 147.876 Td
 /F1.0 10.5 Tf
-<333739> Tj
+<333830> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4902,7 +4902,7 @@ ET
 BT
 529.4315 129.396 Td
 /F1.0 10.5 Tf
-<333835> Tj
+<333836> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4942,7 +4942,7 @@ ET
 BT
 529.4315 110.916 Td
 /F1.0 10.5 Tf
-<333836> Tj
+<333837> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -4982,7 +4982,7 @@ ET
 BT
 529.4315 92.436 Td
 /F1.0 10.5 Tf
-<333839> Tj
+<333930> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5022,7 +5022,7 @@ ET
 BT
 529.4315 73.956 Td
 /F1.0 10.5 Tf
-<333931> Tj
+<333932> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5062,7 +5062,7 @@ ET
 BT
 529.4315 55.476 Td
 /F1.0 10.5 Tf
-<333935> Tj
+<333936> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5084,7 +5084,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R 4290 0 R 4291 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R 4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R 4301 0 R 4302 0 R 4303 0 R 4304 0 R 4305 0 R 4306 0 R 4307 0 R 4308 0 R 4309 0 R 4310 0 R 4311 0 R 4312 0 R 4313 0 R 4314 0 R 4315 0 R 4316 0 R 4317 0 R 4318 0 R 4319 0 R 4320 0 R 4321 0 R 4322 0 R 4323 0 R 4324 0 R 4325 0 R 4326 0 R 4327 0 R 4328 0 R 4329 0 R 4330 0 R 4331 0 R 4332 0 R 4333 0 R 4334 0 R 4335 0 R 4336 0 R 4337 0 R 4338 0 R 4339 0 R 4340 0 R 4341 0 R 4342 0 R 4343 0 R 4344 0 R 4345 0 R 4346 0 R 4347 0 R 4348 0 R 4349 0 R 4350 0 R 4351 0 R 4352 0 R 4353 0 R 4354 0 R 4355 0 R 4356 0 R 4357 0 R 4358 0 R 4359 0 R 4360 0 R 4361 0 R 4362 0 R 4363 0 R 4364 0 R 4365 0 R 4366 0 R]
+/Annots [4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R 4301 0 R 4302 0 R 4303 0 R 4304 0 R 4305 0 R 4306 0 R 4307 0 R 4308 0 R 4309 0 R 4310 0 R 4311 0 R 4312 0 R 4313 0 R 4314 0 R 4315 0 R 4316 0 R 4317 0 R 4318 0 R 4319 0 R 4320 0 R 4321 0 R 4322 0 R 4323 0 R 4324 0 R 4325 0 R 4326 0 R 4327 0 R 4328 0 R 4329 0 R 4330 0 R 4331 0 R 4332 0 R 4333 0 R 4334 0 R 4335 0 R 4336 0 R 4337 0 R 4338 0 R 4339 0 R 4340 0 R 4341 0 R 4342 0 R 4343 0 R 4344 0 R 4345 0 R 4346 0 R 4347 0 R 4348 0 R 4349 0 R 4350 0 R 4351 0 R 4352 0 R 4353 0 R 4354 0 R 4355 0 R 4356 0 R 4357 0 R 4358 0 R 4359 0 R 4360 0 R 4361 0 R 4362 0 R 4363 0 R 4364 0 R 4365 0 R 4366 0 R 4367 0 R 4368 0 R 4369 0 R 4370 0 R 4371 0 R 4372 0 R 4373 0 R 4374 0 R 4375 0 R 4376 0 R 4377 0 R]
 >>
 endobj
 17 0 obj
@@ -5129,7 +5129,7 @@ ET
 BT
 529.4315 794.676 Td
 /F1.0 10.5 Tf
-<343032> Tj
+<343033> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5169,7 +5169,7 @@ ET
 BT
 529.4315 776.196 Td
 /F1.0 10.5 Tf
-<343033> Tj
+<343034> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5209,7 +5209,7 @@ ET
 BT
 529.4315 757.716 Td
 /F1.0 10.5 Tf
-<343034> Tj
+<343035> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5249,7 +5249,7 @@ ET
 BT
 529.4315 739.236 Td
 /F1.0 10.5 Tf
-<343036> Tj
+<343037> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5289,7 +5289,7 @@ ET
 BT
 529.4315 720.756 Td
 /F1.0 10.5 Tf
-<343131> Tj
+<343132> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5329,7 +5329,7 @@ ET
 BT
 529.4315 702.276 Td
 /F1.0 10.5 Tf
-<343137> Tj
+<343138> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5369,7 +5369,7 @@ ET
 BT
 529.4315 683.796 Td
 /F1.0 10.5 Tf
-<343139> Tj
+<343230> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5409,7 +5409,7 @@ ET
 BT
 529.4315 665.316 Td
 /F1.0 10.5 Tf
-<343230> Tj
+<343231> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5449,7 +5449,7 @@ ET
 BT
 529.4315 646.836 Td
 /F1.0 10.5 Tf
-<343231> Tj
+<343232> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5489,7 +5489,7 @@ ET
 BT
 529.4315 628.356 Td
 /F1.0 10.5 Tf
-<343232> Tj
+<343233> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5529,7 +5529,7 @@ ET
 BT
 529.4315 609.876 Td
 /F1.0 10.5 Tf
-<343234> Tj
+<343235> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5569,7 +5569,7 @@ ET
 BT
 529.4315 591.396 Td
 /F1.0 10.5 Tf
-<343235> Tj
+<343236> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5609,7 +5609,7 @@ ET
 BT
 529.4315 572.916 Td
 /F1.0 10.5 Tf
-<343239> Tj
+<343330> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5649,7 +5649,7 @@ ET
 BT
 529.4315 554.436 Td
 /F1.0 10.5 Tf
-<343330> Tj
+<343331> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5689,7 +5689,7 @@ ET
 BT
 529.4315 535.956 Td
 /F1.0 10.5 Tf
-<343334> Tj
+<343335> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5729,7 +5729,7 @@ ET
 BT
 529.4315 517.476 Td
 /F1.0 10.5 Tf
-<343335> Tj
+<343336> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5769,7 +5769,7 @@ ET
 BT
 529.4315 498.996 Td
 /F1.0 10.5 Tf
-<343338> Tj
+<343339> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5809,7 +5809,7 @@ ET
 BT
 529.4315 480.516 Td
 /F1.0 10.5 Tf
-<343433> Tj
+<343434> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5849,7 +5849,7 @@ ET
 BT
 529.4315 462.036 Td
 /F1.0 10.5 Tf
-<343434> Tj
+<343435> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5889,7 +5889,7 @@ ET
 BT
 529.4315 443.556 Td
 /F1.0 10.5 Tf
-<343436> Tj
+<343437> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5929,7 +5929,7 @@ ET
 BT
 529.4315 425.076 Td
 /F1.0 10.5 Tf
-<343437> Tj
+<343438> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -5969,7 +5969,7 @@ ET
 BT
 529.4315 406.596 Td
 /F1.0 10.5 Tf
-<343438> Tj
+<343439> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6009,7 +6009,7 @@ ET
 BT
 529.4315 388.116 Td
 /F1.0 10.5 Tf
-<343439> Tj
+<343530> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6049,7 +6049,7 @@ ET
 BT
 529.4315 369.636 Td
 /F1.0 10.5 Tf
-<343530> Tj
+<343531> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6089,7 +6089,7 @@ ET
 BT
 529.4315 351.156 Td
 /F1.0 10.5 Tf
-<343531> Tj
+<343532> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6129,7 +6129,7 @@ ET
 BT
 529.4315 332.676 Td
 /F1.0 10.5 Tf
-<343535> Tj
+<343536> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6169,7 +6169,7 @@ ET
 BT
 529.4315 314.196 Td
 /F1.0 10.5 Tf
-<343536> Tj
+<343537> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6209,7 +6209,7 @@ ET
 BT
 529.4315 295.716 Td
 /F1.0 10.5 Tf
-<343634> Tj
+<343635> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6249,7 +6249,7 @@ ET
 BT
 529.4315 277.236 Td
 /F1.0 10.5 Tf
-<343638> Tj
+<343639> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6289,7 +6289,7 @@ ET
 BT
 529.4315 258.756 Td
 /F1.0 10.5 Tf
-<343730> Tj
+<343731> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6329,7 +6329,7 @@ ET
 BT
 529.4315 240.276 Td
 /F1.0 10.5 Tf
-<343733> Tj
+<343734> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6369,7 +6369,7 @@ ET
 BT
 529.4315 221.796 Td
 /F1.0 10.5 Tf
-<343734> Tj
+<343735> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6409,7 +6409,7 @@ ET
 BT
 529.4315 203.316 Td
 /F1.0 10.5 Tf
-<343739> Tj
+<343832> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6449,7 +6449,7 @@ ET
 BT
 529.4315 184.836 Td
 /F1.0 10.5 Tf
-<343830> Tj
+<343834> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6489,7 +6489,7 @@ ET
 BT
 529.4315 166.356 Td
 /F1.0 10.5 Tf
-<343831> Tj
+<343835> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6529,7 +6529,7 @@ ET
 BT
 529.4315 147.876 Td
 /F1.0 10.5 Tf
-<343832> Tj
+<343836> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6569,7 +6569,7 @@ ET
 BT
 529.4315 129.396 Td
 /F1.0 10.5 Tf
-<343833> Tj
+<343837> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6609,7 +6609,7 @@ ET
 BT
 529.4315 110.916 Td
 /F1.0 10.5 Tf
-<343836> Tj
+<343930> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6649,7 +6649,7 @@ ET
 BT
 529.4315 92.436 Td
 /F1.0 10.5 Tf
-<343837> Tj
+<343931> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6689,7 +6689,7 @@ ET
 BT
 529.4315 73.956 Td
 /F1.0 10.5 Tf
-<343838> Tj
+<343932> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6729,7 +6729,7 @@ ET
 BT
 529.4315 55.476 Td
 /F1.0 10.5 Tf
-<343839> Tj
+<343933> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6751,7 +6751,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4367 0 R 4368 0 R 4369 0 R 4370 0 R 4371 0 R 4372 0 R 4373 0 R 4374 0 R 4375 0 R 4376 0 R 4377 0 R 4378 0 R 4379 0 R 4380 0 R 4381 0 R 4382 0 R 4383 0 R 4384 0 R 4385 0 R 4386 0 R 4387 0 R 4388 0 R 4389 0 R 4390 0 R 4391 0 R 4392 0 R 4393 0 R 4394 0 R 4395 0 R 4396 0 R 4397 0 R 4398 0 R 4399 0 R 4400 0 R 4401 0 R 4402 0 R 4403 0 R 4404 0 R 4405 0 R 4406 0 R 4407 0 R 4408 0 R 4409 0 R 4410 0 R 4411 0 R 4412 0 R 4413 0 R 4414 0 R 4415 0 R 4416 0 R 4417 0 R 4418 0 R 4419 0 R 4420 0 R 4421 0 R 4422 0 R 4423 0 R 4424 0 R 4425 0 R 4426 0 R 4427 0 R 4428 0 R 4429 0 R 4430 0 R 4431 0 R 4432 0 R 4433 0 R 4434 0 R 4435 0 R 4436 0 R 4437 0 R 4438 0 R 4439 0 R 4440 0 R 4441 0 R 4442 0 R 4443 0 R 4444 0 R 4445 0 R 4446 0 R 4447 0 R 4448 0 R]
+/Annots [4378 0 R 4379 0 R 4380 0 R 4381 0 R 4382 0 R 4383 0 R 4384 0 R 4385 0 R 4386 0 R 4387 0 R 4388 0 R 4389 0 R 4390 0 R 4391 0 R 4392 0 R 4393 0 R 4394 0 R 4395 0 R 4396 0 R 4397 0 R 4398 0 R 4399 0 R 4400 0 R 4401 0 R 4402 0 R 4403 0 R 4404 0 R 4405 0 R 4406 0 R 4407 0 R 4408 0 R 4409 0 R 4410 0 R 4411 0 R 4412 0 R 4413 0 R 4414 0 R 4415 0 R 4416 0 R 4417 0 R 4418 0 R 4419 0 R 4420 0 R 4421 0 R 4422 0 R 4423 0 R 4424 0 R 4425 0 R 4426 0 R 4427 0 R 4428 0 R 4429 0 R 4430 0 R 4431 0 R 4432 0 R 4433 0 R 4434 0 R 4435 0 R 4436 0 R 4437 0 R 4438 0 R 4439 0 R 4440 0 R 4441 0 R 4442 0 R 4443 0 R 4444 0 R 4445 0 R 4446 0 R 4447 0 R 4448 0 R 4449 0 R 4450 0 R 4451 0 R 4452 0 R 4453 0 R 4454 0 R 4455 0 R 4456 0 R 4457 0 R 4458 0 R 4459 0 R]
 >>
 endobj
 19 0 obj
@@ -6796,7 +6796,7 @@ ET
 BT
 529.4315 794.676 Td
 /F1.0 10.5 Tf
-<343930> Tj
+<343934> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6836,7 +6836,7 @@ ET
 BT
 529.4315 776.196 Td
 /F1.0 10.5 Tf
-<343931> Tj
+<343935> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6876,7 +6876,7 @@ ET
 BT
 529.4315 757.716 Td
 /F1.0 10.5 Tf
-<343932> Tj
+<343936> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6916,7 +6916,7 @@ ET
 BT
 529.4315 739.236 Td
 /F1.0 10.5 Tf
-<343933> Tj
+<343937> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6956,7 +6956,7 @@ ET
 BT
 529.4315 720.756 Td
 /F1.0 10.5 Tf
-<343934> Tj
+<343938> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -6996,7 +6996,7 @@ ET
 BT
 529.4315 702.276 Td
 /F1.0 10.5 Tf
-<343938> Tj
+<353032> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7036,7 +7036,7 @@ ET
 BT
 529.4315 683.796 Td
 /F1.0 10.5 Tf
-<343939> Tj
+<353033> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7076,7 +7076,7 @@ ET
 BT
 529.4315 665.316 Td
 /F1.0 10.5 Tf
-<353136> Tj
+<353230> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7116,7 +7116,7 @@ ET
 BT
 529.4315 646.836 Td
 /F1.0 10.5 Tf
-<353137> Tj
+<353231> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7156,7 +7156,7 @@ ET
 BT
 529.4315 628.356 Td
 /F1.0 10.5 Tf
-<353233> Tj
+<353237> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7196,7 +7196,7 @@ ET
 BT
 529.4315 609.876 Td
 /F1.0 10.5 Tf
-<353238> Tj
+<353332> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7236,7 +7236,7 @@ ET
 BT
 529.4315 591.396 Td
 /F1.0 10.5 Tf
-<353332> Tj
+<353336> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7276,7 +7276,7 @@ ET
 BT
 529.4315 572.916 Td
 /F1.0 10.5 Tf
-<353434> Tj
+<353438> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7316,7 +7316,7 @@ ET
 BT
 529.4315 554.436 Td
 /F1.0 10.5 Tf
-<353532> Tj
+<353536> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7356,7 +7356,7 @@ ET
 BT
 529.4315 535.956 Td
 /F1.0 10.5 Tf
-<353534> Tj
+<353538> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7396,7 +7396,7 @@ ET
 BT
 529.4315 517.476 Td
 /F1.0 10.5 Tf
-<353538> Tj
+<353632> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7436,7 +7436,7 @@ ET
 BT
 529.4315 498.996 Td
 /F1.0 10.5 Tf
-<353539> Tj
+<353633> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7476,7 +7476,7 @@ ET
 BT
 529.4315 480.516 Td
 /F1.0 10.5 Tf
-<353633> Tj
+<353637> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7516,7 +7516,7 @@ ET
 BT
 529.4315 462.036 Td
 /F1.0 10.5 Tf
-<353634> Tj
+<353638> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7556,7 +7556,7 @@ ET
 BT
 529.4315 443.556 Td
 /F1.0 10.5 Tf
-<353637> Tj
+<353731> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7596,7 +7596,7 @@ ET
 BT
 529.4315 425.076 Td
 /F1.0 10.5 Tf
-<353732> Tj
+<353736> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7636,7 +7636,7 @@ ET
 BT
 529.4315 406.596 Td
 /F1.0 10.5 Tf
-<353733> Tj
+<353737> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7676,7 +7676,7 @@ ET
 BT
 529.4315 388.116 Td
 /F1.0 10.5 Tf
-<353736> Tj
+<353830> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7716,7 +7716,7 @@ ET
 BT
 529.4315 369.636 Td
 /F1.0 10.5 Tf
-<353737> Tj
+<353831> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7756,7 +7756,7 @@ ET
 BT
 529.4315 351.156 Td
 /F1.0 10.5 Tf
-<353830> Tj
+<353834> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7796,7 +7796,7 @@ ET
 BT
 529.4315 332.676 Td
 /F1.0 10.5 Tf
-<353833> Tj
+<353837> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7836,7 +7836,7 @@ ET
 BT
 529.4315 314.196 Td
 /F1.0 10.5 Tf
-<353931> Tj
+<353935> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7876,7 +7876,7 @@ ET
 BT
 529.4315 295.716 Td
 /F1.0 10.5 Tf
-<353932> Tj
+<353936> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7927,7 +7927,7 @@ ET
 BT
 529.4315 277.236 Td
 /F1.0 10.5 Tf
-<353933> Tj
+<353937> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -7967,7 +7967,7 @@ ET
 BT
 529.4315 258.756 Td
 /F1.0 10.5 Tf
-<353934> Tj
+<353938> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8007,7 +8007,7 @@ ET
 BT
 529.4315 240.276 Td
 /F1.0 10.5 Tf
-<363038> Tj
+<363132> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8047,7 +8047,7 @@ ET
 BT
 529.4315 221.796 Td
 /F1.0 10.5 Tf
-<363232> Tj
+<363236> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8087,7 +8087,7 @@ ET
 BT
 529.4315 203.316 Td
 /F1.0 10.5 Tf
-<363233> Tj
+<363237> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8127,7 +8127,7 @@ ET
 BT
 529.4315 184.836 Td
 /F1.0 10.5 Tf
-<363235> Tj
+<363239> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8167,7 +8167,7 @@ ET
 BT
 529.4315 166.356 Td
 /F1.0 10.5 Tf
-<363237> Tj
+<363331> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8207,7 +8207,7 @@ ET
 BT
 529.4315 147.876 Td
 /F1.0 10.5 Tf
-<363239> Tj
+<363333> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8247,7 +8247,7 @@ ET
 BT
 529.4315 129.396 Td
 /F1.0 10.5 Tf
-<363331> Tj
+<363335> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8287,7 +8287,7 @@ ET
 BT
 529.4315 110.916 Td
 /F1.0 10.5 Tf
-<363332> Tj
+<363336> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8327,7 +8327,7 @@ ET
 BT
 529.4315 92.436 Td
 /F1.0 10.5 Tf
-<363334> Tj
+<363338> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8367,7 +8367,7 @@ ET
 BT
 529.4315 73.956 Td
 /F1.0 10.5 Tf
-<363336> Tj
+<363430> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8407,7 +8407,7 @@ ET
 BT
 529.4315 55.476 Td
 /F1.0 10.5 Tf
-<363337> Tj
+<363431> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8429,7 +8429,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4449 0 R 4450 0 R 4451 0 R 4452 0 R 4453 0 R 4454 0 R 4455 0 R 4456 0 R 4457 0 R 4458 0 R 4459 0 R 4460 0 R 4461 0 R 4462 0 R 4463 0 R 4464 0 R 4465 0 R 4466 0 R 4467 0 R 4468 0 R 4469 0 R 4470 0 R 4471 0 R 4472 0 R 4473 0 R 4474 0 R 4475 0 R 4476 0 R 4477 0 R 4478 0 R 4479 0 R 4480 0 R 4481 0 R 4482 0 R 4483 0 R 4484 0 R 4485 0 R 4486 0 R 4487 0 R 4488 0 R 4489 0 R 4490 0 R 4491 0 R 4492 0 R 4493 0 R 4494 0 R 4495 0 R 4496 0 R 4497 0 R 4498 0 R 4499 0 R 4500 0 R 4501 0 R 4502 0 R 4503 0 R 4504 0 R 4505 0 R 4506 0 R 4507 0 R 4508 0 R 4509 0 R 4510 0 R 4511 0 R 4512 0 R 4513 0 R 4514 0 R 4515 0 R 4516 0 R 4517 0 R 4518 0 R 4519 0 R 4520 0 R 4521 0 R 4522 0 R 4523 0 R 4524 0 R 4525 0 R 4526 0 R 4527 0 R 4528 0 R 4529 0 R 4530 0 R 4531 0 R 4532 0 R]
+/Annots [4460 0 R 4461 0 R 4462 0 R 4463 0 R 4464 0 R 4465 0 R 4466 0 R 4467 0 R 4468 0 R 4469 0 R 4470 0 R 4471 0 R 4472 0 R 4473 0 R 4474 0 R 4475 0 R 4476 0 R 4477 0 R 4478 0 R 4479 0 R 4480 0 R 4481 0 R 4482 0 R 4483 0 R 4484 0 R 4485 0 R 4486 0 R 4487 0 R 4488 0 R 4489 0 R 4490 0 R 4491 0 R 4492 0 R 4493 0 R 4494 0 R 4495 0 R 4496 0 R 4497 0 R 4498 0 R 4499 0 R 4500 0 R 4501 0 R 4502 0 R 4503 0 R 4504 0 R 4505 0 R 4506 0 R 4507 0 R 4508 0 R 4509 0 R 4510 0 R 4511 0 R 4512 0 R 4513 0 R 4514 0 R 4515 0 R 4516 0 R 4517 0 R 4518 0 R 4519 0 R 4520 0 R 4521 0 R 4522 0 R 4523 0 R 4524 0 R 4525 0 R 4526 0 R 4527 0 R 4528 0 R 4529 0 R 4530 0 R 4531 0 R 4532 0 R 4533 0 R 4534 0 R 4535 0 R 4536 0 R 4537 0 R 4538 0 R 4539 0 R 4540 0 R 4541 0 R 4542 0 R 4543 0 R]
 >>
 endobj
 21 0 obj
@@ -8474,7 +8474,7 @@ ET
 BT
 529.4315 794.676 Td
 /F1.0 10.5 Tf
-<363434> Tj
+<363438> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8514,7 +8514,7 @@ ET
 BT
 529.4315 776.196 Td
 /F1.0 10.5 Tf
-<363435> Tj
+<363439> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8554,7 +8554,7 @@ ET
 BT
 529.4315 757.716 Td
 /F1.0 10.5 Tf
-<363436> Tj
+<363530> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8594,7 +8594,7 @@ ET
 BT
 529.4315 739.236 Td
 /F1.0 10.5 Tf
-<363437> Tj
+<363531> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8634,7 +8634,7 @@ ET
 BT
 529.4315 720.756 Td
 /F1.0 10.5 Tf
-<363438> Tj
+<363532> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8674,7 +8674,7 @@ ET
 BT
 529.4315 702.276 Td
 /F1.0 10.5 Tf
-<363439> Tj
+<363533> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8714,7 +8714,7 @@ ET
 BT
 529.4315 683.796 Td
 /F1.0 10.5 Tf
-<363630> Tj
+<363634> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8754,7 +8754,7 @@ ET
 BT
 529.4315 665.316 Td
 /F1.0 10.5 Tf
-<363633> Tj
+<363637> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8794,7 +8794,7 @@ ET
 BT
 529.4315 646.836 Td
 /F1.0 10.5 Tf
-<363637> Tj
+<363731> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8834,7 +8834,7 @@ ET
 BT
 529.4315 628.356 Td
 /F1.0 10.5 Tf
-<363733> Tj
+<363737> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8874,7 +8874,7 @@ ET
 BT
 529.4315 609.876 Td
 /F1.0 10.5 Tf
-<363834> Tj
+<363838> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8914,7 +8914,7 @@ ET
 BT
 529.4315 591.396 Td
 /F1.0 10.5 Tf
-<363835> Tj
+<363839> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8954,7 +8954,7 @@ ET
 BT
 529.4315 572.916 Td
 /F1.0 10.5 Tf
-<363836> Tj
+<363930> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -8994,7 +8994,7 @@ ET
 BT
 529.4315 554.436 Td
 /F1.0 10.5 Tf
-<363935> Tj
+<363939> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9034,7 +9034,7 @@ ET
 BT
 529.4315 535.956 Td
 /F1.0 10.5 Tf
-<363936> Tj
+<373030> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9074,7 +9074,7 @@ ET
 BT
 529.4315 517.476 Td
 /F1.0 10.5 Tf
-<363937> Tj
+<373031> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9114,7 +9114,7 @@ ET
 BT
 529.4315 498.996 Td
 /F1.0 10.5 Tf
-<363938> Tj
+<373032> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9154,7 +9154,7 @@ ET
 BT
 529.4315 480.516 Td
 /F1.0 10.5 Tf
-<363939> Tj
+<373033> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9194,7 +9194,7 @@ ET
 BT
 529.4315 462.036 Td
 /F1.0 10.5 Tf
-<373031> Tj
+<373035> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9234,7 +9234,7 @@ ET
 BT
 529.4315 443.556 Td
 /F1.0 10.5 Tf
-<373032> Tj
+<373036> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9274,7 +9274,7 @@ ET
 BT
 529.4315 425.076 Td
 /F1.0 10.5 Tf
-<373033> Tj
+<373037> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -9296,7 +9296,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4533 0 R 4534 0 R 4535 0 R 4536 0 R 4537 0 R 4538 0 R 4539 0 R 4540 0 R 4541 0 R 4542 0 R 4543 0 R 4544 0 R 4545 0 R 4546 0 R 4547 0 R 4548 0 R 4549 0 R 4550 0 R 4551 0 R 4552 0 R 4553 0 R 4554 0 R 4555 0 R 4556 0 R 4557 0 R 4558 0 R 4559 0 R 4560 0 R 4561 0 R 4562 0 R 4563 0 R 4564 0 R 4565 0 R 4566 0 R 4567 0 R 4568 0 R 4569 0 R 4570 0 R 4571 0 R 4572 0 R 4573 0 R 4574 0 R]
+/Annots [4544 0 R 4545 0 R 4546 0 R 4547 0 R 4548 0 R 4549 0 R 4550 0 R 4551 0 R 4552 0 R 4553 0 R 4554 0 R 4555 0 R 4556 0 R 4557 0 R 4558 0 R 4559 0 R 4560 0 R 4561 0 R 4562 0 R 4563 0 R 4564 0 R 4565 0 R 4566 0 R 4567 0 R 4568 0 R 4569 0 R 4570 0 R 4571 0 R 4572 0 R 4573 0 R 4574 0 R 4575 0 R 4576 0 R 4577 0 R 4578 0 R 4579 0 R 4580 0 R 4581 0 R 4582 0 R 4583 0 R 4584 0 R 4585 0 R]
 >>
 endobj
 23 0 obj
@@ -10108,7 +10108,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4575 0 R
+/XObject << /Stamp1 4586 0 R
 >>
 >>
 /Annots [30 0 R 31 0 R 32 0 R 34 0 R 36 0 R 37 0 R 39 0 R 40 0 R 41 0 R]
@@ -10123,7 +10123,7 @@ endobj
 >>
 endobj
 27 0 obj
-<< /Kids [638 0 R 3600 0 R 1889 0 R 639 0 R 3527 0 R 1200 0 R 4115 0 R 2527 0 R]
+<< /Kids [640 0 R 3612 0 R 1903 0 R 641 0 R 3539 0 R 1148 0 R 2519 0 R]
 >>
 endobj
 28 0 obj
@@ -10133,11 +10133,11 @@ endobj
 << /Type /Font
 /BaseFont /358635+NotoSerif-Bold
 /Subtype /TrueType
-/FontDescriptor 4809 0 R
+/FontDescriptor 4820 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4811 0 R
-/ToUnicode 4810 0 R
+/Widths 4822 0 R
+/ToUnicode 4821 0 R
 >>
 endobj
 30 0 obj
@@ -10177,11 +10177,11 @@ endobj
 << /Type /Font
 /BaseFont /260f03+NotoSerif-Italic
 /Subtype /TrueType
-/FontDescriptor 4813 0 R
+/FontDescriptor 4824 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4815 0 R
-/ToUnicode 4814 0 R
+/Widths 4826 0 R
+/ToUnicode 4825 0 R
 >>
 endobj
 34 0 obj
@@ -10199,11 +10199,11 @@ endobj
 << /Type /Font
 /BaseFont /c7d210+mplus1mn-regular
 /Subtype /TrueType
-/FontDescriptor 4817 0 R
+/FontDescriptor 4828 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4819 0 R
-/ToUnicode 4818 0 R
+/Widths 4830 0 R
+/ToUnicode 4829 0 R
 >>
 endobj
 36 0 obj
@@ -10229,11 +10229,11 @@ endobj
 << /Type /Font
 /BaseFont /34c70d+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4821 0 R
+/FontDescriptor 4832 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4823 0 R
-/ToUnicode 4822 0 R
+/Widths 4834 0 R
+/ToUnicode 4833 0 R
 >>
 endobj
 39 0 obj
@@ -10667,7 +10667,7 @@ endobj
 /F5.1 45 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4576 0 R
+/XObject << /Stamp2 4587 0 R
 >>
 >>
 >>
@@ -10676,11 +10676,11 @@ endobj
 << /Type /Font
 /BaseFont /26ec65+FontAwesome
 /Subtype /TrueType
-/FontDescriptor 4825 0 R
+/FontDescriptor 4836 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4827 0 R
-/ToUnicode 4826 0 R
+/Widths 4838 0 R
+/ToUnicode 4837 0 R
 >>
 endobj
 46 0 obj
@@ -10738,7 +10738,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4575 0 R
+/XObject << /Stamp1 4586 0 R
 >>
 >>
 >>
@@ -10823,7 +10823,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4576 0 R
+/XObject << /Stamp2 4587 0 R
 >>
 >>
 /Annots [52 0 R]
@@ -10841,7 +10841,7 @@ endobj
 >>
 endobj
 53 0 obj
-<< /Length 20287
+<< /Length 20335
 >>
 stream
 q
@@ -12078,7 +12078,7 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.5599 Tw
+1.4351 Tw
 
 BT
 66.24 160.235 Td
@@ -12093,10 +12093,10 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.5599 Tw
+1.4351 Tw
 
 BT
-89.5429 160.235 Td
+90.4181 160.235 Td
 /F3.0 10.5 Tf
 <636f6e662f68626173652d736974652e786d6c> Tj
 ET
@@ -12108,12 +12108,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.5599 Tw
+1.4351 Tw
 
 BT
-182.9089 160.235 Td
+183.7841 160.235 Td
 /F1.0 10.5 Tf
-[<2c20776869636820697320746865206d61696e20484261736520636f6e6669677572> 20.0195 <6174696f6e2066696c652e20417420746869732074696d652c20796f75206f6e6c79206e656564>] TJ
+[<2c20776869636820697320746865206d61696e20484261736520636f6e6669677572> 20.0195 <6174696f6e2066696c652e20417420746869732074696d652c20796f75206e65656420746f>] TJ
 ET
 
 
@@ -12123,12 +12123,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.3374 Tw
+3.1754 Tw
 
 BT
 66.24 144.455 Td
 /F1.0 10.5 Tf
-[<746f207370656369667920746865206469726563746f7279206f6e20746865206c6f63616c2066696c6573797374656d20776865726520484261736520616e64205a6f6f4b> 20.0195 <656570657220777269746520646174612e2042> 20.0195 <79>] TJ
+[<7370656369667920746865206469726563746f7279206f6e20746865206c6f63616c2066696c6573797374656d20776865726520484261736520616e64205a6f6f4b> 20.0195 <6565706572207772697465206461746120616e64>] TJ
 ET
 
 
@@ -12138,12 +12138,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.6966 Tw
+1.2274 Tw
 
 BT
 66.24 128.675 Td
 /F1.0 10.5 Tf
-[<64656661756c742c2061206e6577206469726563746f7279206973206372656174656420756e646572202f746d702e204d616e> 20.0195 <7920736572766572732061726520636f6e6669677572656420746f2064656c65746520746865>] TJ
+[<61636b6e6f776c6564676520736f6d65207269736b732e2042> 20.0195 <792064656661756c742c2061206e6577206469726563746f7279206973206372656174656420756e646572202f746d702e204d616e> 20.0195 <79207365727665727320617265>] TJ
 ET
 
 
@@ -12153,12 +12153,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-4.874 Tw
+0.8963 Tw
 
 BT
 66.24 112.895 Td
 /F1.0 10.5 Tf
-<636f6e74656e7473206f6620> Tj
+<636f6e6669677572656420746f2064656c6574652074686520636f6e74656e7473206f6620> Tj
 ET
 
 
@@ -12168,10 +12168,10 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-4.874 Tw
+0.8963 Tw
 
 BT
-133.8745 112.895 Td
+250.874 112.895 Td
 /F3.0 10.5 Tf
 <2f746d70> Tj
 ET
@@ -12183,12 +12183,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-4.874 Tw
+0.8963 Tw
 
 BT
-156.2185 112.895 Td
+273.218 112.895 Td
 /F1.0 10.5 Tf
-<2075706f6e207265626f6f742c20736f20796f752073686f756c642073746f726520746865206461746120656c736577686572652e2054686520666f6c6c6f77696e67> Tj
+<2075706f6e207265626f6f742c20736f20796f752073686f756c642073746f726520746865206461746120656c736577686572652e> Tj
 ET
 
 
@@ -12198,12 +12198,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-1.116 Tw
+0.0933 Tw
 
 BT
 66.24 97.115 Td
 /F1.0 10.5 Tf
-[<636f6e6669677572> 20.0195 <6174696f6e2077696c6c2073746f7265204842617365d573206461746120696e2074686520>] TJ
+[<54686520666f6c6c6f77696e6720636f6e6669677572> 20.0195 <6174696f6e2077696c6c2073746f7265204842617365d573206461746120696e2074686520>] TJ
 ET
 
 
@@ -12213,10 +12213,10 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-1.116 Tw
+0.0933 Tw
 
 BT
-291.8956 97.115 Td
+356.3751 97.115 Td
 /F3.0 10.5 Tf
 <6862617365> Tj
 ET
@@ -12228,12 +12228,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-1.116 Tw
+0.0933 Tw
 
 BT
-320.2036 97.115 Td
+384.6831 97.115 Td
 /F1.0 10.5 Tf
-[<206469726563746f7279> 89.8438 <2c20696e2074686520686f6d65206469726563746f7279206f66207468652075736572>] TJ
+[<206469726563746f7279> 89.8438 <2c20696e2074686520686f6d65206469726563746f7279>] TJ
 ET
 
 
@@ -12243,12 +12243,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.0348 Tw
+1.5148 Tw
 
 BT
 66.24 81.335 Td
 /F1.0 10.5 Tf
-<63616c6c656420> Tj
+<6f662074686520757365722063616c6c656420> Tj
 ET
 
 
@@ -12258,10 +12258,10 @@ ET
 0.6941 0.1294 0.2745 scn
 0.6941 0.1294 0.2745 SCN
 
-2.0348 Tw
+1.5148 Tw
 
 BT
-100.6253 81.335 Td
+160.6672 81.335 Td
 /F4.0 10.5 Tf
 <7465737475736572> Tj
 ET
@@ -12273,10 +12273,10 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.0348 Tw
+1.5148 Tw
 
 BT
-142.6253 81.335 Td
+202.6672 81.335 Td
 /F1.0 10.5 Tf
 <2e2050617374652074686520> Tj
 ET
@@ -12288,10 +12288,10 @@ ET
 0.6941 0.1294 0.2745 scn
 0.6941 0.1294 0.2745 SCN
 
-2.0348 Tw
+1.5148 Tw
 
 BT
-201.7757 81.335 Td
+260.2577 81.335 Td
 /F4.0 10.5 Tf
 <3c70726f70657274793e> Tj
 ET
@@ -12303,10 +12303,10 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.0348 Tw
+1.5148 Tw
 
 BT
-254.2757 81.335 Td
+312.7577 81.335 Td
 /F1.0 10.5 Tf
 <20746167732062656e656174682074686520> Tj
 ET
@@ -12318,10 +12318,10 @@ ET
 0.6941 0.1294 0.2745 scn
 0.6941 0.1294 0.2745 SCN
 
-2.0348 Tw
+1.5148 Tw
 
 BT
-349.9428 81.335 Td
+406.3449 81.335 Td
 /F4.0 10.5 Tf
 <3c636f6e66696775726174696f6e3e> Tj
 ET
@@ -12333,12 +12333,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.0348 Tw
+1.5148 Tw
 
 BT
-428.6928 81.335 Td
+485.0949 81.335 Td
 /F1.0 10.5 Tf
-<20746167732c2077686963682073686f756c64206265> Tj
+<20746167732c207768696368> Tj
 ET
 
 
@@ -12351,7 +12351,7 @@ ET
 BT
 66.24 65.555 Td
 /F1.0 10.5 Tf
-<656d70747920696e2061206e657720484261736520696e7374616c6c2e> Tj
+<73686f756c6420626520656d70747920696e2061206e657720484261736520696e7374616c6c2e> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -12396,7 +12396,7 @@ endobj
 /F1.1 38 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4575 0 R
+/XObject << /Stamp1 4586 0 R
 >>
 >>
 /Annots [57 0 R 59 0 R]
@@ -12431,7 +12431,7 @@ endobj
 >>
 endobj
 60 0 obj
-<< /Length 16800
+<< /Length 15405
 >>
 stream
 q
@@ -12475,10 +12475,10 @@ q
 70.24 786.899 m
 543.04 786.899 l
 545.2491 786.899 547.04 785.1081 547.04 782.899 c
-547.04 597.499 l
-547.04 595.2899 545.2491 593.499 543.04 593.499 c
-70.24 593.499 l
-68.0309 593.499 66.24 595.2899 66.24 597.499 c
+547.04 346.919 l
+547.04 344.7099 545.2491 342.919 543.04 342.919 c
+70.24 342.919 l
+68.0309 342.919 66.24 344.7099 66.24 346.919 c
 66.24 782.899 l
 66.24 785.1081 68.0309 786.899 70.24 786.899 c
 h
@@ -12488,10 +12488,10 @@ f
 70.24 786.899 m
 543.04 786.899 l
 545.2491 786.899 547.04 785.1081 547.04 782.899 c
-547.04 597.499 l
-547.04 595.2899 545.2491 593.499 543.04 593.499 c
-70.24 593.499 l
-68.0309 593.499 66.24 595.2899 66.24 597.499 c
+547.04 346.919 l
+547.04 344.7099 545.2491 342.919 543.04 342.919 c
+70.24 342.919 l
+68.0309 342.919 66.24 344.7099 66.24 346.919 c
 66.24 782.899 l
 66.24 785.1081 68.0309 786.899 70.24 786.899 c
 h
@@ -12502,10 +12502,10 @@ q
 82.24 774.899 m
 531.04 774.899 l
 533.2491 774.899 535.04 773.1081 535.04 770.899 c
-535.04 609.499 l
-535.04 607.2899 533.2491 605.499 531.04 605.499 c
-82.24 605.499 l
-80.0309 605.499 78.24 607.2899 78.24 609.499 c
+535.04 358.919 l
+535.04 356.7099 533.2491 354.919 531.04 354.919 c
+82.24 354.919 l
+80.0309 354.919 78.24 356.7099 78.24 358.919 c
 78.24 770.899 l
 78.24 773.1081 80.0309 774.899 82.24 774.899 c
 h
@@ -12515,10 +12515,10 @@ f
 82.24 774.899 m
 531.04 774.899 l
 533.2491 774.899 535.04 773.1081 535.04 770.899 c
-535.04 609.499 l
-535.04 607.2899 533.2491 605.499 531.04 605.499 c
-82.24 605.499 l
-80.0309 605.499 78.24 607.2899 78.24 609.499 c
+535.04 358.919 l
+535.04 356.7099 533.2491 354.919 531.04 354.919 c
+82.24 354.919 l
+80.0309 354.919 78.24 356.7099 78.24 358.919 c
 78.24 770.899 l
 78.24 773.1081 80.0309 774.899 82.24 774.899 c
 h
@@ -12799,13 +12799,24 @@ 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
+89.24 619.414 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
-89.24 619.414 Td
+100.24 619.414 Td
 /F4.0 11 Tf
-<3c2f636f6e66696775726174696f6e3e> Tj
+<3c70726f70657274793e> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -12813,43 +12824,65 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.4521 Tw
+BT
+89.24 604.674 Td
+/F4.0 11 Tf
+<ca202020> 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
-66.24 569.535 Td
-/F1.0 10.5 Tf
-[<59> 69.8242 <6f7520646f206e6f74206e65656420746f20637265617465207468652048426173652064617461206469726563746f7279> 89.8438 <2e2048426173652077696c6c20646f207468697320666f7220796f752e20496620796f752063726561746520746865>] TJ
+111.24 604.674 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
+144.24 604.674 Td
+/F4.0 11 Tf
+<68626173652e756e736166652e73747265616d2e6361706162696c6974792e656e666f726365> 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
+353.24 604.674 Td
+/F4.0 11 Tf
+<3c2f6e616d653e> 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
-66.24 553.755 Td
-/F1.0 10.5 Tf
-[<6469726563746f7279> 89.8438 <2c2048426173652077696c6c20617474656d707420746f20646f2061206d696772> 20.0195 <6174696f6e2c207768696368206973206e6f74207768617420796f752077616e742e>] TJ
+89.24 589.934 Td
+/F4.0 11 Tf
+<ca202020> Tj
 ET
 
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-q
-0.5 w
-0.9333 0.9333 0.9333 SCN
-126.24 537.939 m
-126.24 451.039 l
-S
-Q
-0.098 0.251 0.4863 scn
-0.098 0.251 0.4863 SCN
+0.1843 0.4353 0.6235 scn
+0.1843 0.4353 0.6235 SCN
 
 BT
-85.956 485.921 Td
-/F5.1 24 Tf
-<21> Tj
+111.24 589.934 Td
+/F4.0 11 Tf
+<3c76616c75653e> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -12857,87 +12890,221 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-3.1679 Tw
+BT
+149.74 589.934 Td
+/F4.0 11 Tf
+<66616c7365> 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
-138.24 521.975 Td
-/F1.0 10.5 Tf
-<54686520> Tj
+177.24 589.934 Td
+/F4.0 11 Tf
+<3c2f76616c75653e> 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
+89.24 575.194 Td
+/F4.0 11 Tf
+<ca202020> 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
+111.24 575.194 Td
+/F4.0 11 Tf
+<3c6465736372697074696f6e3e> 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
 
-3.1679 Tw
+BT
+89.24 560.454 Td
+/F4.0 11 Tf
+<ca2020202020> 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
-162.8279 521.975 Td
-/F3.0 10.5 Tf
-<68626173652e726f6f74646972> Tj
+122.24 560.454 Td
+/F4.0 11 Tf
+<436f6e74726f6c7320776865746865722048426173652077696c6c20636865636b20666f722073747265616d206361706162696c6974696573202868666c7573682f6873796e63292e> 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
+89.24 530.974 Td
+/F4.0 11 Tf
+<ca202020202044697361626c65207468697320696620796f7520696e74656e6420746f2072756e206f6e204c6f63616c46696c6553797374656d2c2064656e6f7465642062792061> 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
 
-3.1679 Tw
+BT
+89.24 516.234 Td
+/F4.0 11 Tf
+<726f6f74646972> 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
-228.7574 521.975 Td
-/F1.0 10.5 Tf
-<20696e207468652061626f7665206578616d706c6520706f696e747320746f2061206469726563746f727920696e2074686520> Tj
+89.24 501.494 Td
+/F4.0 11 Tf
+<ca20202020207769746820746865202766696c653a2f2f2720736368656d652c20627574206265206d696e6466756c206f6620746865204e4f54452062656c6f772e> 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
+89.24 472.014 Td
+/F4.0 11 Tf
+<ca20202020205741524e494e473a2053657474696e67207468697320746f2066616c736520626c696e647320796f7520746f20706f74656e7469616c2064617461206c6f737320616e64> 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
 
-3.1679 Tw
+BT
+89.24 457.274 Td
+/F4.0 11 Tf
+<ca2020202020696e636f6e73697374656e742073797374656d20737461746520696e20746865206576656e74206f662070726f6365737320616e642f6f72206e6f6465206661696c757265732e> 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
-511.4465 521.975 Td
-/F3.0 10.5 Tf
-<6c6f63616c> Tj
+89.24 442.534 Td
+/F4.0 11 Tf
+<4966> 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
+89.24 427.794 Td
+/F4.0 11 Tf
+<ca2020202020484261736520697320636f6d706c61696e696e67206f6620616e20696e6162696c69747920746f20757365206873796e63206f722068666c7573682069742773206d6f7374> 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
+89.24 413.054 Td
+/F4.0 11 Tf
+<ca20202020206c696b656c79206e6f7420612066616c736520706f7369746976652e> 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
 
-0.8087 Tw
+BT
+89.24 398.314 Td
+/F4.0 11 Tf
+<ca202020> 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
-138.24 506.195 Td
-/F3.0 10.5 Tf
-<66696c6573797374656d> Tj
+111.24 398.314 Td
+/F4.0 11 Tf
+<3c2f6465736372697074696f6e3e> 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
+89.24 383.574 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
+100.24 383.574 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
+89.24 368.834 Td
+/F4.0 11 Tf
+<3c2f636f6e66696775726174696f6e3e> 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
 
-0.8087 Tw
+0.4521 Tw
 
 BT
-186.8235 506.195 Td
+66.24 318.955 Td
 /F1.0 10.5 Tf
-[<2e20546865202766696c653a2f272070726566697820697320686f772077652064656e6f7465206c6f63616c2066696c6573797374656d2e2054> 29.7852 <6f20686f6d65204842617365>] TJ
+[<59> 69.8242 <6f7520646f206e6f74206e65656420746f20637265617465207468652048426173652064617461206469726563746f7279> 89.8438 <2e2048426173652077696c6c20646f207468697320666f7220796f752e20496620796f752063726561746520746865>] TJ
 ET
 
 
@@ -12947,12 +13114,41 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.3454 Tw
+BT
+66.24 303.175 Td
+/F1.0 10.5 Tf
+[<6469726563746f7279> 89.8438 <2c2048426173652077696c6c20617474656d707420746f20646f2061206d696772> 20.0195 <6174696f6e2c207768696368206973206e6f74207768617420796f752077616e742e>] TJ
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+q
+0.5 w
+0.9333 0.9333 0.9333 SCN
+126.24 287.359 m
+126.24 153.119 l
+S
+Q
+0.098 0.251 0.4863 scn
+0.098 0.251 0.4863 SCN
+
+BT
+85.956 211.671 Td
+/F5.1 24 Tf
+<21> 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.1679 Tw
 
 BT
-138.24 490.415 Td
+138.24 271.395 Td
 /F1.0 10.5 Tf
-<6f6e20616e206578697374696e6720696e7374616e6365206f6620484446532c207365742074686520> Tj
+<54686520> Tj
 ET
 
 
@@ -12962,10 +13158,10 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.3454 Tw
+3.1679 Tw
 
 BT
-339.9254 490.415 Td
+162.8279 271.395 Td
 /F3.0 10.5 Tf
 <68626173652e726f6f74646972> Tj
 ET
@@ -12977,12 +13173,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.3454 Tw
+3.1679 Tw
 
 BT
-405.8549 490.415 Td
+228.7574 271.395 Td
 /F1.0 10.5 Tf
-<20746f20706f696e742061742061206469726563746f7279207570> Tj
+<20696e207468652061626f7665206578616d706c6520706f696e747320746f2061206469726563746f727920696e2074686520> Tj
 ET
 
 
@@ -12992,12 +13188,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.9003 Tw
+3.1679 Tw
 
 BT
-138.24 474.635 Td
-/F1.0 10.5 Tf
-<6f6e20796f757220696e7374616e63653a20652e672e20> Tj
+511.4465 271.395 Td
+/F3.0 10.5 Tf
+<6c6f63616c> Tj
 ET
 
 
@@ -13007,12 +13203,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.9003 Tw
+0.4203 Tw
 
 BT
-258.6631 474.635 Td
+138.24 255.615 Td
 /F3.0 10.5 Tf
-<686466733a2f2f6e616d656e6f64652e6578616d706c652e6f72673a383032302f6862617365> Tj
+<66696c6573797374656d> Tj
 ET
 
 
@@ -13022,12 +13218,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.9003 Tw
+0.4203 Tw
 
 BT
-459.4231 474.635 Td
+186.8235 255.615 Td
 /F1.0 10.5 Tf
-[<2e2046> 40.0391 <6f72206d6f7265206f6e>] TJ
+[<2e20546865202766696c653a2f2f272070726566697820697320686f772077652064656e6f7465206c6f63616c2066696c6573797374656d2e2059> 69.8242 <6f752073686f756c642074616b> 20.0195 <65>] TJ
 ET
 
 
@@ -13037,10 +13233,186 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
+2.1909 Tw
+
+BT
+138.24 239.835 Td
+/F1.0 10.5 Tf
+[<7468652057> 60.0586 <41524e494e472070726573656e7420696e2074686520636f6e6669677572> 20.0195 <6174696f6e206578616d706c6520746f2068656172742e20496e207374616e64616c6f6e65>] 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
+
+2.1539 Tw
+
+BT
+138.24 224.055 Td
+/F1.0 10.5 Tf
+[<6d6f6465204842617365206d616b> 20.0195 <657320757365206f6620746865206c6f63616c2066696c6573797374656d206162737472> 20.0195 <616374696f6e2066726f6d2074686520417061636865>] 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
+
+1.1101 Tw
+
+BT
+138.24 208.275 Td
+/F1.0 10.5 Tf
+[<4861646f6f702070726f6a6563742e2054686174206162737472> 20.0195 <616374696f6e20646f65736ed5742070726f766964652074686520647572> 20.0195 <6162696c6974792070726f6d697365732074686174>] 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
+
+1.6042 Tw
+
+BT
+138.24 192.495 Td
+/F1.0 10.5 Tf
+[<4842617365206e6565647320746f206f706572> 20.0195 <61746520736166656c79> 89.8438 <2e20546869732069732066696e6520666f72206c6f63616c20646576656c6f706d656e7420616e642074657374696e67>] 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
+
+4.5663 Tw
+
+BT
+138.24 176.715 Td
+/F1.0 10.5 Tf
+<7573652063617365732077686572652074686520636f7374206f6620636c7573746572206661696c7572652069732077656c6c20636f6e7461696e65642e204974206973206e6f74> 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
+138.24 160.935 Td
+/F1.0 10.5 Tf
+[<617070726f70726961746520666f722070726f64756374696f6e206465706c6f> 20.0195 <796d656e74733b206576656e7475616c6c7920796f752077696c6c206c6f736520646174612e>] 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.6268 Tw
+
+BT
+48.24 123.155 Td
+/F1.0 10.5 Tf
+[<54> 29.7852 <6f20686f6d65204842617365206f6e20616e206578697374696e6720696e7374616e6365206f6620484446532c207365742074686520>] 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
+
+0.6268 Tw
+
+BT
+334.0593 123.155 Td
+/F3.0 10.5 Tf
+<68626173652e726f6f74646972> 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
+
+0.6268 Tw
+
+BT
+399.9888 123.155 Td
+/F1.0 10.5 Tf
+<20746f20706f696e742061742061206469726563746f7279207570206f6e> 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
+
+3.7325 Tw
+
+BT
+48.24 107.375 Td
+/F1.0 10.5 Tf
+<796f757220696e7374616e63653a20652e672e20> 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
+
+3.7325 Tw
+
+BT
+152.7091 107.375 Td
+/F3.0 10.5 Tf
+<686466733a2f2f6e616d656e6f64652e6578616d706c652e6f72673a383032302f6862617365> 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
+
+3.7325 Tw
+
 BT
-138.24 458.855 Td
+353.4691 107.375 Td
 /F1.0 10.5 Tf
-<746869732076617269616e742c20736565207468652073656374696f6e2062656c6f77206f6e205374616e64616c6f6e65204842617365206f76657220484446532e> Tj
+[<2e2046> 40.0391 <6f72206d6f7265206f6e20746869732076617269616e742c2073656520746865>] 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 91.595 Td
+/F1.0 10.5 Tf
+<73656374696f6e2062656c6f77206f6e205374616e64616c6f6e65204842617365206f76657220484446532e> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -13051,9 +13423,9 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-52.6765 427.075 Td
+52.6765 63.815 Td
 /F1.0 10.5 Tf
-<352e> Tj
+<312e> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -13066,7 +13438,7 @@ ET
 0.0506 Tw
 
 BT
-66.24 427.075 Td
+66.24 63.815 Td
 /F1.0 10.5 Tf
 <54686520> Tj
 ET
@@ -13081,7 +13453,7 @@ ET
 0.0506 Tw
 
 BT
-87.7106 427.075 Td
+87.7106 63.815 Td
 /F3.0 10.5 Tf
 <62696e2f73746172742d68626173652e7368> Tj
 ET
@@ -13096,7 +13468,7 @@ ET
 0.0506 Tw
 
 BT
-175.0286 427.075 Td
+175.0286 63.815 Td
 /F1.0 10.5 Tf
 [<207363726970742069732070726f7669646564206173206120636f6e76656e69656e74207761> 20.0195 <7920746f2073746172742048426173652e2049737375652074686520636f6d6d616e642c>] TJ
 ET
@@ -13105,13 +13477,64 @@ ET
 0.0 Tw
 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
+<36> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+Q
+Q
+
+endstream
+endobj
+61 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 60 0 R
+/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/Font << /F3.0 33 0 R
+/F4.0 35 0 R
+/F1.0 10 0 R
+/F5.1 45 0 R
+>>
+/XObject << /Stamp2 4587 0 R
+>>
+>>
+>>
+endobj
+62 0 obj
+<< /Length 11899
+>>
+stream
+q
+/DeviceRGB cs
+0.2 0.2 0.2 scn
+/DeviceRGB CS
+0.2 0.2 0.2 SCN
+
 3.3428 Tw
 
 BT
-66.24 411.295 Td
+66.24 794.676 Td
 /F1.0 10.5 Tf
 <616e6420696620616c6c20676f65732077656c6c2c2061206d657373616765206973206c6f6767656420746f207374616e64617264206f75747075742073686f77696e6720746861742048426173652073746172746564> Tj
 ET
@@ -13126,7 +13549,7 @@ ET
 0.9465 Tw
 
 BT
-66.24 395.515 Td
+66.24 778.896 Td
 /F1.0 10.5 Tf
 [<7375636365737366756c6c79> 89.8438 <2e2059> 69.8242 <6f752063616e207573652074686520>] TJ
 ET
@@ -13141,7 +13564,7 @@ ET
 0.9465 Tw
 
 BT
-215.393 395.515 Td
+215.393 778.896 Td
 /F4.0 10.5 Tf
 <6a7073> Tj
 ET
@@ -13156,7 +13579,7 @@ ET
 0.9465 Tw
 
 BT
-231.143 395.515 Td
+231.143 778.896 Td
 /F1.0 10.5 Tf
 <20636f6d6d616e6420746f20766572696679207468617420796f752068617665206f6e652072756e6e696e672070726f636573732063616c6c6564> Tj
 ET
@@ -13171,7 +13594,7 @@ ET
 0.582 Tw
 
 BT
-66.24 379.735 Td
+66.24 763.116 Td
 /F4.0 10.5 Tf
 <484d6173746572> Tj
 ET
@@ -13186,7 +13609,7 @@ ET
 0.582 Tw
 
 BT
-102.99 379.735 Td
+102.99 763.116 Td
 /F1.0 10.5 Tf
 <2e20496e207374616e64616c6f6e65206d6f64652048426173652072756e7320616c6c206461656d6f6e732077697468696e20746869732073696e676c65204a564d2c20692e652e2074686520484d61737465722c2061> Tj
 ET
@@ -13201,7 +13624,7 @@ ET
 2.9099 Tw
 
 BT
-66.24 363.955 Td
+66.24 747.336 Td
 /F1.0 10.5 Tf
 [<73696e676c652048526567696f6e5365727665722c20616e6420746865205a6f6f4b> 20.0195 <6565706572206461656d6f6e2e20476f20746f20>] TJ
 ET
@@ -13216,7 +13639,7 @@ ET
 2.9099 Tw
 
 BT
-374.2267 363.955 Td
+374.2267 747.336 Td
 /F3.0 10.5 Tf
 <687474703a2f2f6c6f63616c686f73743a3136303130> Tj
 ET
@@ -13231,7 +13654,7 @@ ET
 2.9099 Tw
 
 BT
-480.3397 363.955 Td
+480.3397 747.336 Td
 /F1.0 10.5 Tf
 <20746f207669657720746865> Tj
 ET
@@ -13244,7 +13667,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 348.175 Td
+66.24 731.556 Td
 /F1.0 10.5 Tf
 [<48426173652057> 60.0586 <65622055492e>] TJ
 ET
@@ -13254,15 +13677,15 @@ ET
 q
 0.5 w
 0.9333 0.9333 0.9333 SCN
-126.24 332.359 m
-126.24 261.239 l
+126.24 715.74 m
+126.24 644.62 l
 S
 Q
 0.098 0.251 0.4863 scn
 0.098 0.251 0.4863 SCN
 
 BT
-85.956 288.231 Td
+85.956 671.612 Td
 /F5.1 24 Tf
 <21> Tj
 ET
@@ -13275,7 +13698,7 @@ ET
 0.2246 Tw
 
 BT
-138.24 316.395 Td
+138.24 699.776 Td
 /F1.0 10.5 Tf
 <4a617661206e6565647320746f20626520696e7374616c6c656420616e6420617661696c61626c652e20496620796f752067657420616e206572726f7220696e6469636174696e672074686174204a617661> Tj
 ET
@@ -13290,7 +13713,7 @@ ET
 1.4074 Tw
 
 BT
-138.24 300.615 Td
+138.24 683.996 Td
 /F1.0 10.5 Tf
 <6973206e6f7420696e7374616c6c65642c20627574206974206973206f6e20796f75722073797374656d2c207065726861707320696e2061206e6f6e2d7374616e64617264206c6f636174696f6e2c> Tj
 ET
@@ -13305,7 +13728,7 @@ ET
 1.1929 Tw
 
 BT
-138.24 284.835 Td
+138.24 668.216 Td
 /F1.0 10.5 Tf
 <656469742074686520> Tj
 ET
@@ -13320,7 +13743,7 @@ ET
 1.1929 Tw
 
 BT
-181.1348 284.835 Td
+181.1348 668.216 Td
 /F3.0 10.5 Tf
 [<636f6e662f68626173652d656e76> 69.8242 <2e7368>] TJ
 ET
@@ -13335,7 +13758,7 @@ ET
 1.1929 Tw
 
 BT
-266.6276 284.835 Td
+266.6276 668.216 Td
 /F1.0 10.5 Tf
 <2066696c6520616e64206d6f646966792074686520> Tj
 ET
@@ -13350,7 +13773,7 @@ ET
 1.1929 Tw
 
 BT
-372.9196 284.835 Td
+372.9196 668.216 Td
 /F4.0 10.5 Tf
 <4a4156415f484f4d45> Tj
 ET
@@ -13365,7 +13788,7 @@ ET
 1.1929 Tw
 
 BT
-420.1696 284.835 Td
+420.1696 668.216 Td
 /F1.0 10.5 Tf
 <2073657474696e6720746f20706f696e7420746f20746865> Tj
 ET
@@ -13378,7 +13801,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-138.24 269.055 Td
+138.24 652.436 Td
 /F1.0 10.5 Tf
 <6469726563746f7279207468617420636f6e7461696e7320> Tj
 ET
@@ -13389,7 +13812,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-254.937 269.055 Td
+254.937 652.436 Td
 /F3.0 10.5 Tf
 <62696e2f6a617661> Tj
 ET
@@ -13400,7 +13823,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-294.207 269.055 Td
+294.207 652.436 Td
 /F1.0 10.5 Tf
 <206f6e20796f75722073797374656d2e> Tj
 ET
@@ -13411,7 +13834,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-48.24 231.8732 Td
+48.24 615.2542 Td
 /F3.0 9.975 Tf
 [<50726f6365647572653a205573652048426173652046> 40.0391 <6f72207468652046697273742054696d65>] TJ
 ET
@@ -13424,7 +13847,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-52.6765 212.284 Td
+52.6765 595.665 Td
 /F1.0 10.5 Tf
 <312e> Tj
 ET
@@ -13437,7 +13860,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 212.284 Td
+66.24 595.665 Td
 /F1.0 10.5 Tf
 <436f6e6e65637420746f2048426173652e> Tj
 ET
@@ -13450,7 +13873,7 @@ ET
 0.6856 Tw
 
 BT
-66.24 184.504 Td
+66.24 567.885 Td
 /F1.0 10.5 Tf
 <436f6e6e65637420746f20796f75722072756e6e696e6720696e7374616e6365206f66204842617365207573696e672074686520> Tj
 ET
@@ -13465,7 +13888,7 @@ ET
 0.6856 Tw
 
 BT
-338.1657 184.504 Td
+338.1657 567.885 Td
 /F4.0 10.5 Tf
 <6862617365207368656c6c> Tj
 ET
@@ -13480,7 +13903,7 @@ ET
 0.6856 Tw
 
 BT
-396.6013 184.504 Td
+396.6013 567.885 Td
 /F1.0 10.5 Tf
 <20636f6d6d616e642c206c6f636174656420696e2074686520> Tj
 ET
@@ -13495,7 +13918,7 @@ ET
 0.6856 Tw
 
 BT
-528.6335 184.504 Td
+528.6335 567.885 Td
 /F3.0 10.5 Tf
 <62696e2f> Tj
 ET
@@ -13510,7 +13933,7 @@ ET
 0.6856 Tw
 
 BT
-547.04 184.504 Td
+547.04 567.885 Td
 ET
 
 
@@ -13523,7 +13946,7 @@ ET
 1.6631 Tw
 
 BT
-66.24 168.724 Td
+66.24 552.105 Td
 /F1.0 10.5 Tf
 <6469726563746f7279206f6620796f757220484261736520696e7374616c6c2e20496e2074686973206578616d706c652c20736f6d6520757361676520616e642076657273696f6e20696e666f726d6174696f6e2074686174206973> Tj
 ET
@@ -13538,7 +13961,7 @@ ET
 1.3587 Tw
 
 BT
-66.24 152.944 Td
+66.24 536.325 Td
 /F1.0 10.5 Tf
 <7072696e746564207768656e20796f75207374617274204842617365205368656c6c20686173206265656e206f6d69747465642e20546865204842617365205368656c6c2070726f6d707420656e64732077697468206120> Tj
 ET
@@ -13553,7 +13976,7 @@ ET
 1.3587 Tw
 
 BT
-541.79 152.944 Td
+541.79 536.325 Td
 /F4.0 10.5 Tf
 <3e> Tj
 ET
@@ -13568,7 +13991,7 @@ ET
 1.3587 Tw
 
 BT
-547.04 152.944 Td
+547.04 536.325 Td
 ET
 
 
@@ -13579,7 +14002,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 137.164 Td
+66.24 520.545 Td
 /F1.0 10.5 Tf
 [<63686172> 20.0195 <61637465722e>] TJ
 ET
@@ -13588,28 +14011,28 @@ ET
 0.0 0.0 0.0 scn
 q
 0.9608 0.9608 0.9608 scn
-70.24 121.348 m
-543.04 121.348 l
-545.2491 121.348 547.04 119.5571 547.04 117.348 c
-547.04 73.868 l
-547.04 71.6589 545.2491 69.868 543.04 69.868 c
-70.24 69.868 l
-68.0309 69.868 66.24 71.6589 66.24 73.868 c
-66.24 117.348 l
-66.24 119.5571 68.0309 121.348 70.24 121.348 c
+70.24 504.729 m
+543.04 504.729 l
+545.2491 504.729 547.04 502.9381 547.04 500.729 c
+547.04 457.249 l
+547.04 455.0399 545.2491 453.249 543.04 453.249 c
+70.24 453.249 l
+68.0309 453.249 66.24 455.0399 66.24 457.249 c
+66.24 500.729 l
+66.24 502.9381 68.0309 504.729 70.24 504.729 c
 h
 f
 0.8 0.8 0.8 SCN
 0.75 w
-70.24 121.348 m
-543.04 121.348 l
-545.2491 121.348 547.04 119.5571 547.04 117.348 c
-547.04 73.868 l
-547.04 71.6589 545.2491 69.868 543.04 69.868 c
-70.24 69.868 l
-68.0309 69.868 66.24 71.6589 66.24 73.868 c
-66.24 117.348 l
-66.24 119.5571 68.0309 121.348 70.24 121.348 c
+70.24 504.729 m
+543.04 504.729 l
+545.2491 504.729 547.04 502.9381 547.04 500.729 c
+547.04 457.249 l
+547.04 455.0399 545.2491 453.249 543.04 453.249 c
+70.24 453.249 l
+68.0309 453.249 66.24 455.0399 66.24 457.249 c
+66.24 500.729 l
+66.24 502.9381 68.0309 504.729 70.24 504.729 c
 h
 S
 Q
@@ -13617,7 +14040,7 @@ Q
 0.2 0.2 0.2 SCN
 
 BT
-77.24 98.523 Td
+77.24 481.904 Td
 /F4.0 11 Tf
 <24202e2f62696e2f6862617365207368656c6c> Tj
 ET
@@ -13628,86 +14051,20 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-77.24 83.783 Td
+77.24 467.164 Td
 /F4.0 11 Tf
 <6862617365286d61696e293a3030313a303e> 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
-<36> Tj
-ET
-
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-Q
-Q
-
-endstream
-endobj
-61 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 60 0 R
-/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/Font << /F3.0 33 0 R
-/F4.0 35 0 R
-/F1.0 10 0 R
-/F5.1 45 0 R
->>
-/XObject << /Stamp2 4576 0 R
->>
->>
-/Annots [62 0 R]
->>
-endobj
-62 0 obj
-<< /Border [0 0 0]
-/A << /Type /Action
-/S /URI
-/URI (http://localhost:16010)
->>
-/Subtype /Link
-/Rect [374.2267 360.889 480.3397 375.169]
-/Type /Annot
->>
-endobj
-63 0 obj
-[61 0 R /XYZ 0 243.239 null]
-endobj
-64 0 obj
-<< /Length 11597
->>
-stream
-q
 
 -0.5 Tc
-/DeviceRGB cs
 0.2 0.2 0.2 scn
-/DeviceRGB CS
 0.2 0.2 0.2 SCN
 
 BT
-52.6765 793.926 Td
+52.6765 429.285 Td
 /F1.0 10.5 Tf
 <322e> Tj
 ET
@@ -13720,7 +14077,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 793.926 Td
+66.24 429.285 Td
 /F1.0 10.5 Tf
 [<446973706c61> 20.0195 <79204842617365205368656c6c2048656c702054> 29.7852 <6578742e>] TJ
 ET
@@ -13733,7 +14090,7 @@ ET
 0.8443 Tw
 
 BT
-66.24 766.146 Td
+66.24 401.505 Td
 /F1.0 10.5 Tf
 <5479706520> Tj
 ET
@@ -13748,7 +14105,7 @@ ET
 0.8443 Tw
 
 BT
-94.2058 766.146 Td
+94.2058 401.505 Td
 /F4.0 10.5 Tf
 <68656c70> Tj
 ET
@@ -13763,7 +14120,7 @@ ET
 0.8443 Tw
 
 BT
-115.2058 766.146 Td
+115.2058 401.505 Td
 /F1.0 10.5 Tf
 [<20616e6420707265737320456e7465722c20746f20646973706c61> 20.0195 <7920736f6d6520626173696320757361676520696e666f726d6174696f6e20666f72204842617365205368656c6c2c2061732077656c6c206173>] TJ
 ET
@@ -13778,7 +14135,7 @@ ET
 1.8193 Tw
 
 BT
-66.24 750.366 Td
+66.24 385.725 Td
 /F1.0 10.5 Tf
 [<7365766572> 20.0195 <616c206578616d706c6520636f6d6d616e64732e204e6f746963652074686174207461626c65206e616d65732c20726f77732c20636f6c756d6e7320616c6c206d75737420626520656e636c6f73656420696e>] TJ
 ET
@@ -13791,7 +14148,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 734.586 Td
+66.24 369.945 Td
 /F1.0 10.5 Tf
 [<71756f74652063686172> 20.0195 <6163746572732e>] TJ
 ET
@@ -13804,7 +14161,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-52.6765 706.806 Td
+52.6765 342.165 Td
 /F1.0 10.5 Tf
 <332e> Tj
 ET
@@ -13817,7 +14174,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 706.806 Td
+66.24 342.165 Td
 /F1.0 10.5 Tf
 <4372656174652061207461626c652e> Tj
 ET
@@ -13830,7 +14187,7 @@ ET
 2.7138 Tw
 
 BT
-66.24 679.026 Td
+66.24 314.385 Td
 /F1.0 10.5 Tf
 <5573652074686520> Tj
 ET
@@ -13845,7 +14202,7 @@ ET
 2.7138 Tw
 
 BT
-110.9481 679.026 Td
+110.9481 314.385 Td
 /F4.0 10.5 Tf
 <637265617465> Tj
 ET
@@ -13860,7 +14217,7 @@ ET
 2.7138 Tw
 
 BT
-142.4481 679.026 Td
+142.4481 314.385 Td
 /F1.0 10.5 Tf
 [<20636f6d6d616e6420746f206372656174652061206e6577207461626c652e2059> 69.8242 <6f75206d757374207370656369667920746865207461626c65206e616d6520616e6420746865>] TJ
 ET
@@ -13873,7 +14230,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 663.246 Td
+66.24 298.605 Td
 /F1.0 10.5 Tf
 [<436f6c756d6e46> 40.0391 <616d696c79206e616d652e>] TJ
 ET
@@ -13882,28 +14239,28 @@ ET
 0.0 0.0 0.0 scn
 q
 0.9608 0.9608 0.9608 scn
-70.24 647.43 m
-543.04 647.43 l
-545.2491 647.43 547.04 645.6391 547.04 643.43 c
-547.04 570.47 l
-547.04 568.2609 545.2491 566.47 543.04 566.47 c
-70.24 566.47 l
-68.0309 566.47 66.24 568.2609 66.24 570.47 c
-66.24 643.43 l
-66.24 645.6391 68.0309 647.43 70.24 647.43 c
+70.24 282.789 m
+543.04 282.789 l
+545.2491 282.789 547.04 280.9981 547.04 278.789 c
+547.04 205.829 l
+547.04 203.6199 545.2491 201.829 543.04 201.829 c
+70.24 201.829 l
+68.0309 201.829 66.24 203.6199 66.24 205.829 c
+66.24 278.789 l
+66.24 280.9981 68.0309 282.789 70.24 282.789 c
 h
 f
 0.8 0.8 0.8 SCN
 0.75 w
-70.24 647.43 m
-543.04 647.43 l
-545.2491 647.43 547.04 645.6391 547.04 643.43 c
-547.04 570.47 l
-547.04 568.2609 545.2491 566.47 543.04 566.47 c
-70.24 566.47 l
-68.0309 566.47 66.24 568.2609 66.24 570.47 c
-66.24 643.43 l
-66.24 645.6391 68.0309 647.43 70.24 647.43 c
+70.24 282.789 m
+543.04 282.789 l
+545.2491 282.789 547.04 280.9981 547.04 278.789 c
+547.04 205.829 l
+547.04 203.6199 545.2491 201.829 543.04 201.829 c
+70.24 201.829 l
+68.0309 201.829 66.24 203.6199 66.24 205.829 c
+66.24 278.789 l
+66.24 280.9981 68.0309 282.789 70.24 282.789 c
 h
 S
 Q
@@ -13911,7 +14268,7 @@ Q
 0.2 0.2 0.2 SCN
 
 BT
-77.24 624.605 Td
+77.24 259.964 Td
 /F4.0 11 Tf
 <6862617365286d61696e293a3030313a303e20637265617465202774657374272c2027636627> Tj
 ET
@@ -13922,7 +14279,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-77.24 609.865 Td
+77.24 245.224 Td
 /F4.0 11 Tf
 <3020726f7728732920696e20302e34313730207365636f6e6473> Tj
 ET
@@ -13933,7 +14290,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-77.24 580.385 Td
+77.24 215.744 Td
 /F4.0 11 Tf
 <3d3e2048626173653a3a5461626c65202d2074657374> Tj
 ET
@@ -13946,7 +14303,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-52.6765 542.506 Td
+52.6765 177.865 Td
 /F1.0 10.5 Tf
 <342e> Tj
 ET
@@ -13959,7 +14316,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 542.506 Td
+66.24 177.865 Td
 /F1.0 10.5 Tf
 [<4c69737420496e666f726d6174696f6e2041626f757420796f75722054> 29.7852 <61626c65>] TJ
 ET
@@ -13970,7 +14327,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 514.726 Td
+66.24 150.085 Td
 /F1.0 10.5 Tf
 <5573652074686520> Tj
 ET
@@ -13981,7 +14338,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-105.5205 514.726 Td
+105.5205 150.085 Td
 /F4.0 10.5 Tf
 <6c697374> Tj
 ET
@@ -13992,45 +14349,113 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-126.5205 514.726 Td
+126.5205 150.085 Td
 /F1.0 10.5 Tf
-<20636f6d6d616e6420746f> Tj
+<20636f6d6d616e6420746f20636f6e6669726d20796f7572207461626c6520657869737473> 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
+/Stamp1 Do
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+541.009 14.388 Td
+/F1.0 9 Tf
+<37> Tj
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+Q
+Q
+
+endstream
+endobj
+63 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 62 0 R
+/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/Font << /F1.0 10 0 R
+/F4.0 35 0 R
+/F3.0 33 0 R
+/F5.1 45 0 R
+>>
+/XObject << /Stamp1 4586 0 R
+>>
+>>
+/Annots [64 0 R]
+>>
+endobj
+64 0 obj
+<< /Border [0 0 0]
+/A << /Type /Action
+/S /URI
+/URI (http://localhost:16010)
+>>
+/Subtype /Link
+/Rect [374.2267 744.27 480.3397 758.55]
+/Type /Annot
+>>
+endobj
+65 0 obj
+[63 0 R /XYZ 0 626.62 null]
+endobj
+66 0 obj
+<< /Length 11268
+>>
+stream
+q
+q
+/DeviceRGB cs
 0.9608 0.9608 0.9608 scn
-70.24 498.91 m
-543.04 498.91 l
-545.2491 498.91 547.04 497.1191 547.04 494.91 c
-547.04 392.47 l
-547.04 390.2609 545.2491 388.47 543.04 388.47 c
-70.24 388.47 l
-68.0309 388.47 66.24 390.2609 66.24 392.47 c
-66.24 494.91 l
-66.24 497.1191 68.0309 498.91 70.24 498.91 c
+70.24 805.89 m
+543.04 805.89 l
+545.2491 805.89 547.04 804.0991 547.04 801.89 c
+547.04 699.45 l
+547.04 697.2409 545.2491 695.45 543.04 695.45 c
+70.24 695.45 l
+68.0309 695.45 66.24 697.2409 66.24 699.45 c
+66.24 801.89 l
+66.24 804.0991 68.0309 805.89 70.24 805.89 c
 h
 f
+/DeviceRGB CS
 0.8 0.8 0.8 SCN
 0.75 w
-70.24 498.91 m
-543.04 498.91 l
-545.2491 498.91 547.04 497.1191 547.04 494.91 c
-547.04 392.47 l
-547.04 390.2609 545.2491 388.47 543.04 388.47 c
-70.24 388.47 l
-68.0309 388.47 66.24 390.2609 66.24 392.47 c
-66.24 494.91 l
-66.24 497.1191 68.0309 498.91 70.24 498.91 c
+70.24 805.89 m
+543.04 805.89 l
+545.2491 805.89 547.04 804.0991 547.04 801.89 c
+547.04 699.45 l
+547.04 697.2409 545.2491 695.45 543.04 695.45 c
+70.24 695.45 l
+68.0309 695.45 66.24 697.2409 66.24 699.45 c
+66.24 801.89 l
+66.24 804.0991 68.0309 805.89 70.24 805.89 c
 h
 S
 Q
+/DeviceRGB cs
 0.2 0.2 0.2 scn
+/DeviceRGB CS
 0.2 0.2 0.2 SCN
 
 BT
-77.24 476.085 Td
+77.24 783.065 Td
 /F4.0 11 Tf
 <6862617365286d61696e293a3030323a303e206c69737420277465737427> Tj
 ET
@@ -14041,7 +14466,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-77.24 461.345 Td
+77.24 768.325 Td
 /F4.0 11 Tf
 <5441424c45> Tj
 ET
@@ -14052,7 +14477,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-77.24 446.605 Td
+77.24 753.585 Td
 /F4.0 11 Tf
 <74657374> Tj
 ET
@@ -14063,7 +14488,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-77.24 431.865 Td
+77.24 738.845 Td
 /F4.0 11 Tf
 <3120726f7728732920696e20302e30313830207365636f6e6473> Tj
 ET
@@ -14074,20 +14499,245 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-77.24 402.385 Td
+77.24 709.365 Td
 /F4.0 11 Tf
 <3d3e205b2274657374225d> 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
+66.24 671.486 Td
+/F1.0 10.5 Tf
+<4e6f77207573652074686520> 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
+130.4895 671.486 Td
+/F4.0 10.5 Tf
+<6465736372696265> 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
+172.4895 671.486 Td
+/F1.0 10.5 Tf
+[<20636f6d6d616e6420746f207365652064657461696c732c20696e636c7564696e6720636f6e6669677572> 20.0195 <6174696f6e2064656661756c7473>] TJ
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+q
+0.9608 0.9608 0.9608 scn
+70.24 655.67 m
+543.04 655.67 l
+545.2491 655.67 547.04 653.8791 547.04 651.67 c
+547.04 416.57 l
+547.04 414.3609 545.2491 412.57 543.04 412.57 c
+70.24 412.57 l
+68.0309 412.57 66.24 414.3609 66.24 416.57 c
+66.24 651.67 l
+66.24 653.8791 68.0309 655.67 70.24 655.67 c
+h
+f
+0.8 0.8 0.8 SCN
+0.75 w
+70.24 655.67 m
+543.04 655.67 l
+545.2491 655.67 547.04 653.8791 547.04 651.67 c
+547.04 416.57 l
+547.04 414.3609 545.2491 412.57 543.04 412.57 c
+70.24 412.57 l
+68.0309 412.57 66.24 414.3609 66.24 416.57 c
+66.24 651.67 l
+66.24 653.8791 68.0309 655.67 70.24 655.67 c
+h
+S
+Q
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+77.24 632.845 Td
+/F4.0 11 Tf
+<6862617365286d61696e293a3030333a303e20646573637269626520277465737427> 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
+77.24 618.105 Td
+/F4.0 11 Tf
+<5461626c65207465737420697320454e41424c4544> 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
+77.24 603.365 Td
+/F4.0 11 Tf
+<74657374> 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
+77.24 588.625 Td
+/F4.0 11 Tf
+<434f4c554d4e2046414d494c494553204445534352495054494f4e> 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
+77.24 573.885 Td
+/F4.0 11 Tf
+<7b4e414d45203d3e20276366272c2056455253494f4e53203d3e202731272c2045564943545f424c4f434b535f4f4e5f434c4f5345203d3e202766616c7365272c> 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
+77.24 559.145 Td
+/F4.0 11 Tf
+<4e45575f56455253494f4e5f4245484156494f52203d3e202766616c7365272c204b4545505f44454c455445445f43454c4c53203d3e202746414c5345272c2043414348455f444154415f4f4e5f5752495445> 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
+77.24 544.405 Td
+/F4.0 11 Tf
+<3d3e> 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
+77.24 529.665 Td
+/F4.0 11 Tf
+<2766616c7365272c20444154415f424c4f434b5f454e434f44494e47203d3e20274e4f4e45272c2054544c203d3e2027464f5245564552272c204d494e5f56455253494f4e53203d3e202730272c> 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
+77.24 514.925 Td
+/F4.0 11 Tf
+<5245504c

<TRUNCATED>

[10/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
index 63b8c53..88e70e2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
@@ -25,460 +25,470 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<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.HConstants.CATALOG_FAMILY;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.HConstants.NINES;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.HConstants.ZEROES;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.TableName.META_TABLE_NAME;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.createClosestRowAfter;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.isEmptyStopRow;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.client.RegionInfo.createRegionName;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.util.Bytes.BYTES_COMPARATOR;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.util.CollectionUtils.computeIfAbsent;<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.util.Arrays;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.HashSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.Iterator;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.LinkedHashMap;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.List;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Map;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.Optional;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Set;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.concurrent.CompletableFuture;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.ConcurrentMap;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.concurrent.ConcurrentNavigableMap;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.TableName;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.slf4j.Logger;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.slf4j.LoggerFactory;<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> * The asynchronous locator for regions other than meta.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.Private<a name="line.59"></a>
-<span class="sourceLineNo">060</span>class AsyncNonMetaRegionLocator {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final Logger LOG = LoggerFactory.getLogger(AsyncNonMetaRegionLocator.class);<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  static final String MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE =<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    "hbase.client.meta.max.concurrent.locate.per.table";<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final int DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE = 8;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private final AsyncConnectionImpl conn;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final int maxConcurrentLocateRequestPerTable;<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private final ConcurrentMap&lt;TableName, TableCache&gt; cache = new ConcurrentHashMap&lt;&gt;();<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static final class LocateRequest {<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>    public final byte[] row;<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public final RegionLocateType locateType;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>    public LocateRequest(byte[] row, RegionLocateType locateType) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      this.row = row;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      this.locateType = locateType;<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>    @Override<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    public int hashCode() {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      return Bytes.hashCode(row) ^ locateType.hashCode();<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>    @Override<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    public boolean equals(Object obj) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      if (obj == null || obj.getClass() != LocateRequest.class) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        return false;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      LocateRequest that = (LocateRequest) obj;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      return locateType.equals(that.locateType) &amp;&amp; Bytes.equals(row, that.row);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private static final class TableCache {<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>    public final ConcurrentNavigableMap&lt;byte[], HRegionLocation&gt; cache =<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      new ConcurrentSkipListMap&lt;&gt;(BYTES_COMPARATOR);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>    public final Set&lt;LocateRequest&gt; pendingRequests = new HashSet&lt;&gt;();<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public final Map&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt; allRequests =<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      new LinkedHashMap&lt;&gt;();<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    public boolean hasQuota(int max) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      return pendingRequests.size() &lt; max;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public boolean isPending(LocateRequest req) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      return pendingRequests.contains(req);<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>    public void send(LocateRequest req) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      pendingRequests.add(req);<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>    public Optional&lt;LocateRequest&gt; getCandidate() {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      return allRequests.keySet().stream().filter(r -&gt; !isPending(r)).findFirst();<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>    public void clearCompletedRequests(Optional&lt;HRegionLocation&gt; location) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      for (Iterator&lt;Map.Entry&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt;&gt; iter =<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        allRequests.entrySet().iterator(); iter.hasNext();) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        Map.Entry&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt; entry = iter.next();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        if (tryComplete(entry.getKey(), entry.getValue(), location)) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>          iter.remove();<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>    private boolean tryComplete(LocateRequest req, CompletableFuture&lt;HRegionLocation&gt; future,<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        Optional&lt;HRegionLocation&gt; location) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      if (future.isDone()) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        return true;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      }<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      if (!location.isPresent()) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        return false;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      }<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      HRegionLocation loc = location.get();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      boolean completed;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      if (req.locateType.equals(RegionLocateType.BEFORE)) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        // for locating the row before current row, the common case is to find the previous region<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        // in reverse scan, so we check the endKey first. In general, the condition should be<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        // startKey &lt; req.row and endKey &gt;= req.row. Here we split it to endKey == req.row ||<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        // (endKey &gt; req.row &amp;&amp; startKey &lt; req.row). The two conditions are equal since startKey &lt;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        // endKey.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        int c = Bytes.compareTo(loc.getRegion().getEndKey(), req.row);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        completed =<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          c == 0 || (c &gt; 0 &amp;&amp; Bytes.compareTo(loc.getRegion().getStartKey(), req.row) &lt; 0);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      } else {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        completed = loc.getRegion().containsRow(req.row);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      if (completed) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        future.complete(loc);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        return true;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      } else {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        return false;<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>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  AsyncNonMetaRegionLocator(AsyncConnectionImpl conn) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    this.conn = conn;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    this.maxConcurrentLocateRequestPerTable = conn.getConfiguration().getInt(<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE);<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 TableCache getTableCache(TableName tableName) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    return computeIfAbsent(cache, tableName, TableCache::new);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  private void removeFromCache(HRegionLocation loc) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    TableCache tableCache = cache.get(loc.getRegion().getTable());<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    if (tableCache == null) {<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>    tableCache.cache.computeIfPresent(loc.getRegion().getStartKey(), (k, oldLoc) -&gt; {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      if (oldLoc.getSeqNum() &gt; loc.getSeqNum() ||<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        !oldLoc.getServerName().equals(loc.getServerName())) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        return oldLoc;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return null;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    });<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  // return whether we add this loc to cache<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  private boolean addToCache(TableCache tableCache, HRegionLocation loc) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    if (LOG.isTraceEnabled()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      LOG.trace("Try adding " + loc + " to cache");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    byte[] startKey = loc.getRegion().getStartKey();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    HRegionLocation oldLoc = tableCache.cache.putIfAbsent(startKey, loc);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (oldLoc == null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      return true;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    if (oldLoc.getSeqNum() &gt; loc.getSeqNum() ||<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      oldLoc.getServerName().equals(loc.getServerName())) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      if (LOG.isTraceEnabled()) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        LOG.trace("Will not add " + loc + " to cache because the old value " + oldLoc +<a name="line.205"></a>
-<span class="sourceLineNo">206</span>          " is newer than us or has the same server name");<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      return false;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    return loc == tableCache.cache.compute(startKey, (k, oldValue) -&gt; {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (oldValue == null || oldValue.getSeqNum() &lt;= loc.getSeqNum()) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        return loc;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      if (LOG.isTraceEnabled()) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        LOG.trace("Will not add " + loc + " to cache because the old value " + oldValue +<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          " is newer than us or has the same server name." +<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          " Maybe it is updated before we replace it");<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      return oldValue;<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>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      justification = "Called by lambda expression")<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  private void addToCache(HRegionLocation loc) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    addToCache(getTableCache(loc.getRegion().getTable()), loc);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    if (LOG.isTraceEnabled()) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      LOG.trace("Try adding " + loc + " to cache");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>  private void complete(TableName tableName, LocateRequest req, HRegionLocation loc,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      Throwable error) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    if (error != null) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      LOG.warn("Failed to locate region in '" + tableName + "', row='" +<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        Bytes.toStringBinary(req.row) + "', locateType=" + req.locateType, error);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    Optional&lt;LocateRequest&gt; toSend = Optional.empty();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    TableCache tableCache = getTableCache(tableName);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    if (loc != null) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      if (!addToCache(tableCache, loc)) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        // someone is ahead of us.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        synchronized (tableCache) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          tableCache.pendingRequests.remove(req);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          tableCache.clearCompletedRequests(Optional.empty());<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          // Remove a complete locate request in a synchronized block, so the table cache must have<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          // quota to send a candidate request.<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          toSend = tableCache.getCandidate();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          toSend.ifPresent(r -&gt; tableCache.send(r));<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        toSend.ifPresent(r -&gt; locateInMeta(tableName, r));<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        return;<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>    synchronized (tableCache) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      tableCache.pendingRequests.remove(req);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      if (error instanceof DoNotRetryIOException) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        CompletableFuture&lt;?&gt; future = tableCache.allRequests.remove(req);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        if (future != null) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          future.completeExceptionally(error);<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>      tableCache.clearCompletedRequests(Optional.ofNullable(loc));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // Remove a complete locate request in a synchronized block, so the table cache must have<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      // quota to send a candidate request.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      toSend = tableCache.getCandidate();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      toSend.ifPresent(r -&gt; tableCache.send(r));<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    toSend.ifPresent(r -&gt; locateInMeta(tableName, r));<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>  private void onScanComplete(TableName tableName, LocateRequest req, List&lt;Result&gt; results,<a name="line.272"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.HConstants.NINES;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.HConstants.ZEROES;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.TableName.META_TABLE_NAME;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.createClosestRowAfter;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.isEmptyStopRow;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.client.RegionInfo.createRegionName;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.util.Bytes.BYTES_COMPARATOR;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.util.CollectionUtils.computeIfAbsent;<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.util.Arrays;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.HashSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Iterator;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.LinkedHashMap;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Optional;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.Set;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.CompletableFuture;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.ConcurrentMap;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentNavigableMap;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.slf4j.Logger;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.slf4j.LoggerFactory;<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> * The asynchronous locator for regions other than meta.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.Private<a name="line.58"></a>
+<span class="sourceLineNo">059</span>class AsyncNonMetaRegionLocator {<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private static final Logger LOG = LoggerFactory.getLogger(AsyncNonMetaRegionLocator.class);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  static final String MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE =<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    "hbase.client.meta.max.concurrent.locate.per.table";<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static final int DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE = 8;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private final AsyncConnectionImpl conn;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private final int maxConcurrentLocateRequestPerTable;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private final ConcurrentMap&lt;TableName, TableCache&gt; cache = new ConcurrentHashMap&lt;&gt;();<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final class LocateRequest {<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>    public final byte[] row;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>    public final RegionLocateType locateType;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    public LocateRequest(byte[] row, RegionLocateType locateType) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      this.row = row;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      this.locateType = locateType;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>    @Override<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    public int hashCode() {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      return Bytes.hashCode(row) ^ locateType.hashCode();<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>    @Override<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    public boolean equals(Object obj) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      if (obj == null || obj.getClass() != LocateRequest.class) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>        return false;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      LocateRequest that = (LocateRequest) obj;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      return locateType.equals(that.locateType) &amp;&amp; Bytes.equals(row, that.row);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private static final class TableCache {<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public final ConcurrentNavigableMap&lt;byte[], HRegionLocation&gt; cache =<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      new ConcurrentSkipListMap&lt;&gt;(BYTES_COMPARATOR);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public final Set&lt;LocateRequest&gt; pendingRequests = new HashSet&lt;&gt;();<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>    public final Map&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt; allRequests =<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      new LinkedHashMap&lt;&gt;();<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public boolean hasQuota(int max) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      return pendingRequests.size() &lt; max;<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>    public boolean isPending(LocateRequest req) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      return pendingRequests.contains(req);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public void send(LocateRequest req) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      pendingRequests.add(req);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    public Optional&lt;LocateRequest&gt; getCandidate() {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      return allRequests.keySet().stream().filter(r -&gt; !isPending(r)).findFirst();<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>    public void clearCompletedRequests(Optional&lt;HRegionLocation&gt; location) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      for (Iterator&lt;Map.Entry&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt;&gt; iter =<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        allRequests.entrySet().iterator(); iter.hasNext();) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        Map.Entry&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt; entry = iter.next();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        if (tryComplete(entry.getKey(), entry.getValue(), location)) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>          iter.remove();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      }<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    private boolean tryComplete(LocateRequest req, CompletableFuture&lt;HRegionLocation&gt; future,<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        Optional&lt;HRegionLocation&gt; location) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      if (future.isDone()) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        return true;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      if (!location.isPresent()) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        return false;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      HRegionLocation loc = location.get();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      boolean completed;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      if (req.locateType.equals(RegionLocateType.BEFORE)) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        // for locating the row before current row, the common case is to find the previous region<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        // in reverse scan, so we check the endKey first. In general, the condition should be<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        // startKey &lt; req.row and endKey &gt;= req.row. Here we split it to endKey == req.row ||<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        // (endKey &gt; req.row &amp;&amp; startKey &lt; req.row). The two conditions are equal since startKey &lt;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        // endKey.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        int c = Bytes.compareTo(loc.getRegion().getEndKey(), req.row);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        completed =<a name="line.153"></a>
+<span class="sourceLineNo">154</span>          c == 0 || (c &gt; 0 &amp;&amp; Bytes.compareTo(loc.getRegion().getStartKey(), req.row) &lt; 0);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      } else {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        completed = loc.getRegion().containsRow(req.row);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      if (completed) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        future.complete(loc);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        return true;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      } else {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        return false;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      }<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  AsyncNonMetaRegionLocator(AsyncConnectionImpl conn) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    this.conn = conn;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    this.maxConcurrentLocateRequestPerTable = conn.getConfiguration().getInt(<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE);<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>  private TableCache getTableCache(TableName tableName) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    return computeIfAbsent(cache, tableName, TableCache::new);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private void removeFromCache(HRegionLocation loc) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    TableCache tableCache = cache.get(loc.getRegion().getTable());<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    if (tableCache == null) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      return;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    tableCache.cache.computeIfPresent(loc.getRegion().getStartKey(), (k, oldLoc) -&gt; {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      if (oldLoc.getSeqNum() &gt; loc.getSeqNum() ||<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        !oldLoc.getServerName().equals(loc.getServerName())) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        return oldLoc;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      }<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>  }<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  // return whether we add this loc to cache<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  private boolean addToCache(TableCache tableCache, HRegionLocation loc) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    if (LOG.isTraceEnabled()) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.trace("Try adding " + loc + " to cache");<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    byte[] startKey = loc.getRegion().getStartKey();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    HRegionLocation oldLoc = tableCache.cache.putIfAbsent(startKey, loc);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    if (oldLoc == null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      return true;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (oldLoc.getSeqNum() &gt; loc.getSeqNum() ||<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      oldLoc.getServerName().equals(loc.getServerName())) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      if (LOG.isTraceEnabled()) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        LOG.trace("Will not add " + loc + " to cache because the old value " + oldLoc +<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          " is newer than us or has the same server name");<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      return false;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    return loc == tableCache.cache.compute(startKey, (k, oldValue) -&gt; {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (oldValue == null || oldValue.getSeqNum() &lt;= loc.getSeqNum()) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        return loc;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      if (LOG.isTraceEnabled()) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        LOG.trace("Will not add " + loc + " to cache because the old value " + oldValue +<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          " is newer than us or has the same server name." +<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          " Maybe it is updated before we replace it");<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      }<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      return oldValue;<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><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      justification = "Called by lambda expression")<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  private void addToCache(HRegionLocation loc) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    addToCache(getTableCache(loc.getRegion().getTable()), loc);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    if (LOG.isTraceEnabled()) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      LOG.trace("Try adding " + loc + " to cache");<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  private void complete(TableName tableName, LocateRequest req, HRegionLocation loc,<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      Throwable error) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    if (error != null) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      LOG.warn("Failed to locate region in '" + tableName + "', row='" +<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        Bytes.toStringBinary(req.row) + "', locateType=" + req.locateType, error);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    Optional&lt;LocateRequest&gt; toSend = Optional.empty();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    TableCache tableCache = getTableCache(tableName);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    if (loc != null) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      if (!addToCache(tableCache, loc)) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        // someone is ahead of us.<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        synchronized (tableCache) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          tableCache.pendingRequests.remove(req);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          tableCache.clearCompletedRequests(Optional.empty());<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          // Remove a complete locate request in a synchronized block, so the table cache must have<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          // quota to send a candidate request.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>          toSend = tableCache.getCandidate();<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          toSend.ifPresent(r -&gt; tableCache.send(r));<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        toSend.ifPresent(r -&gt; locateInMeta(tableName, r));<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        return;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    synchronized (tableCache) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      tableCache.pendingRequests.remove(req);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      if (error instanceof DoNotRetryIOException) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        CompletableFuture&lt;?&gt; future = tableCache.allRequests.remove(req);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        if (future != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          future.completeExceptionally(error);<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>      tableCache.clearCompletedRequests(Optional.ofNullable(loc));<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      // Remove a complete locate request in a synchronized block, so the table cache must have<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      // quota to send a candidate request.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      toSend = tableCache.getCandidate();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      toSend.ifPresent(r -&gt; tableCache.send(r));<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    toSend.ifPresent(r -&gt; locateInMeta(tableName, r));<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>  // return whether we should stop the scan<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  private boolean onScanNext(TableName tableName, LocateRequest req, Result result,<a name="line.272"></a>
 <span class="sourceLineNo">273</span>      Throwable error) {<a name="line.273"></a>
 <span class="sourceLineNo">274</span>    if (error != null) {<a name="line.274"></a>
 <span class="sourceLineNo">275</span>      complete(tableName, req, null, error);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return;<a name="line.276"></a>
+<span class="sourceLineNo">276</span>      return true;<a name="line.276"></a>
 <span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (results.isEmpty()) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      complete(tableName, req, null, new TableNotFoundException(tableName));<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      return;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    RegionLocations locs = MetaTableAccessor.getRegionLocations(results.get(0));<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    if (LOG.isDebugEnabled()) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      LOG.debug("The fetched location of '" + tableName + "', row='" +<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        Bytes.toStringBinary(req.row) + "', locateType=" + req.locateType + " is " + locs);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    if (locs == null || locs.getDefaultRegionLocation() == null) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      complete(tableName, req, null,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        new IOException(String.format("No location found for '%s', row='%s', locateType=%s",<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          tableName, Bytes.toStringBinary(req.row), req.locateType)));<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      return;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    HRegionLocation loc = locs.getDefaultRegionLocation();<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    RegionInfo info = loc.getRegion();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    if (info == null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      complete(tableName, req, null,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        new IOException(String.format("HRegionInfo is null for '%s', row='%s', locateType=%s",<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          tableName, Bytes.toStringBinary(req.row), req.locateType)));<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      return;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    if (!info.getTable().equals(tableName)) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      complete(tableName, req, null, new TableNotFoundException(<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          "Table '" + tableName + "' was not found, got: '" + info.getTable() + "'"));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      return;<a name="line.304"></a>
+<span class="sourceLineNo">278</span>    RegionLocations locs = MetaTableAccessor.getRegionLocations(result);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    LOG.debug("The fetched location of '{}', row='{}', locateType={} is {}", tableName,<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      Bytes.toStringBinary(req.row), req.locateType, locs);<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>    if (locs == null || locs.getDefaultRegionLocation() == null) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      complete(tableName, req, null,<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        new IOException(String.format("No location found for '%s', row='%s', locateType=%s",<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          tableName, Bytes.toStringBinary(req.row), req.locateType)));<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      return true;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    HRegionLocation loc = locs.getDefaultRegionLocation();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    RegionInfo info = loc.getRegion();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    if (info == null) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      complete(tableName, req, null,<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        new IOException(String.format("HRegionInfo is null for '%s', row='%s', locateType=%s",<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          tableName, Bytes.toStringBinary(req.row), req.locateType)));<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      return true;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    if (info.isSplitParent()) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      return false;<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    if (loc.getServerName() == null) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      complete(tableName, req, null,<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        new NoServerForRegionException(<a name="line.301"></a>
+<span class="sourceLineNo">302</span>            String.format("No server address listed for region '%s', row='%s', locateType=%s",<a name="line.302"></a>
+<span class="sourceLineNo">303</span>              info.getRegionNameAsString(), Bytes.toStringBinary(req.row), req.locateType)));<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      return true;<a name="line.304"></a>
 <span class="sourceLineNo">305</span>    }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    if (info.isSplit()) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      complete(tableName, req, null,<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        new RegionOfflineException(<a name="line.308"></a>
-<span class="sourceLineNo">309</span>            "the only available region for the required row is a split parent," +<a name="line.309"></a>
-<span class="sourceLineNo">310</span>              " the daughters should be online soon: '" + info.getRegionNameAsString() + "'"));<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      return;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    if (info.isOffline()) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      complete(tableName, req, null, new RegionOfflineException("the region is offline, could" +<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        " be caused by a disable table call: '" + info.getRegionNameAsString() + "'"));<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    if (loc.getServerName() == null) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      complete(tableName, req, null,<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        new NoServerForRegionException(<a name="line.320"></a>
-<span class="sourceLineNo">321</span>            String.format("No server address listed for region '%s', row='%s', locateType=%s",<a name="line.321"></a>
-<span class="sourceLineNo">322</span>              info.getRegionNameAsString(), Bytes.toStringBinary(req.row), req.locateType)));<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    complete(tableName, req, loc, null);<a name="line.325"></a>
+<span class="sourceLineNo">306</span>    complete(tableName, req, loc, null);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return true;<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>  private HRegionLocation locateRowInCache(TableCache tableCache, TableName tableName, byte[] row) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    Map.Entry&lt;byte[], HRegionLocation&gt; entry = tableCache.cache.floorEntry(row);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    if (entry == null) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return null;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    HRegionLocation loc = entry.getValue();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    byte[] endKey = loc.getRegion().getEndKey();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    if (isEmptyStopRow(endKey) || Bytes.compareTo(row, endKey) &lt; 0) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      if (LOG.isTraceEnabled()) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.CURRENT);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return loc;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    } else {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      return null;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  }<a name="line.326"></a>
 <span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  private HRegionLocation locateRowInCache(TableCache tableCache, TableName tableName, byte[] row) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    Map.Entry&lt;byte[], HRegionLocation&gt; entry = tableCache.cache.floorEntry(row);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    if (entry == null) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      return null;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    HRegionLocation loc = entry.getValue();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    byte[] endKey = loc.getRegion().getEndKey();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    if (isEmptyStopRow(endKey) || Bytes.compareTo(row, endKey) &lt; 0) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      if (LOG.isTraceEnabled()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.CURRENT);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      return loc;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    } else {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      return null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private HRegionLocation locateRowBeforeInCache(TableCache tableCache, TableName tableName,<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      byte[] row) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    Map.Entry&lt;byte[], HRegionLocation&gt; entry =<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      isEmptyStopRow(row) ? tableCache.cache.lastEntry() : tableCache.cache.lowerEntry(row);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    if (entry == null) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      return null;<a name="line.351"></a>
+<span class="sourceLineNo">328</span>  private HRegionLocation locateRowBeforeInCache(TableCache tableCache, TableName tableName,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      byte[] row) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Map.Entry&lt;byte[], HRegionLocation&gt; entry =<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      isEmptyStopRow(row) ? tableCache.cache.lastEntry() : tableCache.cache.lowerEntry(row);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    if (entry == null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      return null;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    HRegionLocation loc = entry.getValue();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    if (isEmptyStopRow(loc.getRegion().getEndKey()) ||<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      Bytes.compareTo(loc.getRegion().getEndKey(), row) &gt;= 0) {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      if (LOG.isTraceEnabled()) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +<a name="line.339"></a>
+<span class="sourceLineNo">340</span>          Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.BEFORE);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return loc;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    } else {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      return null;<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>  private void locateInMeta(TableName tableName, LocateRequest req) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    if (LOG.isTraceEnabled()) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      LOG.trace("Try locate '" + tableName + "', row='" + Bytes.toStringBinary(req.row) +<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        "', locateType=" + req.locateType + " in meta");<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    }<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    HRegionLocation loc = entry.getValue();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    if (isEmptyStopRow(loc.getRegion().getEndKey()) ||<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      Bytes.compareTo(loc.getRegion().getEndKey(), row) &gt;= 0) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      if (LOG.isTraceEnabled()) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +<a name="line.357"></a>
-<span class="sourceLineNo">358</span>          Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.BEFORE);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      return loc;<a name="line.360"></a>
+<span class="sourceLineNo">353</span>    byte[] metaStartKey;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    if (req.locateType.equals(RegionLocateType.BEFORE)) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      if (isEmptyStopRow(req.row)) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        byte[] binaryTableName = tableName.getName();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        metaStartKey = Arrays.copyOf(binaryTableName, binaryTableName.length + 1);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      } else {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        metaStartKey = createRegionName(tableName, req.row, ZEROES, false);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      }<a name="line.360"></a>
 <span class="sourceLineNo">361</span>    } else {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      return null;<a name="line.362"></a>
+<span class="sourceLineNo">362</span>      metaStartKey = createRegionName(tableName, req.row, NINES, false);<a name="line.362"></a>
 <span class="sourceLineNo">363</span>    }<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  }<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  private void locateInMeta(TableName tableName, LocateRequest req) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    if (LOG.isTraceEnabled()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      LOG.trace("Try locate '" + tableName + "', row='" + Bytes.toStringBinary(req.row) +<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        "', locateType=" + req.locateType + " in meta");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    byte[] metaKey;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    if (req.locateType.equals(RegionLocateType.BEFORE)) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      if (isEmptyStopRow(req.row)) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        byte[] binaryTableName = tableName.getName();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        metaKey = Arrays.copyOf(binaryTableName, binaryTableName.length + 1);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      } else {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        metaKey = createRegionName(tableName, req.row, ZEROES, false);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    } else {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      metaKey = createRegionName(tableName, req.row, NINES, false);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    conn.getTable(META_TABLE_NAME)<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        .scanAll(new Scan().withStartRow(metaKey).setReversed(true).addFamily(CATALOG_FAMILY)<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            .setOneRowLimit())<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        .whenComplete((results, error) -&gt; onScanComplete(tableName, req, results, error));<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private HRegionLocation locateInCache(TableCache tableCache, TableName tableName, byte[] row,<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      RegionLocateType locateType) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return locateType.equals(RegionLocateType.BEFORE)<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      ? locateRowBeforeInCache(tableCache, tableName, row)<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      : locateRowInCache(tableCache, tableName, row);<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>  // locateToPrevious is true means we will use the start key of a region to locate the region<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  // placed before it. Used for reverse scan. See the comment of<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  // AsyncRegionLocator.getPreviousRegionLocation.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  private CompletableFuture&lt;HRegionLocation&gt; getRegionLocationInternal(TableName tableName,<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      byte[] row, RegionLocateType locateType, boolean reload) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    // AFTER should be convert to CURRENT before calling this method<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    assert !locateType.equals(RegionLocateType.AFTER);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    TableCache tableCache = getTableCache(tableName);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    if (!reload) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      HRegionLocation loc = locateInCache(tableCache, tableName, row, locateType);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      if (loc != null) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        return CompletableFuture.completedFuture(loc);<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>    CompletableFuture&lt;HRegionLocation&gt; future;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    LocateRequest req;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    boolean sendRequest = false;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    synchronized (tableCache) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      // check again<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (!reload) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        HRegionLocation loc = locateInCache(tableCache, tableName, row, locateType);<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        if (loc != null) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          return CompletableFuture.completedFuture(loc);<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>      req = new LocateRequest(row, locateType);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      future = tableCache.allRequests.get(req);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (future == null) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        future = new CompletableFuture&lt;&gt;();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        tableCache.allRequests.put(req, future);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        if (tableCache.hasQuota(maxConcurrentLocateRequestPerTable) &amp;&amp; !tableCache.isPending(req)) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>          tableCache.send(req);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          sendRequest = true;<a name="line.427"></a>
+<span class="sourceLineNo">364</span>    byte[] metaStopKey =<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      RegionInfo.createRegionName(tableName, HConstants.EMPTY_START_ROW, "", false);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    conn.getTable(META_TABLE_NAME)<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      .scan(new Scan().withStartRow(metaStartKey).withStopRow(metaStopKey, true)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        .addFamily(HConstants.CATALOG_FAMILY).setReversed(true).setCaching(5)<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        .setReadType(ReadType.PREAD), new AdvancedScanResultConsumer() {<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>          private boolean completeNormally = false;<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>          @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          public void onError(Throwable error) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>            onScanNext(tableName, req, null, error);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>          @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          public void onComplete() {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>            if (!completeNormally) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>              onScanNext(tableName, req, null, new TableNotFoundException(tableName));<a name="line.381"></a>
+<span class="sourceLineNo">382</span>            }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>          @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          public void onNext(Result[] results, ScanController controller) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>            for (Result result : results) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>              if (onScanNext(tableName, req, result, null)) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>                completeNormally = true;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>                controller.terminate();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>                return;<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>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private HRegionLocation locateInCache(TableCache tableCache, TableName tableName, byte[] row,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      RegionLocateType locateType) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return locateType.equals(RegionLocateType.BEFORE)<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      ? locateRowBeforeInCache(tableCache, tableName, row)<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      : locateRowInCache(tableCache, tableName, row);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>  // locateToPrevious is true means we will use the start key of a region to locate the region<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  // placed before it. Used for reverse scan. See the comment of<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  // AsyncRegionLocator.getPreviousRegionLocation.<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private CompletableFuture&lt;HRegionLocation&gt; getRegionLocationInternal(TableName tableName,<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      byte[] row, RegionLocateType locateType, boolean reload) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    // AFTER should be convert to CURRENT before calling this method<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    assert !locateType.equals(RegionLocateType.AFTER);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    TableCache tableCache = getTableCache(tableName);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    if (!reload) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      HRegionLocation loc = locateInCache(tableCache, tableName, row, locateType);<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      if (loc != null) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        return CompletableFuture.completedFuture(loc);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    CompletableFuture&lt;HRegionLocation&gt; future;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    LocateRequest req;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    boolean sendRequest = false;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    synchronized (tableCache) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      // check again<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      if (!reload) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        HRegionLocation loc = locateInCache(tableCache, tableName, row, locateType);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (loc != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          return CompletableFuture.completedFuture(loc);<a name="line.427"></a>
 <span class="sourceLineNo">428</span>        }<a name="line.428"></a>
 <span class="sourceLineNo">429</span>      }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (sendRequest) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      locateInMeta(tableName, req);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    return future;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, byte[] row,<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      RegionLocateType locateType, boolean reload) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (locateType.equals(RegionLocateType.BEFORE)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      return getRegionLocationInternal(tableName, row, locateType, reload);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    } else {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      // as we know the exact row after us, so we can just create the new row, and use the same<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      // algorithm to locate it.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      if (locateType.equals(RegionLocateType.AFTER)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        row = createClosestRowAfter(row);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      return getRegionLocationInternal(tableName, row, RegionLocateType.CURRENT, reload);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  void updateCachedLocation(HRegionLocation loc, Throwable exception) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      TableCache tableCache = cache.get(l.getRegion().getTable());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      if (tableCache == null) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        return null;<a name="line.455"></a>
+<span class="sourceLineNo">430</span>      req = new LocateRequest(row, locateType);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      future = tableCache.allRequests.get(req);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      if (future == null) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        future = new CompletableFuture&lt;&gt;();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>        tableCache.allRequests.put(req, future);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>        if (tableCache.hasQuota(maxConcurrentLocateRequestPerTable) &amp;&amp; !tableCache.isPending(req)) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          tableCache.send(req);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>          sendRequest = true;<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>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    if (sendRequest) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      locateInMeta(tableName, req);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    return future;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>  CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, byte[] row,<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      RegionLocateType locateType, boolean reload) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    if (locateType.equals(RegionLocateType.BEFORE)) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      return getRegionLocationInternal(tableName, row, locateType, reload);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    } else {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // as we know the exact row after us, so we can just create the new row, and use the same<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      // algorithm to locate it.<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      if (locateType.equals(RegionLocateType.AFTER)) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        row = createClosestRowAfter(row);<a name="line.455"></a>
 <span class="sourceLineNo">456</span>      }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      return tableCache.cache.get(l.getRegion().getStartKey());<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    }, this::addToCache, this::removeFromCache);<a name="line.458"></a>
+<span class="sourceLineNo">457</span>      return getRegionLocationInternal(tableName, row, RegionLocateType.CURRENT, reload);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
 <span class="sourceLineNo">459</span>  }<a name="line.459"></a>
 <span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>  void clearCache(TableName tableName) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    TableCache tableCache = cache.remove(tableName);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    if (tableCache == null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    synchronized (tableCache) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (!tableCache.allRequests.isEmpty()) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        IOException error = new IOException("Cache cleared");<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        tableCache.allRequests.values().forEach(f -&gt; f.completeExceptionally(error));<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      }<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>}<a name="line.473"></a>
+<span class="sourceLineNo">461</span>  void updateCachedLocation(HRegionLocation loc, Throwable exception) {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      TableCache tableCache = cache.get(l.getRegion().getTable());<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      if (tableCache == null) {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        return null;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      return tableCache.cache.get(l.getRegion().getStartKey());<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    }, this::addToCache, this::removeFromCache);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span class="sourceLineN

<TRUNCATED>

[14/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
index b7bbf1e..cb87695 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.60">AsyncNonMetaRegionLocator</a>
+class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.59">AsyncNonMetaRegionLocator</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 asynchronous locator for regions other than meta.</div>
 </li>
@@ -273,11 +273,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                 byte[]&nbsp;row)</code>&nbsp;</td>
 </tr>
 <tr id="i11" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#onScanComplete-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-java.util.List-java.lang.Throwable-">onScanComplete</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-              <a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;results,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</code>&nbsp;</td>
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#onScanNext-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-org.apache.hadoop.hbase.client.Result-java.lang.Throwable-">onScanNext</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+          <a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
+          <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
+          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</code>&nbsp;</td>
 </tr>
 <tr id="i12" class="altColor">
 <td class="colFirst"><code>private void</code></td>
@@ -316,7 +316,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/client/AsyncNonMetaRegionLocator.html#line.62">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.61">LOG</a></pre>
 </li>
 </ul>
 <a name="MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE">
@@ -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>MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE</h4>
-<pre>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/AsyncNonMetaRegionLocator.html#line.64">MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE</a></pre>
+<pre>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/AsyncNonMetaRegionLocator.html#line.63">MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE">Constant Field Values</a></dd>
@@ -338,7 +338,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.67">DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.66">DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE">Constant Field Values</a></dd>
@@ -351,7 +351,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>conn</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncConnectionImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.69">conn</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncConnectionImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.68">conn</a></pre>
 </li>
 </ul>
 <a name="maxConcurrentLocateRequestPerTable">
@@ -360,7 +360,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>maxConcurrentLocateRequestPerTable</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.71">maxConcurrentLocateRequestPerTable</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.70">maxConcurrentLocateRequestPerTable</a></pre>
 </li>
 </ul>
 <a name="cache">
@@ -369,7 +369,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cache</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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.TableCache</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.73">cache</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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.TableCache</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.72">cache</a></pre>
 </li>
 </ul>
 </li>
@@ -386,7 +386,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AsyncNonMetaRegionLocator</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.168">AsyncNonMetaRegionLocator</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncConnectionImpl</a>&nbsp;conn)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.167">AsyncNonMetaRegionLocator</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncConnectionImpl</a>&nbsp;conn)</pre>
 </li>
 </ul>
 </li>
@@ -403,7 +403,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableCache</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.TableCache</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.174">getTableCache</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.TableCache</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.173">getTableCache</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="removeFromCache-org.apache.hadoop.hbase.HRegionLocation-">
@@ -412,7 +412,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeFromCache</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.178">removeFromCache</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.177">removeFromCache</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc)</pre>
 </li>
 </ul>
 <a name="addToCache-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.TableCache-org.apache.hadoop.hbase.HRegionLocation-">
@@ -421,7 +421,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addToCache</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.193">addToCache</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.TableCache</a>&nbsp;tableCache,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.192">addToCache</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.TableCache</a>&nbsp;tableCache,
                            <a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc)</pre>
 </li>
 </ul>
@@ -431,7 +431,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addToCache</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.225">addToCache</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.224">addToCache</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc)</pre>
 </li>
 </ul>
 <a name="complete-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-org.apache.hadoop.hbase.HRegionLocation-java.lang.Throwable-">
@@ -440,22 +440,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>complete</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.232">complete</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.231">complete</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                       <a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
                       <a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 </li>
 </ul>
-<a name="onScanComplete-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-java.util.List-java.lang.Throwable-">
+<a name="onScanNext-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.LocateRequest-org.apache.hadoop.hbase.client.Result-java.lang.Throwable-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>onScanComplete</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.272">onScanComplete</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                            <a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
-                            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;results,
-                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
+<h4>onScanNext</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.272">onScanNext</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                           <a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req,
+                           <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
+                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 </li>
 </ul>
 <a name="locateRowInCache-org.apache.hadoop.hbase.client.AsyncNonMetaRegionLocator.TableCache-org.apache.hadoop.hbase.TableName-byte:A-">
@@ -464,7 +464,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>locateRowInCache</h4>
-<pre>private&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/AsyncNonMetaRegionLocator.html#line.328">locateRowInCache</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.TableCache</a>&nbsp;tableCache,
+<pre>private&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/AsyncNonMetaRegionLocator.html#line.310">locateRowInCache</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.TableCache</a>&nbsp;tableCache,
                                          <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                          byte[]&nbsp;row)</pre>
 </li>
@@ -475,7 +475,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>locateRowBeforeInCache</h4>
-<pre>private&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/AsyncNonMetaRegionLocator.html#line.346">locateRowBeforeInCache</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.TableCache</a>&nbsp;tableCache,
+<pre>private&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/AsyncNonMetaRegionLocator.html#line.328">locateRowBeforeInCache</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.TableCache</a>&nbsp;tableCache,
                                                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                byte[]&nbsp;row)</pre>
 </li>
@@ -486,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>locateInMeta</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.366">locateInMeta</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.348">locateInMeta</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                           <a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.LocateRequest</a>&nbsp;req)</pre>
 </li>
 </ul>
@@ -496,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>locateInCache</h4>
-<pre>private&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/AsyncNonMetaRegionLocator.html#line.388">locateInCache</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.TableCache</a>&nbsp;tableCache,
+<pre>private&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/AsyncNonMetaRegionLocator.html#line.398">locateInCache</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html" title="class in org.apache.hadoop.hbase.client">AsyncNonMetaRegionLocator.TableCache</a>&nbsp;tableCache,
                                       <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                       byte[]&nbsp;row,
                                       <a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client">RegionLocateType</a>&nbsp;locateType)</pre>
@@ -508,7 +508,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLocationInternal</h4>
-<pre>private&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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.398">getRegionLocationInternal</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>private&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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.408">getRegionLocationInternal</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                                      byte[]&nbsp;row,
                                                                      <a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client">RegionLocateType</a>&nbsp;locateType,
                                                                      boolean&nbsp;reload)</pre>
@@ -520,7 +520,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLocation</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;<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/AsyncNonMetaRegionLocator.html#line.437">getRegionLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<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;<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/AsyncNonMetaRegionLocator.html#line.447">getRegionLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                      byte[]&nbsp;row,
                                                      <a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client">RegionLocateType</a>&nbsp;locateType,
                                                      boolean&nbsp;reload)</pre>
@@ -532,7 +532,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateCachedLocation</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.451">updateCachedLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.461">updateCachedLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;exception)</pre>
 </li>
 </ul>
@@ -542,7 +542,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>clearCache</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.461">clearCache</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html#line.471">clearCache</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 </li>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/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 2014869..2dea78a 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.989">ConnectionImplementation.MasterServiceState</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.982">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.990">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.983">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.992">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.985">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.993">userCount</a></pre>
+<pre>int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.986">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.995">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.988">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.1001">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.994">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.1005">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.998">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.1009">clearStub</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.1002">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.1013">isMasterRunning</a>()
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceState.html#line.1006">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/1ee65067/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 e95132e..b56809b 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.1104">ConnectionImplementation.MasterServiceStubMaker</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1097">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.1104">MasterServiceStubMaker</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.MasterServiceStubMaker.html#line.1097">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.1106">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.1099">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.1120">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.1113">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.1148">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.1141">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/1ee65067/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 11e4528..c1b3164 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.1088">ConnectionImplementation.ServerErrorTracker.ServerErrors</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1081">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.1089">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.1082">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.1088">ServerErrors</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html#line.1081">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.1091">getCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html#line.1084">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.1095">addError</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.ServerErrors.html#line.1088">addError</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/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 29fe2aa..70d758a 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.1027">ConnectionImplementation.ServerErrorTracker</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1020">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.1029">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.1022">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.1030">canRetryUntil</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1023">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.1031">maxTries</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1024">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.1032">startTrackingTime</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1025">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.1039">ServerErrorTracker</a>(long&nbsp;timeout,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1032">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.1049">canTryMore</a>(int&nbsp;numAttempt)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1042">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.1062">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.1055">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.1077">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.1070">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.1081">getStartTrackingTime</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html#line.1074">getStartTrackingTime</a>()</pre>
 </li>
 </ul>
 </li>


[05/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

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

<TRUNCATED>

[09/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
index 63b8c53..88e70e2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
@@ -25,460 +25,470 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<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.HConstants.CATALOG_FAMILY;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.HConstants.NINES;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.HConstants.ZEROES;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.TableName.META_TABLE_NAME;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.createClosestRowAfter;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.isEmptyStopRow;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.client.RegionInfo.createRegionName;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.util.Bytes.BYTES_COMPARATOR;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.apache.hadoop.hbase.util.CollectionUtils.computeIfAbsent;<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.util.Arrays;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.HashSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.Iterator;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.LinkedHashMap;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.List;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Map;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.Optional;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Set;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.concurrent.CompletableFuture;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.ConcurrentMap;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.concurrent.ConcurrentNavigableMap;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.TableName;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.slf4j.Logger;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.slf4j.LoggerFactory;<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> * The asynchronous locator for regions other than meta.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.Private<a name="line.59"></a>
-<span class="sourceLineNo">060</span>class AsyncNonMetaRegionLocator {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final Logger LOG = LoggerFactory.getLogger(AsyncNonMetaRegionLocator.class);<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  static final String MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE =<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    "hbase.client.meta.max.concurrent.locate.per.table";<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final int DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE = 8;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private final AsyncConnectionImpl conn;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final int maxConcurrentLocateRequestPerTable;<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private final ConcurrentMap&lt;TableName, TableCache&gt; cache = new ConcurrentHashMap&lt;&gt;();<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static final class LocateRequest {<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>    public final byte[] row;<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public final RegionLocateType locateType;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>    public LocateRequest(byte[] row, RegionLocateType locateType) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      this.row = row;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      this.locateType = locateType;<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>    @Override<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    public int hashCode() {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      return Bytes.hashCode(row) ^ locateType.hashCode();<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>    @Override<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    public boolean equals(Object obj) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      if (obj == null || obj.getClass() != LocateRequest.class) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        return false;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      LocateRequest that = (LocateRequest) obj;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      return locateType.equals(that.locateType) &amp;&amp; Bytes.equals(row, that.row);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private static final class TableCache {<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>    public final ConcurrentNavigableMap&lt;byte[], HRegionLocation&gt; cache =<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      new ConcurrentSkipListMap&lt;&gt;(BYTES_COMPARATOR);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>    public final Set&lt;LocateRequest&gt; pendingRequests = new HashSet&lt;&gt;();<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public final Map&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt; allRequests =<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      new LinkedHashMap&lt;&gt;();<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    public boolean hasQuota(int max) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      return pendingRequests.size() &lt; max;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public boolean isPending(LocateRequest req) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      return pendingRequests.contains(req);<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>    public void send(LocateRequest req) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      pendingRequests.add(req);<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>    public Optional&lt;LocateRequest&gt; getCandidate() {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      return allRequests.keySet().stream().filter(r -&gt; !isPending(r)).findFirst();<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>    public void clearCompletedRequests(Optional&lt;HRegionLocation&gt; location) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      for (Iterator&lt;Map.Entry&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt;&gt; iter =<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        allRequests.entrySet().iterator(); iter.hasNext();) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        Map.Entry&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt; entry = iter.next();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        if (tryComplete(entry.getKey(), entry.getValue(), location)) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>          iter.remove();<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>    private boolean tryComplete(LocateRequest req, CompletableFuture&lt;HRegionLocation&gt; future,<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        Optional&lt;HRegionLocation&gt; location) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      if (future.isDone()) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        return true;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      }<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      if (!location.isPresent()) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        return false;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      }<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      HRegionLocation loc = location.get();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      boolean completed;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      if (req.locateType.equals(RegionLocateType.BEFORE)) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        // for locating the row before current row, the common case is to find the previous region<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        // in reverse scan, so we check the endKey first. In general, the condition should be<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        // startKey &lt; req.row and endKey &gt;= req.row. Here we split it to endKey == req.row ||<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        // (endKey &gt; req.row &amp;&amp; startKey &lt; req.row). The two conditions are equal since startKey &lt;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        // endKey.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        int c = Bytes.compareTo(loc.getRegion().getEndKey(), req.row);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        completed =<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          c == 0 || (c &gt; 0 &amp;&amp; Bytes.compareTo(loc.getRegion().getStartKey(), req.row) &lt; 0);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      } else {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        completed = loc.getRegion().containsRow(req.row);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      if (completed) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        future.complete(loc);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        return true;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      } else {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        return false;<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>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  AsyncNonMetaRegionLocator(AsyncConnectionImpl conn) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    this.conn = conn;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    this.maxConcurrentLocateRequestPerTable = conn.getConfiguration().getInt(<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE);<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 TableCache getTableCache(TableName tableName) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    return computeIfAbsent(cache, tableName, TableCache::new);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  private void removeFromCache(HRegionLocation loc) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    TableCache tableCache = cache.get(loc.getRegion().getTable());<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    if (tableCache == null) {<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>    tableCache.cache.computeIfPresent(loc.getRegion().getStartKey(), (k, oldLoc) -&gt; {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      if (oldLoc.getSeqNum() &gt; loc.getSeqNum() ||<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        !oldLoc.getServerName().equals(loc.getServerName())) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        return oldLoc;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return null;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    });<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  // return whether we add this loc to cache<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  private boolean addToCache(TableCache tableCache, HRegionLocation loc) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    if (LOG.isTraceEnabled()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      LOG.trace("Try adding " + loc + " to cache");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    byte[] startKey = loc.getRegion().getStartKey();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    HRegionLocation oldLoc = tableCache.cache.putIfAbsent(startKey, loc);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (oldLoc == null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      return true;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    if (oldLoc.getSeqNum() &gt; loc.getSeqNum() ||<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      oldLoc.getServerName().equals(loc.getServerName())) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      if (LOG.isTraceEnabled()) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        LOG.trace("Will not add " + loc + " to cache because the old value " + oldLoc +<a name="line.205"></a>
-<span class="sourceLineNo">206</span>          " is newer than us or has the same server name");<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      return false;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    return loc == tableCache.cache.compute(startKey, (k, oldValue) -&gt; {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (oldValue == null || oldValue.getSeqNum() &lt;= loc.getSeqNum()) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        return loc;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      if (LOG.isTraceEnabled()) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        LOG.trace("Will not add " + loc + " to cache because the old value " + oldValue +<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          " is newer than us or has the same server name." +<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          " Maybe it is updated before we replace it");<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      return oldValue;<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>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      justification = "Called by lambda expression")<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  private void addToCache(HRegionLocation loc) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    addToCache(getTableCache(loc.getRegion().getTable()), loc);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    if (LOG.isTraceEnabled()) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      LOG.trace("Try adding " + loc + " to cache");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>  private void complete(TableName tableName, LocateRequest req, HRegionLocation loc,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      Throwable error) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    if (error != null) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      LOG.warn("Failed to locate region in '" + tableName + "', row='" +<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        Bytes.toStringBinary(req.row) + "', locateType=" + req.locateType, error);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    Optional&lt;LocateRequest&gt; toSend = Optional.empty();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    TableCache tableCache = getTableCache(tableName);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    if (loc != null) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      if (!addToCache(tableCache, loc)) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        // someone is ahead of us.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        synchronized (tableCache) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          tableCache.pendingRequests.remove(req);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          tableCache.clearCompletedRequests(Optional.empty());<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          // Remove a complete locate request in a synchronized block, so the table cache must have<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          // quota to send a candidate request.<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          toSend = tableCache.getCandidate();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          toSend.ifPresent(r -&gt; tableCache.send(r));<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        toSend.ifPresent(r -&gt; locateInMeta(tableName, r));<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        return;<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>    synchronized (tableCache) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      tableCache.pendingRequests.remove(req);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      if (error instanceof DoNotRetryIOException) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        CompletableFuture&lt;?&gt; future = tableCache.allRequests.remove(req);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        if (future != null) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          future.completeExceptionally(error);<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>      tableCache.clearCompletedRequests(Optional.ofNullable(loc));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // Remove a complete locate request in a synchronized block, so the table cache must have<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      // quota to send a candidate request.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      toSend = tableCache.getCandidate();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      toSend.ifPresent(r -&gt; tableCache.send(r));<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    toSend.ifPresent(r -&gt; locateInMeta(tableName, r));<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>  private void onScanComplete(TableName tableName, LocateRequest req, List&lt;Result&gt; results,<a name="line.272"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.HConstants.NINES;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.HConstants.ZEROES;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.TableName.META_TABLE_NAME;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.createClosestRowAfter;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.apache.hadoop.hbase.client.ConnectionUtils.isEmptyStopRow;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.apache.hadoop.hbase.client.RegionInfo.createRegionName;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.apache.hadoop.hbase.util.Bytes.BYTES_COMPARATOR;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.apache.hadoop.hbase.util.CollectionUtils.computeIfAbsent;<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.util.Arrays;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.HashSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Iterator;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.LinkedHashMap;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Optional;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.Set;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.CompletableFuture;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.ConcurrentMap;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentNavigableMap;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.slf4j.Logger;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.slf4j.LoggerFactory;<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> * The asynchronous locator for regions other than meta.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.Private<a name="line.58"></a>
+<span class="sourceLineNo">059</span>class AsyncNonMetaRegionLocator {<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private static final Logger LOG = LoggerFactory.getLogger(AsyncNonMetaRegionLocator.class);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  static final String MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE =<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    "hbase.client.meta.max.concurrent.locate.per.table";<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static final int DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE = 8;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private final AsyncConnectionImpl conn;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private final int maxConcurrentLocateRequestPerTable;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private final ConcurrentMap&lt;TableName, TableCache&gt; cache = new ConcurrentHashMap&lt;&gt;();<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final class LocateRequest {<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>    public final byte[] row;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>    public final RegionLocateType locateType;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    public LocateRequest(byte[] row, RegionLocateType locateType) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      this.row = row;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      this.locateType = locateType;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>    @Override<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    public int hashCode() {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      return Bytes.hashCode(row) ^ locateType.hashCode();<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>    @Override<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    public boolean equals(Object obj) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      if (obj == null || obj.getClass() != LocateRequest.class) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>        return false;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      LocateRequest that = (LocateRequest) obj;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      return locateType.equals(that.locateType) &amp;&amp; Bytes.equals(row, that.row);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private static final class TableCache {<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public final ConcurrentNavigableMap&lt;byte[], HRegionLocation&gt; cache =<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      new ConcurrentSkipListMap&lt;&gt;(BYTES_COMPARATOR);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public final Set&lt;LocateRequest&gt; pendingRequests = new HashSet&lt;&gt;();<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>    public final Map&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt; allRequests =<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      new LinkedHashMap&lt;&gt;();<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public boolean hasQuota(int max) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      return pendingRequests.size() &lt; max;<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>    public boolean isPending(LocateRequest req) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      return pendingRequests.contains(req);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public void send(LocateRequest req) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      pendingRequests.add(req);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    public Optional&lt;LocateRequest&gt; getCandidate() {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      return allRequests.keySet().stream().filter(r -&gt; !isPending(r)).findFirst();<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>    public void clearCompletedRequests(Optional&lt;HRegionLocation&gt; location) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      for (Iterator&lt;Map.Entry&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt;&gt; iter =<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        allRequests.entrySet().iterator(); iter.hasNext();) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        Map.Entry&lt;LocateRequest, CompletableFuture&lt;HRegionLocation&gt;&gt; entry = iter.next();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        if (tryComplete(entry.getKey(), entry.getValue(), location)) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>          iter.remove();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      }<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    private boolean tryComplete(LocateRequest req, CompletableFuture&lt;HRegionLocation&gt; future,<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        Optional&lt;HRegionLocation&gt; location) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      if (future.isDone()) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        return true;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      if (!location.isPresent()) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        return false;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      HRegionLocation loc = location.get();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      boolean completed;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      if (req.locateType.equals(RegionLocateType.BEFORE)) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        // for locating the row before current row, the common case is to find the previous region<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        // in reverse scan, so we check the endKey first. In general, the condition should be<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        // startKey &lt; req.row and endKey &gt;= req.row. Here we split it to endKey == req.row ||<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        // (endKey &gt; req.row &amp;&amp; startKey &lt; req.row). The two conditions are equal since startKey &lt;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        // endKey.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        int c = Bytes.compareTo(loc.getRegion().getEndKey(), req.row);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        completed =<a name="line.153"></a>
+<span class="sourceLineNo">154</span>          c == 0 || (c &gt; 0 &amp;&amp; Bytes.compareTo(loc.getRegion().getStartKey(), req.row) &lt; 0);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      } else {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        completed = loc.getRegion().containsRow(req.row);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      if (completed) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        future.complete(loc);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        return true;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      } else {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        return false;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      }<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  AsyncNonMetaRegionLocator(AsyncConnectionImpl conn) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    this.conn = conn;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    this.maxConcurrentLocateRequestPerTable = conn.getConfiguration().getInt(<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, DEFAULT_MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE);<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>  private TableCache getTableCache(TableName tableName) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    return computeIfAbsent(cache, tableName, TableCache::new);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private void removeFromCache(HRegionLocation loc) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    TableCache tableCache = cache.get(loc.getRegion().getTable());<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    if (tableCache == null) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      return;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    tableCache.cache.computeIfPresent(loc.getRegion().getStartKey(), (k, oldLoc) -&gt; {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      if (oldLoc.getSeqNum() &gt; loc.getSeqNum() ||<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        !oldLoc.getServerName().equals(loc.getServerName())) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        return oldLoc;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      }<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>  }<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  // return whether we add this loc to cache<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  private boolean addToCache(TableCache tableCache, HRegionLocation loc) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    if (LOG.isTraceEnabled()) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.trace("Try adding " + loc + " to cache");<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    byte[] startKey = loc.getRegion().getStartKey();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    HRegionLocation oldLoc = tableCache.cache.putIfAbsent(startKey, loc);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    if (oldLoc == null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      return true;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (oldLoc.getSeqNum() &gt; loc.getSeqNum() ||<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      oldLoc.getServerName().equals(loc.getServerName())) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      if (LOG.isTraceEnabled()) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        LOG.trace("Will not add " + loc + " to cache because the old value " + oldLoc +<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          " is newer than us or has the same server name");<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      return false;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    return loc == tableCache.cache.compute(startKey, (k, oldValue) -&gt; {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (oldValue == null || oldValue.getSeqNum() &lt;= loc.getSeqNum()) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        return loc;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      if (LOG.isTraceEnabled()) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        LOG.trace("Will not add " + loc + " to cache because the old value " + oldValue +<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          " is newer than us or has the same server name." +<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          " Maybe it is updated before we replace it");<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      }<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      return oldValue;<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><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      justification = "Called by lambda expression")<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  private void addToCache(HRegionLocation loc) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    addToCache(getTableCache(loc.getRegion().getTable()), loc);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    if (LOG.isTraceEnabled()) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      LOG.trace("Try adding " + loc + " to cache");<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  private void complete(TableName tableName, LocateRequest req, HRegionLocation loc,<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      Throwable error) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    if (error != null) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      LOG.warn("Failed to locate region in '" + tableName + "', row='" +<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        Bytes.toStringBinary(req.row) + "', locateType=" + req.locateType, error);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    Optional&lt;LocateRequest&gt; toSend = Optional.empty();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    TableCache tableCache = getTableCache(tableName);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    if (loc != null) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      if (!addToCache(tableCache, loc)) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        // someone is ahead of us.<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        synchronized (tableCache) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          tableCache.pendingRequests.remove(req);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          tableCache.clearCompletedRequests(Optional.empty());<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          // Remove a complete locate request in a synchronized block, so the table cache must have<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          // quota to send a candidate request.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>          toSend = tableCache.getCandidate();<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          toSend.ifPresent(r -&gt; tableCache.send(r));<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        toSend.ifPresent(r -&gt; locateInMeta(tableName, r));<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        return;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    synchronized (tableCache) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      tableCache.pendingRequests.remove(req);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      if (error instanceof DoNotRetryIOException) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        CompletableFuture&lt;?&gt; future = tableCache.allRequests.remove(req);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        if (future != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          future.completeExceptionally(error);<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>      tableCache.clearCompletedRequests(Optional.ofNullable(loc));<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      // Remove a complete locate request in a synchronized block, so the table cache must have<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      // quota to send a candidate request.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      toSend = tableCache.getCandidate();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      toSend.ifPresent(r -&gt; tableCache.send(r));<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    toSend.ifPresent(r -&gt; locateInMeta(tableName, r));<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>  // return whether we should stop the scan<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  private boolean onScanNext(TableName tableName, LocateRequest req, Result result,<a name="line.272"></a>
 <span class="sourceLineNo">273</span>      Throwable error) {<a name="line.273"></a>
 <span class="sourceLineNo">274</span>    if (error != null) {<a name="line.274"></a>
 <span class="sourceLineNo">275</span>      complete(tableName, req, null, error);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return;<a name="line.276"></a>
+<span class="sourceLineNo">276</span>      return true;<a name="line.276"></a>
 <span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (results.isEmpty()) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      complete(tableName, req, null, new TableNotFoundException(tableName));<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      return;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    RegionLocations locs = MetaTableAccessor.getRegionLocations(results.get(0));<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    if (LOG.isDebugEnabled()) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      LOG.debug("The fetched location of '" + tableName + "', row='" +<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        Bytes.toStringBinary(req.row) + "', locateType=" + req.locateType + " is " + locs);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    if (locs == null || locs.getDefaultRegionLocation() == null) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      complete(tableName, req, null,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        new IOException(String.format("No location found for '%s', row='%s', locateType=%s",<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          tableName, Bytes.toStringBinary(req.row), req.locateType)));<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      return;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    HRegionLocation loc = locs.getDefaultRegionLocation();<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    RegionInfo info = loc.getRegion();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    if (info == null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      complete(tableName, req, null,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        new IOException(String.format("HRegionInfo is null for '%s', row='%s', locateType=%s",<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          tableName, Bytes.toStringBinary(req.row), req.locateType)));<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      return;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    if (!info.getTable().equals(tableName)) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      complete(tableName, req, null, new TableNotFoundException(<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          "Table '" + tableName + "' was not found, got: '" + info.getTable() + "'"));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      return;<a name="line.304"></a>
+<span class="sourceLineNo">278</span>    RegionLocations locs = MetaTableAccessor.getRegionLocations(result);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    LOG.debug("The fetched location of '{}', row='{}', locateType={} is {}", tableName,<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      Bytes.toStringBinary(req.row), req.locateType, locs);<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>    if (locs == null || locs.getDefaultRegionLocation() == null) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      complete(tableName, req, null,<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        new IOException(String.format("No location found for '%s', row='%s', locateType=%s",<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          tableName, Bytes.toStringBinary(req.row), req.locateType)));<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      return true;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    HRegionLocation loc = locs.getDefaultRegionLocation();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    RegionInfo info = loc.getRegion();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    if (info == null) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      complete(tableName, req, null,<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        new IOException(String.format("HRegionInfo is null for '%s', row='%s', locateType=%s",<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          tableName, Bytes.toStringBinary(req.row), req.locateType)));<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      return true;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    if (info.isSplitParent()) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      return false;<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    if (loc.getServerName() == null) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      complete(tableName, req, null,<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        new NoServerForRegionException(<a name="line.301"></a>
+<span class="sourceLineNo">302</span>            String.format("No server address listed for region '%s', row='%s', locateType=%s",<a name="line.302"></a>
+<span class="sourceLineNo">303</span>              info.getRegionNameAsString(), Bytes.toStringBinary(req.row), req.locateType)));<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      return true;<a name="line.304"></a>
 <span class="sourceLineNo">305</span>    }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    if (info.isSplit()) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      complete(tableName, req, null,<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        new RegionOfflineException(<a name="line.308"></a>
-<span class="sourceLineNo">309</span>            "the only available region for the required row is a split parent," +<a name="line.309"></a>
-<span class="sourceLineNo">310</span>              " the daughters should be online soon: '" + info.getRegionNameAsString() + "'"));<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      return;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    if (info.isOffline()) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      complete(tableName, req, null, new RegionOfflineException("the region is offline, could" +<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        " be caused by a disable table call: '" + info.getRegionNameAsString() + "'"));<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    if (loc.getServerName() == null) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      complete(tableName, req, null,<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        new NoServerForRegionException(<a name="line.320"></a>
-<span class="sourceLineNo">321</span>            String.format("No server address listed for region '%s', row='%s', locateType=%s",<a name="line.321"></a>
-<span class="sourceLineNo">322</span>              info.getRegionNameAsString(), Bytes.toStringBinary(req.row), req.locateType)));<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return;<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    complete(tableName, req, loc, null);<a name="line.325"></a>
+<span class="sourceLineNo">306</span>    complete(tableName, req, loc, null);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return true;<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>  private HRegionLocation locateRowInCache(TableCache tableCache, TableName tableName, byte[] row) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    Map.Entry&lt;byte[], HRegionLocation&gt; entry = tableCache.cache.floorEntry(row);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    if (entry == null) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return null;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    HRegionLocation loc = entry.getValue();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    byte[] endKey = loc.getRegion().getEndKey();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    if (isEmptyStopRow(endKey) || Bytes.compareTo(row, endKey) &lt; 0) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      if (LOG.isTraceEnabled()) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.CURRENT);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return loc;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    } else {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      return null;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  }<a name="line.326"></a>
 <span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  private HRegionLocation locateRowInCache(TableCache tableCache, TableName tableName, byte[] row) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    Map.Entry&lt;byte[], HRegionLocation&gt; entry = tableCache.cache.floorEntry(row);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    if (entry == null) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      return null;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    HRegionLocation loc = entry.getValue();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    byte[] endKey = loc.getRegion().getEndKey();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    if (isEmptyStopRow(endKey) || Bytes.compareTo(row, endKey) &lt; 0) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      if (LOG.isTraceEnabled()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.CURRENT);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      return loc;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    } else {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      return null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private HRegionLocation locateRowBeforeInCache(TableCache tableCache, TableName tableName,<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      byte[] row) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    Map.Entry&lt;byte[], HRegionLocation&gt; entry =<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      isEmptyStopRow(row) ? tableCache.cache.lastEntry() : tableCache.cache.lowerEntry(row);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    if (entry == null) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      return null;<a name="line.351"></a>
+<span class="sourceLineNo">328</span>  private HRegionLocation locateRowBeforeInCache(TableCache tableCache, TableName tableName,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      byte[] row) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Map.Entry&lt;byte[], HRegionLocation&gt; entry =<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      isEmptyStopRow(row) ? tableCache.cache.lastEntry() : tableCache.cache.lowerEntry(row);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    if (entry == null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      return null;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    HRegionLocation loc = entry.getValue();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    if (isEmptyStopRow(loc.getRegion().getEndKey()) ||<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      Bytes.compareTo(loc.getRegion().getEndKey(), row) &gt;= 0) {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      if (LOG.isTraceEnabled()) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +<a name="line.339"></a>
+<span class="sourceLineNo">340</span>          Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.BEFORE);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return loc;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    } else {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      return null;<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>  private void locateInMeta(TableName tableName, LocateRequest req) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    if (LOG.isTraceEnabled()) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      LOG.trace("Try locate '" + tableName + "', row='" + Bytes.toStringBinary(req.row) +<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        "', locateType=" + req.locateType + " in meta");<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    }<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    HRegionLocation loc = entry.getValue();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    if (isEmptyStopRow(loc.getRegion().getEndKey()) ||<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      Bytes.compareTo(loc.getRegion().getEndKey(), row) &gt;= 0) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      if (LOG.isTraceEnabled()) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        LOG.trace("Found " + loc + " in cache for '" + tableName + "', row='" +<a name="line.357"></a>
-<span class="sourceLineNo">358</span>          Bytes.toStringBinary(row) + "', locateType=" + RegionLocateType.BEFORE);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      return loc;<a name="line.360"></a>
+<span class="sourceLineNo">353</span>    byte[] metaStartKey;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    if (req.locateType.equals(RegionLocateType.BEFORE)) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      if (isEmptyStopRow(req.row)) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        byte[] binaryTableName = tableName.getName();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        metaStartKey = Arrays.copyOf(binaryTableName, binaryTableName.length + 1);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      } else {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        metaStartKey = createRegionName(tableName, req.row, ZEROES, false);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      }<a name="line.360"></a>
 <span class="sourceLineNo">361</span>    } else {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      return null;<a name="line.362"></a>
+<span class="sourceLineNo">362</span>      metaStartKey = createRegionName(tableName, req.row, NINES, false);<a name="line.362"></a>
 <span class="sourceLineNo">363</span>    }<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  }<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  private void locateInMeta(TableName tableName, LocateRequest req) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    if (LOG.isTraceEnabled()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      LOG.trace("Try locate '" + tableName + "', row='" + Bytes.toStringBinary(req.row) +<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        "', locateType=" + req.locateType + " in meta");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    byte[] metaKey;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    if (req.locateType.equals(RegionLocateType.BEFORE)) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      if (isEmptyStopRow(req.row)) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        byte[] binaryTableName = tableName.getName();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        metaKey = Arrays.copyOf(binaryTableName, binaryTableName.length + 1);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      } else {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        metaKey = createRegionName(tableName, req.row, ZEROES, false);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    } else {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      metaKey = createRegionName(tableName, req.row, NINES, false);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    conn.getTable(META_TABLE_NAME)<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        .scanAll(new Scan().withStartRow(metaKey).setReversed(true).addFamily(CATALOG_FAMILY)<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            .setOneRowLimit())<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        .whenComplete((results, error) -&gt; onScanComplete(tableName, req, results, error));<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private HRegionLocation locateInCache(TableCache tableCache, TableName tableName, byte[] row,<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      RegionLocateType locateType) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return locateType.equals(RegionLocateType.BEFORE)<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      ? locateRowBeforeInCache(tableCache, tableName, row)<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      : locateRowInCache(tableCache, tableName, row);<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>  // locateToPrevious is true means we will use the start key of a region to locate the region<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  // placed before it. Used for reverse scan. See the comment of<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  // AsyncRegionLocator.getPreviousRegionLocation.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  private CompletableFuture&lt;HRegionLocation&gt; getRegionLocationInternal(TableName tableName,<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      byte[] row, RegionLocateType locateType, boolean reload) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    // AFTER should be convert to CURRENT before calling this method<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    assert !locateType.equals(RegionLocateType.AFTER);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    TableCache tableCache = getTableCache(tableName);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    if (!reload) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      HRegionLocation loc = locateInCache(tableCache, tableName, row, locateType);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      if (loc != null) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        return CompletableFuture.completedFuture(loc);<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>    CompletableFuture&lt;HRegionLocation&gt; future;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    LocateRequest req;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    boolean sendRequest = false;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    synchronized (tableCache) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      // check again<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (!reload) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        HRegionLocation loc = locateInCache(tableCache, tableName, row, locateType);<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        if (loc != null) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          return CompletableFuture.completedFuture(loc);<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>      req = new LocateRequest(row, locateType);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      future = tableCache.allRequests.get(req);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (future == null) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        future = new CompletableFuture&lt;&gt;();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        tableCache.allRequests.put(req, future);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        if (tableCache.hasQuota(maxConcurrentLocateRequestPerTable) &amp;&amp; !tableCache.isPending(req)) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>          tableCache.send(req);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          sendRequest = true;<a name="line.427"></a>
+<span class="sourceLineNo">364</span>    byte[] metaStopKey =<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      RegionInfo.createRegionName(tableName, HConstants.EMPTY_START_ROW, "", false);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    conn.getTable(META_TABLE_NAME)<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      .scan(new Scan().withStartRow(metaStartKey).withStopRow(metaStopKey, true)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        .addFamily(HConstants.CATALOG_FAMILY).setReversed(true).setCaching(5)<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        .setReadType(ReadType.PREAD), new AdvancedScanResultConsumer() {<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>          private boolean completeNormally = false;<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>          @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          public void onError(Throwable error) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>            onScanNext(tableName, req, null, error);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>          @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          public void onComplete() {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>            if (!completeNormally) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>              onScanNext(tableName, req, null, new TableNotFoundException(tableName));<a name="line.381"></a>
+<span class="sourceLineNo">382</span>            }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>          @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          public void onNext(Result[] results, ScanController controller) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>            for (Result result : results) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>              if (onScanNext(tableName, req, result, null)) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>                completeNormally = true;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>                controller.terminate();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>                return;<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>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private HRegionLocation locateInCache(TableCache tableCache, TableName tableName, byte[] row,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      RegionLocateType locateType) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return locateType.equals(RegionLocateType.BEFORE)<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      ? locateRowBeforeInCache(tableCache, tableName, row)<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      : locateRowInCache(tableCache, tableName, row);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>  // locateToPrevious is true means we will use the start key of a region to locate the region<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  // placed before it. Used for reverse scan. See the comment of<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  // AsyncRegionLocator.getPreviousRegionLocation.<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private CompletableFuture&lt;HRegionLocation&gt; getRegionLocationInternal(TableName tableName,<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      byte[] row, RegionLocateType locateType, boolean reload) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    // AFTER should be convert to CURRENT before calling this method<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    assert !locateType.equals(RegionLocateType.AFTER);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    TableCache tableCache = getTableCache(tableName);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    if (!reload) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      HRegionLocation loc = locateInCache(tableCache, tableName, row, locateType);<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      if (loc != null) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        return CompletableFuture.completedFuture(loc);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    CompletableFuture&lt;HRegionLocation&gt; future;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    LocateRequest req;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    boolean sendRequest = false;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    synchronized (tableCache) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      // check again<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      if (!reload) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        HRegionLocation loc = locateInCache(tableCache, tableName, row, locateType);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (loc != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          return CompletableFuture.completedFuture(loc);<a name="line.427"></a>
 <span class="sourceLineNo">428</span>        }<a name="line.428"></a>
 <span class="sourceLineNo">429</span>      }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (sendRequest) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      locateInMeta(tableName, req);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    return future;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, byte[] row,<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      RegionLocateType locateType, boolean reload) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (locateType.equals(RegionLocateType.BEFORE)) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      return getRegionLocationInternal(tableName, row, locateType, reload);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    } else {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      // as we know the exact row after us, so we can just create the new row, and use the same<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      // algorithm to locate it.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      if (locateType.equals(RegionLocateType.AFTER)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        row = createClosestRowAfter(row);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      return getRegionLocationInternal(tableName, row, RegionLocateType.CURRENT, reload);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  void updateCachedLocation(HRegionLocation loc, Throwable exception) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      TableCache tableCache = cache.get(l.getRegion().getTable());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      if (tableCache == null) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        return null;<a name="line.455"></a>
+<span class="sourceLineNo">430</span>      req = new LocateRequest(row, locateType);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      future = tableCache.allRequests.get(req);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      if (future == null) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        future = new CompletableFuture&lt;&gt;();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>        tableCache.allRequests.put(req, future);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>        if (tableCache.hasQuota(maxConcurrentLocateRequestPerTable) &amp;&amp; !tableCache.isPending(req)) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          tableCache.send(req);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>          sendRequest = true;<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>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    if (sendRequest) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      locateInMeta(tableName, req);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    return future;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>  CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, byte[] row,<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      RegionLocateType locateType, boolean reload) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    if (locateType.equals(RegionLocateType.BEFORE)) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      return getRegionLocationInternal(tableName, row, locateType, reload);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    } else {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // as we know the exact row after us, so we can just create the new row, and use the same<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      // algorithm to locate it.<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      if (locateType.equals(RegionLocateType.AFTER)) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        row = createClosestRowAfter(row);<a name="line.455"></a>
 <span class="sourceLineNo">456</span>      }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      return tableCache.cache.get(l.getRegion().getStartKey());<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    }, this::addToCache, this::removeFromCache);<a name="line.458"></a>
+<span class="sourceLineNo">457</span>      return getRegionLocationInternal(tableName, row, RegionLocateType.CURRENT, reload);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
 <span class="sourceLineNo">459</span>  }<a name="line.459"></a>
 <span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>  void clearCache(TableName tableName) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    TableCache tableCache = cache.remove(tableName);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    if (tableCache == null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    synchronized (tableCache) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (!tableCache.allRequests.isEmpty()) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        IOException error = new IOException("Cache cleared");<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        tableCache.allRequests.values().forEach(f -&gt; f.completeExceptionally(error));<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      }<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>}<a name="line.473"></a>
+<span class="sourceLineNo">461</span>  void updateCachedLocation(HRegionLocation loc, Throwable exception) {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      TableCache tableCache = cache.get(l.getRegion().getTable());<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      if (tableCache == null) {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        return null;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      return tableCache.cache.get(l.getRegion().getStartKey());<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    }, this::addToCache, this::removeFromCache);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sour

<TRUNCATED>

[13/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/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 1416209..9889c69 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ConnectionImplementation.html
@@ -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.137">ConnectionImplementation</a>
+class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.138">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.
@@ -724,7 +724,10 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
                   byte[]&nbsp;row,
                   boolean&nbsp;useCache,
                   boolean&nbsp;retry,
-                  int&nbsp;replicaId)</code>&nbsp;</td>
+                  int&nbsp;replicaId)</code>
+<div class="block">Search the hbase:meta table for the HRegionLocation info that contains the table and row we're
+ seeking.</div>
+</td>
 </tr>
 <tr id="i62" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;</code></td>
@@ -844,7 +847,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.138">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.139">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>
@@ -857,7 +860,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.139">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.140">LOG</a></pre>
 </li>
 </ul>
 <a name="RESOLVE_HOSTNAME_ON_FAIL_KEY">
@@ -866,7 +869,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.141">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.142">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>
@@ -879,7 +882,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.143">hostnamesCanChange</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.144">hostnamesCanChange</a></pre>
 </li>
 </ul>
 <a name="pause">
@@ -888,7 +891,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.144">pause</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.145">pause</a></pre>
 </li>
 </ul>
 <a name="pauseForCQTBE">
@@ -897,7 +900,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.145">pauseForCQTBE</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.146">pauseForCQTBE</a></pre>
 </li>
 </ul>
 <a name="useMetaReplicas">
@@ -906,7 +909,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.146">useMetaReplicas</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.147">useMetaReplicas</a></pre>
 </li>
 </ul>
 <a name="metaReplicaCallTimeoutScanInMicroSecond">
@@ -915,7 +918,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.147">metaReplicaCallTimeoutScanInMicroSecond</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.148">metaReplicaCallTimeoutScanInMicroSecond</a></pre>
 </li>
 </ul>
 <a name="numTries">
@@ -924,7 +927,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.148">numTries</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.149">numTries</a></pre>
 </li>
 </ul>
 <a name="rpcTimeout">
@@ -933,7 +936,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.149">rpcTimeout</a></pre>
+<pre>final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.150">rpcTimeout</a></pre>
 </li>
 </ul>
 <a name="nonceGenerator">
@@ -942,7 +945,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.155">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.156">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>
@@ -953,7 +956,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.157">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.158">nonceGeneratorCreateLock</a></pre>
 <div class="block">The nonce generator lock. Only taken when creating Connection, which gets a private copy.</div>
 </li>
 </ul>
@@ -963,7 +966,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.159">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.160">asyncProcess</a></pre>
 </li>
 </ul>
 <a name="stats">
@@ -972,7 +975,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.161">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.162">stats</a></pre>
 </li>
 </ul>
 <a name="closed">
@@ -981,7 +984,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.163">closed</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.164">closed</a></pre>
 </li>
 </ul>
 <a name="aborted">
@@ -990,7 +993,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.164">aborted</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.165">aborted</a></pre>
 </li>
 </ul>
 <a name="clusterStatusListener">
@@ -999,7 +1002,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.167">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.168">clusterStatusListener</a></pre>
 </li>
 </ul>
 <a name="metaRegionLock">
@@ -1008,7 +1011,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.169">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.170">metaRegionLock</a></pre>
 </li>
 </ul>
 <a name="masterLock">
@@ -1017,7 +1020,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.171">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.172">masterLock</a></pre>
 </li>
 </ul>
 <a name="batchPool">
@@ -1026,7 +1029,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.175">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.176">batchPool</a></pre>
 </li>
 </ul>
 <a name="metaLookupPool">
@@ -1035,7 +1038,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.178">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.179">metaLookupPool</a></pre>
 </li>
 </ul>
 <a name="cleanupPool">
@@ -1044,7 +1047,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.179">cleanupPool</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.180">cleanupPool</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -1053,7 +1056,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.181">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.182">conf</a></pre>
 </li>
 </ul>
 <a name="connectionConfig">
@@ -1062,7 +1065,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.185">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.186">connectionConfig</a></pre>
 </li>
 </ul>
 <a name="rpcClient">
@@ -1071,7 +1074,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.188">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.189">rpcClient</a></pre>
 </li>
 </ul>
 <a name="metaCache">
@@ -1080,7 +1083,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.190">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.191">metaCache</a></pre>
 </li>
 </ul>
 <a name="metrics">
@@ -1089,7 +1092,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.191">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.192">metrics</a></pre>
 </li>
 </ul>
 <a name="user">
@@ -1098,7 +1101,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.193">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.194">user</a></pre>
 </li>
 </ul>
 <a name="rpcCallerFactory">
@@ -1107,7 +1110,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.195">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.196">rpcCallerFactory</a></pre>
 </li>
 </ul>
 <a name="rpcControllerFactory">
@@ -1116,7 +1119,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.197">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.198">rpcControllerFactory</a></pre>
 </li>
 </ul>
 <a name="interceptor">
@@ -1125,7 +1128,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.199">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.200">interceptor</a></pre>
 </li>
 </ul>
 <a name="registry">
@@ -1134,7 +1137,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.204">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.205">registry</a></pre>
 <div class="block">Cluster registry of basic info such as clusterid and meta region location.</div>
 </li>
 </ul>
@@ -1144,7 +1147,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.206">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.207">backoffPolicy</a></pre>
 </li>
 </ul>
 <a name="alternateBufferedMutatorClassName">
@@ -1153,7 +1156,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.212">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.213">alternateBufferedMutatorClassName</a></pre>
 <div class="block">Allow setting an alternate BufferedMutator implementation via
  config. If null, use default.</div>
 </li>
@@ -1164,7 +1167,7 @@ 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.215">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.216">userRegionLock</a></pre>
 <div class="block">lock guards against multiple threads trying to query the meta region at the same time</div>
 </li>
 </ul>
@@ -1174,7 +1177,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <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.519">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.520">clusterId</a></pre>
 </li>
 </ul>
 <a name="stubs">
@@ -1183,7 +1186,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.984">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.977">stubs</a></pre>
 </li>
 </ul>
 <a name="masterServiceState">
@@ -1192,7 +1195,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.1205">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.1198">masterServiceState</a></pre>
 </li>
 </ul>
 </li>
@@ -1209,7 +1212,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.221">ConnectionImplementation</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.222">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>
@@ -1236,7 +1239,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnect
 <ul class="blockList">
 <li class="blockList">
 <h4>setUseMetaReplicas</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.318">setUseMetaReplicas</a>(boolean&nbsp;useMetaReplicas)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.319">setUseMetaReplicas</a>(boolean&nbsp;useMetaReplicas)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>useMetaReplicas</code> - </dd>
@@ -1249,7 +1252,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.328">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.329">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>
@@ -1266,7 +1269,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.339">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.340">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.
@@ -1298,7 +1301,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.344">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.345">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>
@@ -1317,7 +1320,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.356">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.357">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
@@ -1339,7 +1342,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.395">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.396">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
@@ -1369,7 +1372,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.400">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.401">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
@@ -1400,7 +1403,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.405">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.406">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.
@@ -1426,7 +1429,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.410">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.411">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>
@@ -1441,7 +1444,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.414">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.415">getBatchPool</a>()</pre>
 </li>
 </ul>
 <a name="getThreadPool-int-int-java.lang.String-java.util.concurrent.BlockingQueue-">
@@ -1450,7 +1453,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.427">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.428">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>
@@ -1462,7 +1465,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.456">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.457">getMetaLookupPool</a>()</pre>
 </li>
 </ul>
 <a name="getCurrentMetaLookupPool--">
@@ -1471,7 +1474,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.475">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.476">getCurrentMetaLookupPool</a>()</pre>
 </li>
 </ul>
 <a name="getCurrentBatchPool--">
@@ -1480,7 +1483,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.479">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.480">getCurrentBatchPool</a>()</pre>
 </li>
 </ul>
 <a name="shutdownPools--">
@@ -1489,7 +1492,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.483">shutdownPools</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.484">shutdownPools</a>()</pre>
 </li>
 </ul>
 <a name="shutdownBatchPool-java.util.concurrent.ExecutorService-">
@@ -1498,7 +1501,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.492">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.493">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--">
@@ -1507,7 +1510,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.507">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.508">getRpcClient</a>()</pre>
 <div class="block">For tests only.</div>
 </li>
 </ul>
@@ -1517,7 +1520,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.515">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.516">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>
@@ -1531,7 +1534,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.521">retrieveClusterId</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.522">retrieveClusterId</a>()</pre>
 </li>
 </ul>
 <a name="getConfiguration--">
@@ -1540,7 +1543,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.537">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.538">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>
@@ -1555,7 +1558,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.541">checkClosed</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.542">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>
@@ -1570,7 +1573,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.554">isMasterRunning</a>()
+public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.555">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>
@@ -1591,7 +1594,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.569">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.570">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>
@@ -1617,7 +1620,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.576">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.577">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
@@ -1641,7 +1644,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.581">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.582">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>
@@ -1661,7 +1664,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.586">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.587">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>
@@ -1687,7 +1690,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.645">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.646">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>
@@ -1710,7 +1713,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.651">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.652">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-">
@@ -1719,7 +1722,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.660">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.661">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>
@@ -1741,7 +1744,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.665">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.666">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>
@@ -1768,7 +1771,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.691">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.692">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/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-org.apache.hadoop.hbase.TableName-byte:A-">ClusterConnection</a></code></span></div>
@@ -1794,7 +1797,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>relocateRegion</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.698">relocateRegion</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.699">relocateRegion</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/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#relocateRegion-org.apache.hadoop.hbase.TableName-byte:A-">ClusterConnection</a></code></span></div>
@@ -1820,7 +1823,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>relocateRegion</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.707">relocateRegion</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/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.708">relocateRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                       byte[]&nbsp;row,
                                       int&nbsp;replicaId)
                                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>
@@ -1848,7 +1851,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/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.720">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/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.721">locateRegion</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;useCache,
                                     boolean&nbsp;retry)
@@ -1874,7 +1877,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/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.726">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/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.727">locateRegion</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;useCache,
                                     boolean&nbsp;retry,
@@ -1902,7 +1905,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>locateMeta</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.740">locateMeta</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.741">locateMeta</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                    boolean&nbsp;useCache,
                                    int&nbsp;replicaId)
                             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>
@@ -1918,12 +1921,14 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>locateRegionInMeta</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.778">locateRegionInMeta</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.779">locateRegionInMeta</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;useCache,
                                            boolean&nbsp;retry,
                                            int&nbsp;replicaId)
                                     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">Search the hbase:meta table for the HRegionLocation info that contains the table and row we're
+ seeking.</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>
@@ -1936,7 +1941,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheLocation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.936">cacheLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.929">cacheLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                           <a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;location)</pre>
 <div class="block">Put a newly discovered HRegionLocation into the cache.</div>
 <dl>
@@ -1954,7 +1959,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getCachedLocation</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.945">getCachedLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre><a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.938">getCachedLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                   byte[]&nbsp;row)</pre>
 <div class="block">Search the cache for a location that fits our table and row key.
  Return null if no suitable region is located.</div>
@@ -1970,7 +1975,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>clearRegionCache</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.950">clearRegionCache</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.943">clearRegionCache</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                              byte[]&nbsp;row)</pre>
 </li>
 </ul>
@@ -1980,7 +1985,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>clearCaches</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.958">clearCaches</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.951">clearCaches</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html#clearCaches-org.apache.hadoop.hbase.ServerName-">ClusterConnection</a></code></span></div>
 <div class="block">Clear any caches that pertain to server name <code>sn</code>.</div>
 <dl>
@@ -1997,7 +2002,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>clearRegionCache</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.963">clearRegionCache</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.956">clearRegionCache</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html#clearRegionCache--">ClusterConnection</a></code></span></div>
 <div class="block">Allows flushing the region cache.</div>
 <dl>
@@ -2012,7 +2017,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>clearRegionCache</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.968">clearRegionCache</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.961">clearRegionCache</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/ClusterConnection.html#clearRegionCache-org.apache.hadoop.hbase.TableName-">ClusterConnection</a></code></span></div>
 <div class="block">Allows flushing the region cache of all locations that pertain to
  <code>tableName</code></div>
@@ -2031,7 +2036,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheLocation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.978">cacheLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.971">cacheLocation</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                            <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;source,
                            <a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;location)</pre>
 <div class="block">Put a newly discovered HRegionLocation into the cache.</div>
@@ -2049,7 +2054,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getAdminForMaster</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1170">getAdminForMaster</a>()
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1163">getAdminForMaster</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/ClusterConnection.html#getAdminForMaster--">ClusterConnection</a></code></span></div>
 <div class="block">Get the admin service for master.</div>
@@ -2067,7 +2072,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getAdmin</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1175">getAdmin</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1168">getAdmin</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>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html#getAdmin-org.apache.hadoop.hbase.ServerName-">ClusterConnection</a></code></span></div>
 <div class="block">Establishes a connection to the region server at the specified address.</div>
@@ -2087,7 +2092,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getClient</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1191">getClient</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/ConnectionImplementation.html#line.1184">getClient</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>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html#getClient-org.apache.hadoop.hbase.ServerName-">ClusterConnection</a></code></span></div>
 <div class="block

<TRUNCATED>

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

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


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

Branch: refs/heads/asf-site
Commit: 1ee650677527dfb0c57571c3599b1568e4528f18
Parents: 40396e2
Author: jenkins <bu...@apache.org>
Authored: Sat Apr 7 14:47:55 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Sat Apr 7 14:47:55 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                | 42977 +++++++++--------
 book.html                                       |   203 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       |    88 +-
 checkstyle.rss                                  |    20 +-
 coc.html                                        |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/constant-values.html                 |     6 +-
 devapidocs/index-all.html                       |     9 +-
 .../hadoop/hbase/ClusterMetrics.Option.html     |     4 +-
 .../apache/hadoop/hbase/CompareOperator.html    |     4 +-
 .../hadoop/hbase/class-use/RegionLocations.html |     5 +-
 .../hadoop/hbase/class-use/TableName.html       |    15 +-
 ...AsyncNonMetaRegionLocator.LocateRequest.html |    12 +-
 .../AsyncNonMetaRegionLocator.TableCache.html   |    22 +-
 .../hbase/client/AsyncNonMetaRegionLocator.html |    64 +-
 .../apache/hadoop/hbase/client/CompactType.html |     4 +-
 .../hadoop/hbase/client/CompactionState.html    |     4 +-
 ...ectionImplementation.MasterServiceState.html |    18 +-
 ...onImplementation.MasterServiceStubMaker.html |    10 +-
 ...ntation.ServerErrorTracker.ServerErrors.html |    10 +-
 ...ectionImplementation.ServerErrorTracker.html |    20 +-
 .../hbase/client/ConnectionImplementation.html  |   239 +-
 .../apache/hadoop/hbase/client/Durability.html  |     4 +-
 .../hadoop/hbase/client/Scan.ReadType.html      |     4 +-
 .../hadoop/hbase/client/SnapshotType.html       |     4 +-
 ...AsyncNonMetaRegionLocator.LocateRequest.html |    10 +-
 .../hadoop/hbase/client/class-use/Result.html   |    34 +-
 .../hbase/filter/CompareFilter.CompareOp.html   |     4 +-
 .../hadoop/hbase/filter/Filter.ReturnCode.html  |     4 +-
 .../security/access/Permission.Action.html      |     4 +-
 .../org/apache/hadoop/hbase/Version.html        |     6 +-
 ...AsyncNonMetaRegionLocator.LocateRequest.html |   888 +-
 .../AsyncNonMetaRegionLocator.TableCache.html   |   888 +-
 .../hbase/client/AsyncNonMetaRegionLocator.html |   888 +-
 ...ectionImplementation.MasterServiceState.html |  3559 +-
 ...onImplementation.MasterServiceStubMaker.html |  3559 +-
 ...ntation.ServerErrorTracker.ServerErrors.html |  3559 +-
 ...ectionImplementation.ServerErrorTracker.html |  3559 +-
 .../hbase/client/ConnectionImplementation.html  |  3559 +-
 export_control.html                             |     4 +-
 index.html                                      |     4 +-
 integration.html                                |     4 +-
 issue-tracking.html                             |     4 +-
 license.html                                    |     4 +-
 mail-lists.html                                 |     4 +-
 metrics.html                                    |     4 +-
 old_news.html                                   |     4 +-
 plugin-management.html                          |     4 +-
 plugins.html                                    |     4 +-
 poweredbyhbase.html                             |     4 +-
 project-info.html                               |     4 +-
 project-reports.html                            |     4 +-
 project-summary.html                            |     4 +-
 pseudo-distributed.html                         |     4 +-
 replication.html                                |     4 +-
 resources.html                                  |     4 +-
 source-repository.html                          |     4 +-
 sponsors.html                                   |     4 +-
 supportingprojects.html                         |     4 +-
 team-list.html                                  |     4 +-
 testdevapidocs/allclasses-frame.html            |     1 +
 testdevapidocs/allclasses-noframe.html          |     1 +
 testdevapidocs/index-all.html                   |    22 +-
 .../org/apache/hadoop/hbase/TestSize.html       |     4 +-
 .../org/apache/hadoop/hbase/TestSplitMerge.html |   362 +
 .../hbase/TestStochasticBalancerJmxMetrics.html |     4 +-
 .../hadoop/hbase/backup/package-tree.html       |     2 +-
 .../hbase/class-use/HBaseClassTestRule.html     |    64 +-
 .../hbase/class-use/HBaseTestingUtility.html    |    26 +-
 .../hadoop/hbase/class-use/TestSplitMerge.html  |   125 +
 ...rConcurrenyLimit.CountingRegionObserver.html |    50 +-
 ...syncNonMetaRegionLocatorConcurrenyLimit.html |     8 +-
 .../org/apache/hadoop/hbase/package-frame.html  |     1 +
 .../apache/hadoop/hbase/package-summary.html    |    24 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    11 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 .../hadoop/hbase/regionserver/package-tree.html |     4 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     4 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 testdevapidocs/overview-tree.html               |     1 +
 .../org/apache/hadoop/hbase/TestSplitMerge.html |   178 +
 ...rConcurrenyLimit.CountingRegionObserver.html |   133 +-
 ...syncNonMetaRegionLocatorConcurrenyLimit.html |   133 +-
 88 files changed, 34417 insertions(+), 31124 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index fe45dd1..ef12978 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="20180406" />
+    <meta name="Date-Revision-yyyymmdd" content="20180407" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -591,7 +591,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-04-06</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-04-07</li>
             </p>
                 </div>
 


[02/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
index 5bd1dcc..2edbeb0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -596,126 +596,130 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestNamespace.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestNamespace.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestSplitMerge.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestSplitMerge.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMetaTableAccessor.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestNamespace.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestNamespace.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestServerLoad.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestServerLoad.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMetaTableAccessor.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestInfoServers.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestInfoServers.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestServerLoad.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestServerLoad.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestClientClusterStatus.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestClientClusterStatus.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestInfoServers.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestInfoServers.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMetaTableLocator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMetaTableLocator.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestClientClusterStatus.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestClientClusterStatus.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestFSTableDescriptorForceCreation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestFSTableDescriptorForceCreation.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMetaTableLocator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMetaTableLocator.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestAcidGuaranteesWithNoInMemCompaction.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestAcidGuaranteesWithNoInMemCompaction.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestFSTableDescriptorForceCreation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestFSTableDescriptorForceCreation.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestClusterBootOrder.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestClusterBootOrder.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestAcidGuaranteesWithNoInMemCompaction.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestAcidGuaranteesWithNoInMemCompaction.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestAcidGuaranteesWithAdaptivePolicy.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestAcidGuaranteesWithAdaptivePolicy.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestClusterBootOrder.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestClusterBootOrder.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMetaTableAccessorNoCluster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMetaTableAccessorNoCluster.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestAcidGuaranteesWithAdaptivePolicy.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestAcidGuaranteesWithAdaptivePolicy.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestSerialization.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestSerialization.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMetaTableAccessorNoCluster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMetaTableAccessorNoCluster.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestServerMetrics.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestServerMetrics.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestSerialization.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestSerialization.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestTagRewriteCell.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestTagRewriteCell.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestServerMetrics.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestServerMetrics.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestHBaseOnOtherDfsCluster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestHBaseOnOtherDfsCluster.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestTagRewriteCell.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestTagRewriteCell.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestGlobalMemStoreSize.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestGlobalMemStoreSize.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestHBaseOnOtherDfsCluster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestHBaseOnOtherDfsCluster.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestHBaseTestingUtility.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestHBaseTestingUtility.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestGlobalMemStoreSize.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestGlobalMemStoreSize.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestServerName.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestServerName.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestHBaseTestingUtility.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestHBaseTestingUtility.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestJMXConnectorServer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestJMXConnectorServer.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestServerName.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestServerName.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMovedRegionsCleaner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMovedRegionsCleaner.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestJMXConnectorServer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestJMXConnectorServer.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestSize.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestSize.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMovedRegionsCleaner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMovedRegionsCleaner.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestHRegionLocation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestHRegionLocation.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestSize.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestSize.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMultiVersions.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMultiVersions.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestHRegionLocation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestHRegionLocation.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestClusterPortAssignment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestClusterPortAssignment.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMultiVersions.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMultiVersions.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestHColumnDescriptorDefaultVersions.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestHColumnDescriptorDefaultVersions.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestClusterPortAssignment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestClusterPortAssignment.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestLocalHBaseCluster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestLocalHBaseCluster.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestHColumnDescriptorDefaultVersions.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestHColumnDescriptorDefaultVersions.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestZooKeeper.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestZooKeeper.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestLocalHBaseCluster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestLocalHBaseCluster.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestNodeHealthCheckChore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestNodeHealthCheckChore.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestZooKeeper.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestZooKeeper.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestRegionRebalancing.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestRegionRebalancing.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestNodeHealthCheckChore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestNodeHealthCheckChore.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestPerformanceEvaluation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestPerformanceEvaluation.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRegionRebalancing.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestRegionRebalancing.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestPerformanceEvaluation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestPerformanceEvaluation.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestIntegrationTestBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestIntegrationTestBase.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index eff8609..be083b0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -429,49 +429,53 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMetaTableAccessor.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestSplitMerge.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestSplitMerge.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestInfoServers.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestInfoServers.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMetaTableAccessor.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestClientClusterStatus.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestClientClusterStatus.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestInfoServers.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestInfoServers.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMetaTableLocator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMetaTableLocator.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestClientClusterStatus.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestClientClusterStatus.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestFSTableDescriptorForceCreation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestFSTableDescriptorForceCreation.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMetaTableLocator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMetaTableLocator.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMetaTableAccessorNoCluster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMetaTableAccessorNoCluster.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestFSTableDescriptorForceCreation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestFSTableDescriptorForceCreation.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestJMXConnectorServer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestJMXConnectorServer.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMetaTableAccessorNoCluster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMetaTableAccessorNoCluster.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestJMXConnectorServer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestJMXConnectorServer.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMovedRegionsCleaner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMovedRegionsCleaner.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMultiVersions.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestMultiVersions.html#UTIL">UTIL</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"><span class="typeNameLabel">AcidGuaranteesTestBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/AcidGuaranteesTestBase.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestNodeHealthCheckChore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestNodeHealthCheckChore.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRegionRebalancing.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/TestRegionRebalancing.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html
index e288172..a6ac70f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html
@@ -197,14 +197,20 @@ implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.had
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#getRegionObserver--">getRegionObserver</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#postScannerClose-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-">postScannerClose</a></span>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;e,
-                org.apache.hadoop.hbase.regionserver.InternalScanner&nbsp;s)</code>&nbsp;</td>
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#postScannerNext-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-java.util.List-int-boolean-">postScannerNext</a></span>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;c,
+               org.apache.hadoop.hbase.regionserver.InternalScanner&nbsp;s,
+               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Result&gt;&nbsp;result,
+               int&nbsp;limit,
+               boolean&nbsp;hasNext)</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#preScannerOpen-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.Scan-">preScannerOpen</a></span>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;e,
-              org.apache.hadoop.hbase.client.Scan&nbsp;scan)</code>&nbsp;</td>
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#preScannerNext-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-java.util.List-int-boolean-">preScannerNext</a></span>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;c,
+              org.apache.hadoop.hbase.regionserver.InternalScanner&nbsp;s,
+              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Result&gt;&nbsp;result,
+              int&nbsp;limit,
+              boolean&nbsp;hasNext)</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -233,7 +239,7 @@ implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.had
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.coprocessor.RegionObserver</h3>
-<code>postAppend, postBatchMutate, postBatchMutateIndispensably, postBulkLoadHFile, postCheckAndDelete, postCheckAndPut, postClose, postCloseRegionOperation, postCommitStoreFile, postCompact, postCompactSelection, postDelete, postExists, postFlush, postFlush, postGetOp, postIncrement, postInstantiateDeleteTracker, postMemStoreCompaction, postMutationBeforeWAL, postOpen, postPut, postReplayWALs, postScannerFilterRow, postScannerNext, postScannerOpen, postStartRegionOperation, postStoreFileReaderOpen, postWALRestore, preAppend, preAppendAfterRowLock, preBatchMutate, preBulkLoadHFile, preCheckAndDelete, preCheckAndDeleteAfterRowLock, preCheckAndPut, preCheckAndPutAfterRowLock, preClose, preCommitStoreFile, preCompact, preCompactScannerOpen, preCompactSelection, preDelete, preExists, preFlush, preFlush, preFlushScannerOpen, preGetOp, preIncrement, preIncrementAfterRowLock, preMemStoreCompaction, preMemStoreCompactionCompact, preMemStoreCompactionCompactScannerOpen, preOpen, prePrepareTi
 meStampForDeleteVersion, prePut, preReplayWALs, preScannerClose, preScannerNext, preStoreFileReaderOpen, preStoreScannerOpen, preWALRestore</code></li>
+<code>postAppend, postBatchMutate, postBatchMutateIndispensably, postBulkLoadHFile, postCheckAndDelete, postCheckAndPut, postClose, postCloseRegionOperation, postCommitStoreFile, postCompact, postCompactSelection, postDelete, postExists, postFlush, postFlush, postGetOp, postIncrement, postInstantiateDeleteTracker, postMemStoreCompaction, postMutationBeforeWAL, postOpen, postPut, postReplayWALs, postScannerClose, postScannerFilterRow, postScannerOpen, postStartRegionOperation, postStoreFileReaderOpen, postWALRestore, preAppend, preAppendAfterRowLock, preBatchMutate, preBulkLoadHFile, preCheckAndDelete, preCheckAndDeleteAfterRowLock, preCheckAndPut, preCheckAndPutAfterRowLock, preClose, preCommitStoreFile, preCompact, preCompactScannerOpen, preCompactSelection, preDelete, preExists, preFlush, preFlush, preFlushScannerOpen, preGetOp, preIncrement, preIncrementAfterRowLock, preMemStoreCompaction, preMemStoreCompactionCompact, preMemStoreCompactionCompactScannerOpen, preOpen, prePrepareT
 imeStampForDeleteVersion, prePut, preReplayWALs, preScannerClose, preScannerOpen, preStoreFileReaderOpen, preStoreScannerOpen, preWALRestore</code></li>
 </ul>
 </li>
 </ul>
@@ -279,35 +285,41 @@ implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.had
 </dl>
 </li>
 </ul>
-<a name="preScannerOpen-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.Scan-">
+<a name="preScannerNext-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-java.util.List-int-boolean-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>preScannerOpen</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#line.90">preScannerOpen</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;e,
-                           org.apache.hadoop.hbase.client.Scan&nbsp;scan)
-                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<h4>preScannerNext</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#line.90">preScannerNext</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;c,
+                              org.apache.hadoop.hbase.regionserver.InternalScanner&nbsp;s,
+                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Result&gt;&nbsp;result,
+                              int&nbsp;limit,
+                              boolean&nbsp;hasNext)
+                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>preScannerOpen</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.coprocessor.RegionObserver</code></dd>
+<dd><code>preScannerNext</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.coprocessor.RegionObserver</code></dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
 </dl>
 </li>
 </ul>
-<a name="postScannerClose-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-">
+<a name="postScannerNext-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.InternalScanner-java.util.List-int-boolean-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>postScannerClose</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#line.108">postScannerClose</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;e,
-                             org.apache.hadoop.hbase.regionserver.InternalScanner&nbsp;s)
-                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<h4>postScannerNext</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html#line.109">postScannerNext</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;c,
+                               org.apache.hadoop.hbase.regionserver.InternalScanner&nbsp;s,
+                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Result&gt;&nbsp;result,
+                               int&nbsp;limit,
+                               boolean&nbsp;hasNext)
+                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>postScannerClose</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.coprocessor.RegionObserver</code></dd>
+<dd><code>postScannerNext</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.coprocessor.RegionObserver</code></dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
 </dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html
index 7b18aee..dd8cdbe 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html
@@ -379,7 +379,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setUp</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html#line.117">setUp</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html#line.119">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>
@@ -393,7 +393,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/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html#line.134">tearDown</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html#line.136">tearDown</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -407,7 +407,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>assertLocs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html#line.139">assertLocs</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/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;org.apache.hadoop.hbase.HRegionLocation&gt;&gt;&nbsp;futures)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html#line.141">assertLocs</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/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;org.apache.hadoop.hbase.HRegionLocation&gt;&gt;&nbsp;futures)
                  throws <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>,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</a></pre>
 <dl>
@@ -423,7 +423,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>test</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html#line.158">test</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html#line.160">test</a>()
           throws <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>,
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/org/apache/hadoop/hbase/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/package-frame.html
index d7ef1fd..8324a04 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-frame.html
@@ -240,6 +240,7 @@
 <li><a href="TestServerName.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestServerName</a></li>
 <li><a href="TestServerSideScanMetricsFromClientSide.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestServerSideScanMetricsFromClientSide</a></li>
 <li><a href="TestSize.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestSize</a></li>
+<li><a href="TestSplitMerge.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestSplitMerge</a></li>
 <li><a href="TestStochasticBalancerJmxMetrics.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestStochasticBalancerJmxMetrics</a></li>
 <li><a href="TestTableName.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestTableName</a></li>
 <li><a href="TestTableName.Names.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestTableName.Names</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/org/apache/hadoop/hbase/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/package-summary.html
index 4ed9a43..9a6db99 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-summary.html
@@ -1254,53 +1254,57 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html" title="class in org.apache.hadoop.hbase">TestStochasticBalancerJmxMetrics</a></td>
+<td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase">TestSplitMerge</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.html" title="class in org.apache.hadoop.hbase">TestStochasticBalancerJmxMetrics</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TestTableName.html" title="class in org.apache.hadoop.hbase">TestTableName</a></td>
 <td class="colLast">
 <div class="block">Returns a <code>byte[]</code> containing the name of the currently running test method.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TestTableName.Names.html" title="class in org.apache.hadoop.hbase">TestTableName.Names</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TestTagRewriteCell.html" title="class in org.apache.hadoop.hbase">TestTagRewriteCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TestTagUtil.html" title="class in org.apache.hadoop.hbase">TestTagUtil</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TestTimeout.html" title="class in org.apache.hadoop.hbase">TestTimeout</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TestZooKeeper.html" title="class in org.apache.hadoop.hbase">TestZooKeeper</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TestZooKeeper.MockLoadBalancer.html" title="class in org.apache.hadoop.hbase">TestZooKeeper.MockLoadBalancer</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TimedOutTestsListener.html" title="class in org.apache.hadoop.hbase">TimedOutTestsListener</a></td>
 <td class="colLast">
 <div class="block">JUnit run listener which prints full thread dump into System.err
  in case a test is failed due to timeout.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TimestampTestBase.html" title="class in org.apache.hadoop.hbase">TimestampTestBase</a></td>
 <td class="colLast">
 <div class="block">Tests user specifiable time stamps putting, getting and scanning.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/Waiter.html" title="class in org.apache.hadoop.hbase">Waiter</a></td>
 <td class="colLast">
 <div class="block">A class that provides a standard waitFor pattern

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/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 1f06872..0f3bba6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -507,6 +507,7 @@
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/TestServerName.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestServerName</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/TestServerSideScanMetricsFromClientSide.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestServerSideScanMetricsFromClientSide</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/TestSize.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestSize</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestSplitMerge</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/TestTableName.Names.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestTableName.Names</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/TestTagRewriteCell.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestTagRewriteCell</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/TestTagUtil.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestTagUtil</span></a></li>
@@ -568,15 +569,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/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/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/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/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/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/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/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/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 89261ec..aa8957d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -655,11 +655,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/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/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 d8de690..1a43271 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -253,10 +253,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.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>
-<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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/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 cc06fe6..4edd3f8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -139,9 +139,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/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>
-<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index 3372329..1a27e6b 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -3478,6 +3478,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestSplitLogManager.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestSplitLogManager</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestSplitLogWorker</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestSplitLogWorker.DummyServer</span></a> (implements org.apache.hadoop.hbase.Server)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSplitMerge.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestSplitMerge</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSplitOrMergeStatus.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestSplitOrMergeStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapred.<a href="org/apache/hadoop/hbase/mapred/TestSplitTable.html" title="class in org.apache.hadoop.hbase.mapred"><span class="typeNameLink">TestSplitTable</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestSplitTableRegionProcedure</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/src-html/org/apache/hadoop/hbase/TestSplitMerge.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/TestSplitMerge.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/TestSplitMerge.html
new file mode 100644
index 0000000..042f910
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/TestSplitMerge.html
@@ -0,0 +1,178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertNotNull;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.concurrent.TimeUnit;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.Waiter.ExplainingPredicate;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.client.AsyncConnection;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.junit.AfterClass;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.junit.BeforeClass;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.junit.ClassRule;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.Test;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.experimental.categories.Category;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>@Category({ MiscTests.class, MediumTests.class })<a name="line.40"></a>
+<span class="sourceLineNo">041</span>public class TestSplitMerge {<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  @ClassRule<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    HBaseClassTestRule.forClass(TestSplitMerge.class);<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  @BeforeClass<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  public static void setUp() throws Exception {<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_META_OPERATION_TIMEOUT, 1000);<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 2);<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    UTIL.startMiniCluster(1);<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>  @AfterClass<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static void tearDown() throws Exception {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    UTIL.shutdownMiniCluster();<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>  @Test<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public void test() throws Exception {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    TableName tableName = TableName.valueOf("SplitMerge");<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    byte[] family = Bytes.toBytes("CF");<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    TableDescriptor td = TableDescriptorBuilder.newBuilder(tableName)<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      .setColumnFamily(ColumnFamilyDescriptorBuilder.of(family)).build();<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    UTIL.getAdmin().createTable(td, new byte[][] { Bytes.toBytes(1) });<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    UTIL.waitTableAvailable(tableName);<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    UTIL.getAdmin().split(tableName, Bytes.toBytes(2));<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>      @Override<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      public boolean evaluate() throws Exception {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        return UTIL.getMiniHBaseCluster().getRegions(tableName).size() == 3;<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>      @Override<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      public String explainFailure() throws Exception {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        return "Split has not finished yet";<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      }<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    });<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    RegionInfo regionA = null;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    RegionInfo regionB = null;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    for (RegionInfo region : UTIL.getAdmin().getRegions(tableName)) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      if (region.getStartKey().length == 0) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>        regionA = region;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      } else if (Bytes.equals(region.getStartKey(), Bytes.toBytes(1))) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        regionB = region;<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>    assertNotNull(regionA);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    assertNotNull(regionB);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    UTIL.getAdmin().mergeRegionsAsync(regionA.getRegionName(), regionB.getRegionName(), false)<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      .get(30, TimeUnit.SECONDS);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    assertEquals(2, UTIL.getAdmin().getRegions(tableName).size());<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>    ServerName expected = UTIL.getMiniHBaseCluster().getRegionServer(0).getServerName();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    assertEquals(expected, UTIL.getConnection().getRegionLocator(tableName)<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      .getRegionLocation(Bytes.toBytes(1), true).getServerName());<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    try (AsyncConnection asyncConn =<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      ConnectionFactory.createAsyncConnection(UTIL.getConfiguration()).get()) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      assertEquals(expected, asyncConn.getRegionLocator(tableName)<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        .getRegionLocation(Bytes.toBytes(1), true).get().getServerName());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    }<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>}<a name="line.106"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[04/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

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

<TRUNCATED>

[06/17] hbase-site git commit: Published site at adc0e85e8532870fa83cb21a44061c83ae77ec34.

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

<TRUNCATED>